linux/drivers/firmware/efi
Ard Biesheuvel 88ece45ab8 efi/libstub: Disable PCI DMA before grabbing the EFI memory map
[ Upstream commit 2e28a798c3 ]

Currently, the EFI stub will disable PCI DMA as the very last thing it
does before calling ExitBootServices(), to avoid interfering with the
firmware's normal operation as much as possible.

However, the stub will invoke DisconnectController() on all endpoints
downstream of the PCI bridges it disables, and this may affect the
layout of the EFI memory map, making it substantially more likely that
ExitBootServices() will fail the first time around, and that the EFI
memory map needs to be reloaded.

This, in turn, increases the likelihood that the slack space we
allocated is insufficient (and we can no longer allocate memory via boot
services after having called ExitBootServices() once), causing the
second call to GetMemoryMap (and therefore the boot) to fail. This makes
the PCI DMA disable feature a bit more fragile than it already is, so
let's make it more robust, by allocating the space for the EFI memory
map after disabling PCI DMA.

Fixes: 4444f8541d ("efi: Allow disabling PCI busmastering on bridges during boot")
Reported-by: Glenn Washburn <development@efficientek.com>
Acked-by: Matthew Garrett <mjg59@srcf.ucam.org>
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2023-07-19 16:36:24 +02:00
..
libstub efi/libstub: Disable PCI DMA before grabbing the EFI memory map 2023-07-19 16:36:24 +02:00
test efi/efi_test: read RuntimeServicesSupported 2020-12-09 08:37:27 +01:00
apple-properties.c efi: fix return value of __setup handlers 2022-03-01 09:02:21 +01:00
arm-runtime.c ARM updates for 6.2 2022-12-13 15:22:14 -08:00
capsule-loader.c efi: capsule-loader: Fix use-after-free in efi_capsule_write 2022-09-07 18:23:56 +02:00
capsule.c efi: capsule: clean scatter-gather entries from the D-cache 2020-12-09 08:37:27 +01:00
cper-arm.c efi/cper: Remove unnecessary aer.h include 2023-04-07 16:42:31 -05:00
cper-x86.c x86/mce, cper: Pass x86 CPER through the MCA handling chain 2020-11-21 12:05:41 +01:00
cper.c EFI updates for v6.2: 2022-12-13 14:31:47 -08:00
cper_cxl.c efi/cper, cxl: Remove cxl_err.h 2023-02-03 23:59:58 +01:00
cper_cxl.h efi/cper, cxl: Decode CXL Protocol Error Section 2022-11-18 09:14:10 +01:00
dev-path-parser.c efi/dev-path-parser: Refactor _UID handling to use acpi_dev_uid_to_integer() 2022-09-19 18:34:42 +02:00
earlycon.c efi: earlycon: Reprobe after parsing config tables 2023-03-13 23:28:43 +01:00
efi-bgrt.c efi/bgrt: Accept BGRT tables with a version of 0 2020-02-22 23:37:37 +01:00
efi-init.c efi: earlycon: Reprobe after parsing config tables 2023-03-13 23:28:43 +01:00
efi-pstore.c EFI updates for v6.2: 2022-12-13 14:31:47 -08:00
efi.c Revert "efi: random: refresh non-volatile random seed when RNG is initialized" 2023-06-21 10:58:46 -07:00
efibc.c efi: efibc: Guard against allocation failure 2022-09-20 18:42:55 +02:00
embedded-firmware.c crypto: sha - split sha.h into sha1.h and sha2.h 2020-11-20 14:45:33 +11:00
esrt.c efi: Actually enable the ESRT under Xen 2023-01-23 11:33:24 +01:00
fdtparams.c efi: xen: Set EFI_PARAVIRT for Xen dom0 boot on all architectures 2022-11-18 09:14:09 +01:00
Kconfig efi: libstub: Always enable initrd command line loader and bump version 2022-12-01 16:08:18 +01:00
Makefile efi/cper, cxl: Decode CXL Protocol Error Section 2022-11-18 09:14:10 +01:00
memattr.c A healthy mix of EFI contributions this time: 2023-02-23 14:41:48 -08:00
memmap.c efi: xen: Set EFI_PARAVIRT for Xen dom0 boot on all architectures 2022-11-18 09:14:09 +01:00
mokvar-table.c efi/mokvar: move up init order 2022-03-08 13:55:52 +02:00
rci2-table.c efi: Don't attempt to map RCI2 config table if it doesn't exist 2019-12-10 12:13:02 +01:00
reboot.c efi: Fix efi_power_off() not being run before acpi_power_off() when necessary 2022-07-10 17:41:06 +02:00
riscv-runtime.c efi: runtime: Don't assume virtual mappings are missing if VA == PA == 0 2022-10-21 11:09:41 +02:00
runtime-wrappers.c Change DEFINE_SEMAPHORE() to take a number argument 2023-04-18 11:15:24 -07:00
sysfb_efi.c efi: sysfb_efi: Add quirk for Lenovo Yoga Book X91F/L 2023-03-18 11:44:57 +01:00
tpm.c efi/tpm: Pass correct address to memblock_reserve 2022-10-24 08:04:25 +02:00
vars.c Change DEFINE_SEMAPHORE() to take a number argument 2023-04-18 11:15:24 -07:00