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

Commit 2fa28ab

Browse files
ardbiesheuvelwilldeacon
authored andcommitted
arm64: Revert "scs: Work around full LTO issue with dynamic SCS"
This reverts commit 8c5a19c ("arm64: scs: Work around full LTO issue with dynamic SCS"), which did not quite fix the issue as intended. Apparently, -fno-unwind-tables is ignored for the final full LTO link when it is set on any of the objects, resulting in an early boot crash due to the SCS patching code patching itself, and attempting to pop the return address from the shadow stack while the associated push was still a PACIASP instruction when it executed. Reported-by: Sami Tolvanen <[email protected]> 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]>
1 parent 41bccc9 commit 2fa28ab

File tree

1 file changed

+1
-7
lines changed

1 file changed

+1
-7
lines changed

arch/arm64/kernel/Makefile

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,7 @@ 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 instead, omit the unwind tables used by the
81-
# patching code, so it will not be able to locate its own PAC instructions.
82-
CFLAGS_patch-scs.o += -fno-asynchronous-unwind-tables -fno-unwind-tables
76+
CFLAGS_patch-scs.o += -mbranch-protection=none
8377

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

0 commit comments

Comments
 (0)