linux/drivers/firmware/efi
Ard Biesheuvel da38b55cd5 efi/x86: Free EFI memory map only when installing a new one.
[ Commit 75dde792d6 upstream ]

The logic in __efi_memmap_init() is shared between two different
execution flows:
- mapping the EFI memory map early or late into the kernel VA space, so
  that its entries can be accessed;
- the x86 specific cloning of the EFI memory map in order to insert new
  entries that are created as a result of making a memory reservation
  via a call to efi_mem_reserve().

In the former case, the underlying memory containing the kernel's view
of the EFI memory map (which may be heavily modified by the kernel
itself on x86) is not modified at all, and the only thing that changes
is the virtual mapping of this memory, which is different between early
and late boot.

In the latter case, an entirely new allocation is created that carries a
new, updated version of the kernel's view of the EFI memory map. When
installing this new version, the old version will no longer be
referenced, and if the memory was allocated by the kernel, it will leak
unless it gets freed.

The logic that implements this freeing currently lives on the code path
that is shared between these two use cases, but it should only apply to
the latter. So move it to the correct spot.

While at it, drop the dummy definition for non-x86 architectures, as
that is no longer needed.

Cc: <stable@vger.kernel.org>
Fixes: f0ef652347 ("efi: Fix efi_memmap_alloc() leaks")
Tested-by: Ashish Kalra <Ashish.Kalra@amd.com>
Link: https://lore.kernel.org/all/36ad5079-4326-45ed-85f6-928ff76483d3@amd.com
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-07-05 09:14:51 +02:00
..
libstub x86/efistub: Fix PCI ROM preservation in mixed mode 2023-09-19 12:22:31 +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-23 09:16:41 +01:00
arm-runtime.c efi: runtime: Fix potential overflow of soft-reserved region size 2024-03-01 13:21:47 +01:00
capsule-loader.c efi/capsule-loader: fix incorrect allocation size 2024-03-06 14:38:48 +00: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: Replace GPL license boilerplate with SPDX headers 2019-02-04 08:27:25 +01: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/cper: use stack buffer for error record decoding 2021-10-05 13:05:59 +02:00
dev-path-parser.c ACPI: utils: Fix reference counting in for_each_acpi_dev_match() 2021-07-19 16:22:01 +02:00
earlycon.c efi/earlycon: Fix early printk for wider fonts 2020-05-12 12:29:45 +02: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: Don't add memblocks for soft-reserved memory 2024-03-01 13:21:47 +01:00
efi-pstore.c pstore: Don't use semaphores in always-atomic-context code 2022-04-08 14:23:01 +02:00
efi.c efi: fix potential NULL deref in efi_mem_reserve_persistent 2023-02-09 11:26:38 +01:00
efibc.c efi: efibc: check for efivars write capability 2020-09-15 18:22:47 +03:00
efivars.c efi: efivars: limit availability to X86 builds 2020-09-29 19:40:57 +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/esrt: Fix reference count leak in esre_create_sysfs_entry. 2020-06-15 14:38:56 +02:00
fake_mem.c efi: Fix handling of multiple efi_fake_mem= entries 2020-01-20 08:14:29 +01:00
fake_mem.h x86/efi: Add efi_fake_mem support for EFI_MEMORY_SP 2019-11-07 15:44:23 +01:00
fdtparams.c efi: xen: Set EFI_PARAVIRT for Xen dom0 boot on all architectures 2024-07-05 09:14:51 +02:00
Kconfig EFI updates collected by Ard Biesheuvel: 2020-12-24 12:40:07 -08:00
Makefile drivers/firmware: move x86 Generic System Framebuffers support 2021-07-21 12:04:56 +02:00
memattr.c efi: Accept version 2 of memory attributes table 2023-02-09 11:26:41 +01:00
memmap.c efi/x86: Free EFI memory map only when installing a new one. 2024-07-05 09:14:51 +02:00
mokvar-table.c efi/mokvar: Reserve the table only if it is in boot services data 2021-07-20 09:28:09 +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: Use EFI ResetSystem only when available 2020-02-23 21:59:42 +01:00
riscv-runtime.c efi: runtime: Fix potential overflow of soft-reserved region size 2024-03-01 13:21:47 +01:00
runtime-map.c efi: Replace GPL license boilerplate with SPDX headers 2019-02-04 08:27:25 +01:00
runtime-wrappers.c efi: fix userspace infinite retry read efivars after EFI runtime services page fault 2023-01-24 07:22:42 +01:00
sysfb_efi.c efi: sysfb_efi: Add quirk for Lenovo Yoga Book X91F/L 2023-04-20 12:13:54 +02:00
tpm.c efi/tpm: Pass correct address to memblock_reserve 2022-11-10 18:15:35 +01:00
vars.c efivarfs: Request at most 512 bytes for variable names 2024-04-10 16:19:30 +02:00
x86_fake_mem.c efi/fake_mem: arrange for a resource entry per efi_fake_mem instance 2020-10-13 18:38:27 -07:00