diff mbox series

powerpc/kasan: Force thread size increase with KASAN

Message ID 20220601143114.133524-1-mpe@ellerman.id.au (mailing list archive)
State Accepted
Headers show
Series powerpc/kasan: Force thread size increase with KASAN | expand

Checks

Context Check Description
snowpatch_ozlabs/github-powerpc_ppctests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_selftests success Successfully ran 10 jobs.
snowpatch_ozlabs/github-powerpc_kernel_qemu success Successfully ran 23 jobs.
snowpatch_ozlabs/github-powerpc_sparse success Successfully ran 4 jobs.
snowpatch_ozlabs/github-powerpc_clang success Successfully ran 7 jobs.

Commit Message

Michael Ellerman June 1, 2022, 2:31 p.m. UTC
KASAN causes increased stack usage, which can lead to stack overflows.

The logic in Kconfig to suggest a larger default doesn't work if a user
has CONFIG_EXPERT enabled and has an existing .config with a smaller
value.

Follow the lead of x86 and arm64, and force the thread size to be
increased when KASAN is enabled.

That also has the effect of enlarging the stack for 64-bit KASAN builds,
which is also desirable.

Fixes: edbadaf06710 ("powerpc/kasan: Fix stack overflow by increasing THREAD_SHIFT")
Reported-by: Erhard Furtner <erhard_f@mailbox.org>
Reported-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 arch/powerpc/Kconfig                   | 1 -
 arch/powerpc/include/asm/thread_info.h | 9 +++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

Comments

Christophe Leroy June 1, 2022, 3:54 p.m. UTC | #1
Le 01/06/2022 à 16:31, Michael Ellerman a écrit :
> KASAN causes increased stack usage, which can lead to stack overflows.
> 
> The logic in Kconfig to suggest a larger default doesn't work if a user
> has CONFIG_EXPERT enabled and has an existing .config with a smaller
> value.
> 
> Follow the lead of x86 and arm64, and force the thread size to be
> increased when KASAN is enabled.
> 
> That also has the effect of enlarging the stack for 64-bit KASAN builds,
> which is also desirable.
> 
> Fixes: edbadaf06710 ("powerpc/kasan: Fix stack overflow by increasing THREAD_SHIFT")
> Reported-by: Erhard Furtner <erhard_f@mailbox.org>
> Reported-by: Christophe Leroy <christophe.leroy@csgroup.eu>
> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
> ---
>   arch/powerpc/Kconfig                   | 1 -
>   arch/powerpc/include/asm/thread_info.h | 9 +++++++--
>   2 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
> index 54dbbb1d4b36..b1760d615bb7 100644
> --- a/arch/powerpc/Kconfig
> +++ b/arch/powerpc/Kconfig
> @@ -790,7 +790,6 @@ config THREAD_SHIFT
>   	range 13 15
>   	default "15" if PPC_256K_PAGES
>   	default "14" if PPC64
> -	default "14" if KASAN
>   	default "13"
>   	help
>   	  Used to define the stack size. The default is almost always what you
> diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
> index 125328d1b980..c9735f93f8e6 100644
> --- a/arch/powerpc/include/asm/thread_info.h
> +++ b/arch/powerpc/include/asm/thread_info.h
> @@ -14,12 +14,17 @@
>   
>   #ifdef __KERNEL__
>   
> -#if defined(CONFIG_VMAP_STACK) && CONFIG_THREAD_SHIFT < PAGE_SHIFT
> -#define THREAD_SHIFT		PAGE_SHIFT
> +#ifdef CONFIG_KASAN
> +#define THREAD_SHIFT		(CONFIG_THREAD_SHIFT + 1)
>   #else
>   #define THREAD_SHIFT		CONFIG_THREAD_SHIFT
>   #endif
>   
> +#if defined(CONFIG_VMAP_STACK) && THREAD_SHIFT < PAGE_SHIFT
> +#undef THREAD_SHIFT

I dislike this undef.

I would was done

#ifdef CONFIG_KASAN
#define MIN_THREAD_SHIFT	(CONFIG_THREAD_SHIFT + 1)
#else
#define MIN_THREAD_SHIFT	CONFIG_THREAD_SHIFT
#endif

#if defined(CONFIG_VMAP_STACK) && MIN_THREAD_SHIFT < PAGE_SHIFT
#define THREAD_SHIFT		PAGE_SHIFT
#else
#define THREAD_SHIFT		MIN_THREAD_SHIFT
#endif


> +#define THREAD_SHIFT		PAGE_SHIFT
> +#endif
> +
>   #define THREAD_SIZE		(1 << THREAD_SHIFT)
>   
>   /*
Michael Ellerman June 9, 2022, 2:44 p.m. UTC | #2
On Thu, 2 Jun 2022 00:31:14 +1000, Michael Ellerman wrote:
> KASAN causes increased stack usage, which can lead to stack overflows.
> 
> The logic in Kconfig to suggest a larger default doesn't work if a user
> has CONFIG_EXPERT enabled and has an existing .config with a smaller
> value.
> 
> Follow the lead of x86 and arm64, and force the thread size to be
> increased when KASAN is enabled.
> 
> [...]

Applied to powerpc/fixes.

[1/1] powerpc/kasan: Force thread size increase with KASAN
      https://git.kernel.org/powerpc/c/3e8635fb2e072672cbc650989ffedf8300ad67fb

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 54dbbb1d4b36..b1760d615bb7 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -790,7 +790,6 @@  config THREAD_SHIFT
 	range 13 15
 	default "15" if PPC_256K_PAGES
 	default "14" if PPC64
-	default "14" if KASAN
 	default "13"
 	help
 	  Used to define the stack size. The default is almost always what you
diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/include/asm/thread_info.h
index 125328d1b980..c9735f93f8e6 100644
--- a/arch/powerpc/include/asm/thread_info.h
+++ b/arch/powerpc/include/asm/thread_info.h
@@ -14,12 +14,17 @@ 
 
 #ifdef __KERNEL__
 
-#if defined(CONFIG_VMAP_STACK) && CONFIG_THREAD_SHIFT < PAGE_SHIFT
-#define THREAD_SHIFT		PAGE_SHIFT
+#ifdef CONFIG_KASAN
+#define THREAD_SHIFT		(CONFIG_THREAD_SHIFT + 1)
 #else
 #define THREAD_SHIFT		CONFIG_THREAD_SHIFT
 #endif
 
+#if defined(CONFIG_VMAP_STACK) && THREAD_SHIFT < PAGE_SHIFT
+#undef THREAD_SHIFT
+#define THREAD_SHIFT		PAGE_SHIFT
+#endif
+
 #define THREAD_SIZE		(1 << THREAD_SHIFT)
 
 /*