linux/drivers/firmware
Ard Biesheuvel 83eb64e6ac x86/efistub: Avoid placing the kernel below LOAD_PHYSICAL_ADDR
[ Upstream commit 2f77465b05 ]

The EFI stub's kernel placement logic randomizes the physical placement
of the kernel by taking all available memory into account, and picking a
region at random, based on a random seed.

When KASLR is disabled, this seed is set to 0x0, and this results in the
lowest available region of memory to be selected for loading the kernel,
even if this is below LOAD_PHYSICAL_ADDR. Some of this memory is
typically reserved for the GFP_DMA region, to accommodate masters that
can only access the first 16 MiB of system memory.

Even if such devices are rare these days, we may still end up with a
warning in the kernel log, as reported by Tom:

 swapper/0: page allocation failure: order:10, mode:0xcc1(GFP_KERNEL|GFP_DMA), nodemask=(null),cpuset=/,mems_allowed=0

Fix this by tweaking the random allocation logic to accept a low bound
on the placement, and set it to LOAD_PHYSICAL_ADDR.

Fixes: a1b87d54f4 ("x86/efistub: Avoid legacy decompressor when doing EFI boot")
Reported-by: Tom Englund <tomenglund26@gmail.com>
Closes: https://bugzilla.kernel.org/show_bug.cgi?id=218404
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
History 2024-02-16 19:14:19 +01:00
..
arm_ffa firmware: arm_ffa: Check xa_load() return value 2024-01-31 16:21:19 -08:00
arm_scmi firmware: arm_scmi: Fix the clock protocol version for v3.2 2024-01-31 16:21:19 -08:00
broadcom MIPS: BCM47XX: remove MODULE_LICENSE in non-modules 2023-04-13 13:13:51 -07:00
cirrus firmware: cirrus: cs_dsp: Only log list of algorithms in debug build 2023-09-13 18:50:32 +01:00
efi x86/efistub: Avoid placing the kernel below LOAD_PHYSICAL_ADDR 2024-02-16 19:14:19 +01:00
google firmware: coreboot: framebuffer: Allow building with simpledrm 2023-08-04 16:31:32 +02:00
imx - Move Kconfig files into the pmdomain subsystem 2023-11-01 13:09:46 -10:00
meson firmware: meson: Use device_get_match_data() 2023-10-09 10:48:15 +02:00
psci firmware/psci: demote suspend-mode warning to info level 2023-04-14 13:48:56 +02:00
qcom firmware: qcom: qseecom: fix memory leaks in error paths 2024-01-25 15:44:53 -08:00
smccc firmware: smccc: Fix use of uninitialised results structure 2023-07-18 10:08:05 +01:00
tegra SoC driver updates for 6.7 2023-11-01 14:46:51 -10:00
xilinx firmware: xilinx: Move EXPORT_SYMBOL_GPL next to zynqmp_pm_feature definition 2023-10-27 13:16:31 +02:00
arm_scpi.c firmware: arm_scpi: Use device_get_match_data() 2023-10-08 21:16:30 +01:00
arm_sdei.c arm64: sdei: abort running SDEI handlers during crash 2023-08-04 17:35:33 +01:00
dmi-id.c driver core: make struct class.dev_uevent() take a const * 2022-11-24 17:12:15 +01:00
dmi-sysfs.c firmware: dmi-sysfs: handle HAS_IOPORT=n 2023-05-31 19:17:29 +01:00
dmi_scan.c firmware: dmi: Fortify entry point length checks 2022-09-23 14:53:14 +02:00
edd.c edd: make kobj_type structure constant 2023-03-09 18:07:33 +01:00
iscsi_ibft.c iscsi_ibft: Fix isa_bus_to_virt not working under ARM 2021-09-02 16:22:00 -04:00
iscsi_ibft_find.c iscsi_ibft: Fix finding the iBFT under Xen Dom 0 2023-06-26 07:47:11 +02:00
Kconfig vhost,virtio,vdpa,firmware: bugfixes 2023-11-16 07:39:37 -05:00
Makefile asm-generic updates for v6.7 2023-11-01 15:28:33 -10:00
memmap.c firmware: memmap: use default_groups in kobj_type 2022-01-05 19:17:29 +01:00
mtk-adsp-ipc.c firmware: Explicitly include correct DT includes 2023-08-12 10:31:01 +02:00
qemu_fw_cfg.c riscv, qemu_fw_cfg: Add support for RISC-V architecture 2023-11-01 09:31:16 -04:00
raspberrypi.c firmware: raspberrypi: Fix devm_rpi_firmware_get documentation 2023-10-09 11:51:00 -07:00
scpi_pm_domain.c firmware: Explicitly include correct DT includes 2023-08-12 10:31:01 +02:00
stratix10-rsu.c Char/Misc driver changes for 6.6-rc1 2023-09-01 09:53:54 -07:00
stratix10-svc.c firmware: stratix10-svc: Generic Mailbox Command 2023-08-04 16:31:37 +02:00
sysfb.c Revert "drivers/firmware: Move sysfb_init() from device_initcall to subsys_initcall_sync" 2024-01-31 16:21:12 -08:00
sysfb_simplefb.c firmware/sysfb: Fix VESA format selection 2023-04-21 14:27:31 +02:00
ti_sci.c firmware: ti_sci: Fix an off-by-one in ti_sci_debugfs_create() 2024-01-25 15:44:45 -08:00
ti_sci.h firmware: ti_sci: rm: Add new ops for ring configuration 2020-11-01 19:38:02 -08:00
trusted_foundations.c firmware: tf: Different way of L2 cache enabling after LP2 suspend 2020-05-06 18:27:26 +02:00
turris-mox-rwtm.c firmware: turris-mox-rwtm: make kobj_type structure constant 2023-04-07 17:17:00 +02:00