Commit 3ea86495 authored by Ard Biesheuvel's avatar Ard Biesheuvel Committed by Will Deacon

efi/arm: preserve early mapping of UEFI memory map longer for BGRT

The BGRT code validates the contents of the table against the UEFI
memory map, and so it expects it to be mapped when the code runs.

On ARM, this is currently not the case, since we tear down the early
mapping after efi_init() completes, and only create the permanent
mapping in arm_enable_runtime_services(), which executes as an early
initcall, but still leaves a window where the UEFI memory map is not
mapped.

So move the call to efi_memmap_unmap() from efi_init() to
arm_enable_runtime_services().
Signed-off-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
[will: fold in EFI_MEMMAP attribute check from Ard]
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 5bcd4408
...@@ -259,7 +259,6 @@ void __init efi_init(void) ...@@ -259,7 +259,6 @@ void __init efi_init(void)
reserve_regions(); reserve_regions();
efi_esrt_init(); efi_esrt_init();
efi_memmap_unmap();
memblock_reserve(params.mmap & PAGE_MASK, memblock_reserve(params.mmap & PAGE_MASK,
PAGE_ALIGN(params.mmap_size + PAGE_ALIGN(params.mmap_size +
......
...@@ -110,11 +110,13 @@ static int __init arm_enable_runtime_services(void) ...@@ -110,11 +110,13 @@ static int __init arm_enable_runtime_services(void)
{ {
u64 mapsize; u64 mapsize;
if (!efi_enabled(EFI_BOOT)) { if (!efi_enabled(EFI_BOOT) || !efi_enabled(EFI_MEMMAP)) {
pr_info("EFI services will not be available.\n"); pr_info("EFI services will not be available.\n");
return 0; return 0;
} }
efi_memmap_unmap();
if (efi_runtime_disabled()) { if (efi_runtime_disabled()) {
pr_info("EFI runtime services will be disabled.\n"); pr_info("EFI runtime services will be disabled.\n");
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment