linux_dsm_epyc7002/drivers/firmware/efi/libstub
Arvind Sankar 105cb9544b efi/x86: Move efi stub globals from .bss to .data
Commit

  3ee372ccce ("x86/boot/compressed/64: Remove .bss/.pgtable from bzImage")

removed the .bss section from the bzImage.

However, while a PE loader is required to zero-initialize the .bss
section before calling the PE entry point, the EFI handover protocol
does not currently document any requirement that .bss be initialized by
the bootloader prior to calling the handover entry.

When systemd-boot is used to boot a unified kernel image [1], the image
is constructed by embedding the bzImage as a .linux section in a PE
executable that contains a small stub loader from systemd together with
additional sections and potentially an initrd. As the .bss section
within the bzImage is no longer explicitly present as part of the file,
it is not initialized before calling the EFI handover entry.
Furthermore, as the size of the embedded .linux section is only the size
of the bzImage file itself, the .bss section's memory may not even have
been allocated.

In particular, this can result in efi_disable_pci_dma being true even
when it was not specified via the command line or configuration option,
which in turn causes crashes while booting on some systems.

To avoid issues, place all EFI stub global variables into the .data
section instead of .bss. As of this writing, only boolean flags for a
few command line arguments and the sys_table pointer were in .bss and
will now move into the .data section.

[1] https://systemd.io/BOOT_LOADER_SPECIFICATION/#type-2-efi-unified-kernel-images

Fixes: 3ee372ccce ("x86/boot/compressed/64: Remove .bss/.pgtable from bzImage")
Reported-by: Sergey Shatunov <me@prok.pw>
Signed-off-by: Arvind Sankar <nivedita@alum.mit.edu>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Link: https://lore.kernel.org/r/20200406180614.429454-1-nivedita@alum.mit.edu
Link: https://lore.kernel.org/r/20200409130434.6736-4-ardb@kernel.org
2020-04-14 08:32:13 +02:00
..
arm32-stub.c efi/libstub/arm: Make efi_entry() an ordinary PE/COFF entrypoint 2020-02-22 23:37:37 +01:00
arm64-stub.c arm64 fixes: 2020-04-09 11:04:16 -07:00
arm-stub.c efi/libstub/arm: Fix spurious message that an initrd was loaded 2020-03-29 12:08:18 +02:00
efi-stub-helper.c efi/libstub/x86: Make loaded_image protocol handling mixed mode safe 2020-02-23 21:59:42 +01:00
efistub.h efi/x86: Move efi stub globals from .bss to .data 2020-04-14 08:32:13 +02:00
fdt.c efi/libstub: Simplify efi_high_alloc() and rename to efi_allocate_pages() 2020-02-23 21:57:15 +01:00
file.c efi/libstub: Fix error message in handle_cmdline_files() 2020-02-23 21:57:31 +01:00
gop.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
hidden.h efi/libstub: Use hidden visibility for all source files 2020-02-23 21:57:12 +01:00
Makefile Merge branch 'x86-boot-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2020-03-31 10:28:35 -07:00
mem.c efi/libstub: Describe efi_relocate_kernel() 2020-02-23 21:57:15 +01:00
pci.c efi: Allow disabling PCI busmastering on bridges during boot 2020-01-10 18:55:04 +01:00
random.c efi/libstub: Describe RNG functions 2020-02-23 21:57:19 +01:00
randomalloc.c efi/libstub: Move efi_random_alloc() into separate source file 2020-02-23 21:57:15 +01:00
secureboot.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
skip_spaces.c efi/libstub: Clean up command line parsing routine 2020-02-23 21:57:15 +01:00
string.c efi/libstub: Clean up command line parsing routine 2020-02-23 21:57:15 +01:00
tpm.c efi/libstub: Rename efi_call_early/_runtime macros to be more intuitive 2019-12-25 10:49:25 +01:00
x86-stub.c efi/x86: Move efi stub globals from .bss to .data 2020-04-14 08:32:13 +02:00