| From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
| From: Sami Tolvanen <samitolvanen@google.com> |
| Date: Wed, 2 May 2018 09:41:34 -0700 |
| Subject: FROMLIST: arm64: reserve x18 from general allocation with SCS |
| |
| Reserve the x18 register from general allocation when SCS is enabled, |
| because the compiler uses the register to store the current task's |
| shadow stack pointer. Note that all external kernel modules must also be |
| compiled with -ffixed-x18 if the kernel has SCS enabled. |
| |
| Bug: 145210207 |
| Change-Id: I0407d38a0a5ecb6852b3f281d52f6601c565157e |
| (am from https://lore.kernel.org/patchwork/patch/1149058/) |
| Reviewed-by: Nick Desaulniers <ndesaulniers@google.com> |
| Reviewed-by: Kees Cook <keescook@chromium.org> |
| Signed-off-by: Sami Tolvanen <samitolvanen@google.com> |
| --- |
| arch/arm64/Makefile | 4 ++++ |
| 1 file changed, 4 insertions(+) |
| |
| diff --git a/arch/arm64/Makefile b/arch/arm64/Makefile |
| index 2c0238ce0551..ef76101201b2 100644 |
| --- a/arch/arm64/Makefile |
| +++ b/arch/arm64/Makefile |
| @@ -72,6 +72,10 @@ stack_protector_prepare: prepare0 |
| include/generated/asm-offsets.h)) |
| endif |
| |
| +ifeq ($(CONFIG_SHADOW_CALL_STACK), y) |
| +KBUILD_CFLAGS += -ffixed-x18 |
| +endif |
| + |
| ifeq ($(CONFIG_CPU_BIG_ENDIAN), y) |
| KBUILD_CPPFLAGS += -mbig-endian |
| CHECKFLAGS += -D__AARCH64EB__ |