arm64: Add CONFIG_CC_STACKPROTECTOR
PATCH v3 1/1 arm64: Add CONFIG_CC_STACKPROTECTOR
arm64 currently lacks support for -fstack-protector. Add similar functionality to arm to detect stack corruption.
Cc Will Deacon <[email protected]>
Cc Catalin Marinas <[email protected]>
Acked-by Kees Cook <[email protected]>
Signed-off-by Laura Abbott <[email protected]>
--- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/stackprotector.h | 38 +++++++++++++++++++++++++++++++++ arch/arm64/kernel/process.c | 6 ++++++ 3 files changed, 45 insertions(+) create mode 100644 arch/arm64/include/asm/stackprotector.h
arch/arm64/Kconfig +1 -0
@@ -32,6 +32,7 @@ config ARM64 select HAVE_ARCH_KGDB select HAVE_ARCH_TRACEHOOK select HAVE_C_RECORDMCOUNT + select HAVE_CC_STACKPROTECTOR select HAVE_DEBUG_BUGVERBOSE select HAVE_DEBUG_KMEMLEAK select HAVE_DMA_API_DEBUG
arch/arm64/include/asm/stackprotector.h new file +38 -0
@@ -0,0 +1,38 @@ +/* +* GCC stack protector support. +* +* Stack protector works by putting predefined pattern at the start of +* the stack frame and verifying that it hasn't been overwritten when +* returning from the function. The pattern is called stack canary +* and gcc expects it to be defined by a global variable called +* "__stack_chk_guard" on ARM. This unfortunately means that on SMP +* we cannot have a different canary value per task. +*/ + +#ifndef __ASM_STACKPROTECTOR_H +#define __ASM_STACKPROTECTOR_H + +#include <linux/random.h> +#include <linux/version.h> + +extern unsigned long __stack_chk_guard; + +/* +* Initialize the stackprotector canary value. +* +* NOTE: this must only be called from functions that never return, +* and it must always be inlined. +*/ +static __always_inline void boot_init_stack_canary(void) +{ +unsigned long canary; + +/* Try to get a semi random initial value. */ +get_random_bytes (&canary,sizeof (canary)); + canary ^=LINUX_VERSION_CODE ; + + current->stack_canary = canary; + __stack_chk_guard = current->stack_canary; +} + +#endif /* _ASM_STACKPROTECTOR_H */
arch/arm64/kernel/process.c +6 -0
@@ -51,6 +51,12 @@#include <asm/processor.h> #include <asm/stacktrace.h> +#ifdef CONFIG_CC_STACKPROTECTOR +#include <linux/stackprotector.h> +unsigned long __stack_chk_guard__read_mostly ; +EXPORT_SYMBOL (__stack_chk_guard); +#endif +static void setup_restart (void ) {/*
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
PATCH v3 1/1 arm64: Add CONFIG_CC_STACKPROTECTOR
Quoted 7 lines · Laura Abbott
arm64 currently lacks support for -fstack-protector. Add similar functionality to arm to detect stack corruption.
Cc Will Deacon <[email protected]>Cc Catalin Marinas <[email protected]>Acked-by Kees Cook <[email protected]>Signed-off-by Laura Abbott <[email protected]>
Acked-by Will Deacon <[email protected]>
Will
Catalin Marinas
maintainerPATCH v3 1/1 arm64: Add CONFIG_CC_STACKPROTECTOR
In reply to Laura AbbottQuoted 7 lines · Laura Abbott
arm64 currently lacks support for -fstack-protector. Add similar functionality to arm to detect stack corruption.
Cc Will Deacon <[email protected]>Cc Catalin Marinas <[email protected]>Acked-by Kees Cook <[email protected]>Signed-off-by Laura Abbott <[email protected]>
Quoted 6 lines
--- arch/arm64/Kconfig | 1 + arch/arm64/include/asm/stackprotector.h | 38 +++++++++++++++++++++++++++++++++ arch/arm64/kernel/process.c | 6 ++++++ 3 files changed, 45 insertions(+) create mode 100644 arch/arm64/include/asm/stackprotector.h
Applied for 3.17. Thanks.
Signature · 1 line
Catalin