Skip to content
This repository was archived by the owner on Nov 8, 2023. It is now read-only.

Commit 450548b

Browse files
ardbiesheuvelWill Deacon
authored and
Will Deacon
committed
UPSTREAM: arm64: scs: Disable LTO for SCS patching code
Full LTO takes the '-mbranch-protection=none' passed to the compiler when generating the dynamic shadow call stack patching code as a hint to stop emitting PAC instructions altogether. (Thin LTO appears unaffected by this) Work around this by disabling LTO for the compilation unit, which appears to convince the linker that it should still use PAC in the rest of the kernel.. Fixes: 3b619e2 ("arm64: implement dynamic shadow call stack for Clang") Signed-off-by: Ard Biesheuvel <[email protected]> Reviewed-by: Kees Cook <[email protected]> Reviewed-by: Sami Tolvanen <[email protected]> Tested-by: Sami Tolvanen <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Will Deacon <[email protected]> (cherry picked from commit d104a6f) Bug: 317883735 Change-Id: Ic4bdb0a6e527f8cb2745282b81945aa7b7231502 Signed-off-by: Sami Tolvanen <[email protected]> (cherry picked from commit a1ef8cc)
1 parent 939f138 commit 450548b

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

arch/arm64/kernel/Makefile

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,13 @@ obj-$(CONFIG_ARM64_MTE) += mte.o
7373
obj-y += vdso-wrap.o
7474
obj-$(CONFIG_COMPAT_VDSO) += vdso32-wrap.o
7575
obj-$(CONFIG_UNWIND_PATCH_PAC_INTO_SCS) += patch-scs.o
76+
77+
# We need to prevent the SCS patching code from patching itself. Using
78+
# -mbranch-protection=none here to avoid the patchable PAC opcodes from being
79+
# generated triggers an issue with full LTO on Clang, which stops emitting PAC
80+
# instructions altogether. So disable LTO as well for the compilation unit.
7681
CFLAGS_patch-scs.o += -mbranch-protection=none
82+
CFLAGS_REMOVE_patch-scs.o += $(CC_FLAGS_LTO)
7783

7884
# Force dependency (vdso*-wrap.S includes vdso.so through incbin)
7985
$(obj)/vdso-wrap.o: $(obj)/vdso/vdso.so

0 commit comments

Comments
 (0)