x86/boot: efistub: Assign global boot_params variable
authorArd Biesheuvel <ardb@kernel.org>
Mon, 16 Oct 2023 15:24:31 +0000 (17:24 +0200)
committerArd Biesheuvel <ardb@kernel.org>
Tue, 17 Oct 2023 06:33:13 +0000 (08:33 +0200)
Now that the x86 EFI stub calls into some APIs exposed by the
decompressor (e.g., kaslr_get_random_long()), it is necessary to ensure
that the global boot_params variable is set correctly before doing so.

Note that the decompressor and the kernel proper carry conflicting
declarations for the global variable 'boot_params' so refer to it via an
alias to work around this.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
drivers/firmware/efi/libstub/x86-stub.c
drivers/firmware/efi/libstub/x86-stub.h

index 3b8bccd..9d5df68 100644 (file)
@@ -849,6 +849,8 @@ void __noreturn efi_stub_entry(efi_handle_t handle,
        unsigned long kernel_entry;
        efi_status_t status;
 
+       boot_params_pointer = boot_params;
+
        efi_system_table = sys_table_arg;
        /* Check if we were booted by the EFI firmware */
        if (efi_system_table->hdr.signature != EFI_SYSTEM_TABLE_SIGNATURE)
index 37c5a36..2748bca 100644 (file)
@@ -2,6 +2,8 @@
 
 #include <linux/efi.h>
 
+extern struct boot_params *boot_params_pointer asm("boot_params");
+
 extern void trampoline_32bit_src(void *, bool);
 extern const u16 trampoline_ljmp_imm_offset;