]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/boot: Check startup code for absence of absolute relocations
authorArd Biesheuvel <ardb@kernel.org>
Thu, 28 Aug 2025 10:22:19 +0000 (12:22 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Wed, 3 Sep 2025 15:59:54 +0000 (17:59 +0200)
Invoke objtool on each startup code object individually to check for the
absence of absolute relocations. This is needed because this code will
be invoked from the 1:1 mapping of memory before those absolute virtual
addresses (which are derived from the kernel virtual base address
provided to the linker and possibly shifted at boot) are mapped.

Only objects built under arch/x86/boot/startup/ have this restriction,
and once they have been incorporated into vmlinux.o, this distinction is
difficult to make. So force the invocation of objtool for each object
file individually, even if objtool is deferred to vmlinux.o for the rest
of the build. In the latter case, only pass --noabs and nothing else;
otherwise, append it to the existing objtool command line.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/20250828102202.1849035-40-ardb+git@google.com
arch/x86/boot/startup/Makefile

index b514f7e81332aaf1032220ff15b68e4045835648..32737f4ab5a8075f89f5e4f976092733f79c129c 100644 (file)
@@ -19,6 +19,7 @@ KCOV_INSTRUMENT       := n
 
 obj-$(CONFIG_X86_64)           += gdt_idt.o map_kernel.o
 obj-$(CONFIG_AMD_MEM_ENCRYPT)  += sme.o sev-startup.o
+pi-objs                                := $(patsubst %.o,$(obj)/%.o,$(obj-y))
 
 lib-$(CONFIG_X86_64)           += la57toggle.o
 lib-$(CONFIG_EFI_MIXED)                += efi-mixed.o
@@ -28,3 +29,10 @@ lib-$(CONFIG_EFI_MIXED)              += efi-mixed.o
 # to be linked into the decompressor or the EFI stub but not vmlinux
 #
 $(patsubst %.o,$(obj)/%.o,$(lib-y)): OBJECT_FILES_NON_STANDARD := y
+
+#
+# Invoke objtool for each object individually to check for absolute
+# relocations, even if other objtool actions are being deferred.
+#
+$(pi-objs): objtool-enabled    = 1
+$(pi-objs): objtool-args       = $(if $(delay-objtool),,$(objtool-args-y)) --noabs