Commit b02faed1 authored by Mark Rutland's avatar Mark Rutland Committed by Catalin Marinas

arm64: Use larger stacks when KASAN is selected

AddressSanitizer instrumentation can significantly bloat the stack, and
with GCC 7 this can result in stack overflows at boot time in some
configurations.

We can avoid this by doubling our stack size when KASAN is in use, as is
already done on x86 (and has been since KASAN was introduced).
Regardless of other patches to decrease KASAN's stack utilization,
kernels built with KASAN will always require more stack space than those
built without, and we should take this into account.
Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
parent 37f6b42e
...@@ -95,16 +95,19 @@ ...@@ -95,16 +95,19 @@
#define KERNEL_END _end #define KERNEL_END _end
/* /*
* The size of the KASAN shadow region. This should be 1/8th of the * KASAN requires 1/8th of the kernel virtual address space for the shadow
* size of the entire kernel virtual address space. * region. KASAN can bloat the stack significantly, so double the (minimum)
* stack size when KASAN is in use.
*/ */
#ifdef CONFIG_KASAN #ifdef CONFIG_KASAN
#define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3)) #define KASAN_SHADOW_SIZE (UL(1) << (VA_BITS - 3))
#define KASAN_THREAD_SHIFT 1
#else #else
#define KASAN_SHADOW_SIZE (0) #define KASAN_SHADOW_SIZE (0)
#define KASAN_THREAD_SHIFT 0
#endif #endif
#define MIN_THREAD_SHIFT 14 #define MIN_THREAD_SHIFT (14 + KASAN_THREAD_SHIFT)
/* /*
* VMAP'd stacks are allocated at page granularity, so we must ensure that such * VMAP'd stacks are allocated at page granularity, so we must ensure that such
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment