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 <erhar...@mailbox.org> > Reported-by: Christophe Leroy <christophe.le...@csgroup.eu> > Signed-off-by: Michael Ellerman <m...@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) > > /*