[PATCH 2/2] arm64: use larger stacks for KASAN

Mark Rutland mark.rutland at arm.com
Wed Jun 7 08:35:13 PDT 2017


With recent toolchains (e.g. GCC 7.1.0), KASAN will instrument stack
accesses, significantly increasing stack pressure. This has been
observed to result in a boot-time stack overflow on Juno R1, and various
failures under Syzkaller-directed Qemu VMs.

On x86, this was addressed in commit:

  c420f167db8c799d ("kasan: enable stack instrumentation")

... by doubling the stack size to 32K when the kernel is compiled with
KASAN.

This patch does the same for arm64, enabling us to make use of KASAN's
stack instrumentation. Kernels without KASAN are not affected and will
retain the current 16K stack size.

Signed-off-by: Mark Rutland <mark.rutland at arm.com>
Cc: Alexander Potapenko <glider at google.com>
Cc: Andrey Ryabinin <aryabinin at virtuozzo.com>
Cc: Catalin Marinas <catalin.marinas at arm.com>
Cc: Dmitry Vyukov <dvyukov at google.com>
Cc: Will Deacon <will.deacon at arm.com>
---
 arch/arm64/include/asm/thread_info.h | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/thread_info.h b/arch/arm64/include/asm/thread_info.h
index 4f42275..1dec96e8 100644
--- a/arch/arm64/include/asm/thread_info.h
+++ b/arch/arm64/include/asm/thread_info.h
@@ -25,7 +25,17 @@
 
 #include <asm/page.h>
 
-#define THREAD_SHIFT		14
+/*
+ * AddressSanitizer's stack instrumentation significantly increases stack
+ * usage. We double the stack size when KASAN is selected to avoid overflows.
+ */
+#ifdef CONFIG_KASAN
+#define KASAN_THREAD_SHIFT	1
+#else
+#define KASAN_THREAD_SHIFT	0
+#endif
+
+#define THREAD_SHIFT		(14 + KASAN_THREAD_SHIFT)
 
 #if THREAD_SHIFT >= PAGE_SHIFT
 #define THREAD_SIZE_ORDER	(THREAD_SHIFT - PAGE_SHIFT)
-- 
1.9.1




More information about the linux-arm-kernel mailing list