[PATCH] powerpc/kasan: Force thread size increase with KASAN
Christophe Leroy
christophe.leroy at csgroup.eu
Thu Jun 2 01:54:00 AEST 2022
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 at mailbox.org>
> Reported-by: Christophe Leroy <christophe.leroy at csgroup.eu>
> Signed-off-by: Michael Ellerman <mpe at 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)
>
> /*
More information about the Linuxppc-dev
mailing list