Unverified Commit cfb10de1 authored by Alexandre Ghiti's avatar Alexandre Ghiti Committed by Palmer Dabbelt
Browse files

riscv: Fix kernel stack size when KASAN is enabled



We use Kconfig to select the kernel stack size, doubling the default
size if KASAN is enabled.

But that actually only works if KASAN is selected from the beginning,
meaning that if KASAN config is added later (for example using
menuconfig), CONFIG_THREAD_SIZE_ORDER won't be updated, keeping the
default size, which is not enough for KASAN as reported in [1].

So fix this by moving the logic to compute the right kernel stack into a
header.

Fixes: a7555f6b ("riscv: stack: Add config of thread stack size")
Reported-by: default avatar <syzbot+ba9eac24453387a9d502@syzkaller.appspotmail.com>
Closes: https://lore.kernel.org/all/000000000000eb301906222aadc2@google.com/

 [1]
Cc: stable@vger.kernel.org
Signed-off-by: default avatarAlexandre Ghiti <alexghiti@rivosinc.com>
Link: https://lore.kernel.org/r/20240917150328.59831-1-alexghiti@rivosinc.com


Signed-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
parent c6251549
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -777,8 +777,7 @@ config IRQ_STACKS
config THREAD_SIZE_ORDER
	int "Kernel stack size (in power-of-two numbers of page size)" if VMAP_STACK && EXPERT
	range 0 4
	default 1 if 32BIT && !KASAN
	default 3 if 64BIT && KASAN
	default 1 if 32BIT
	default 2
	help
	  Specify the Pages of thread stack size (from 4KB to 64KB), which also
+6 −1
Original line number Diff line number Diff line
@@ -13,7 +13,12 @@
#include <linux/sizes.h>

/* thread information allocation */
#define THREAD_SIZE_ORDER	CONFIG_THREAD_SIZE_ORDER
#ifdef CONFIG_KASAN
#define KASAN_STACK_ORDER	1
#else
#define KASAN_STACK_ORDER	0
#endif
#define THREAD_SIZE_ORDER	(CONFIG_THREAD_SIZE_ORDER + KASAN_STACK_ORDER)
#define THREAD_SIZE		(PAGE_SIZE << THREAD_SIZE_ORDER)

/*