summaryrefslogtreecommitdiffstats
path: root/drivers/firmware/efi/riscv-runtime.c
diff options
context:
space:
mode:
authorArd Biesheuvel <ardb@kernel.org>2022-10-20 15:16:09 +0200
committerArd Biesheuvel <ardb@kernel.org>2022-10-21 11:09:41 +0200
commit37926f96302d8b6c2bc97990d33e316a3ed6d67f (patch)
tree0b60b29e2fa95de6d198043055027ef3044b2005 /drivers/firmware/efi/riscv-runtime.c
parentefi: libstub: Fix incorrect payload size in zboot header (diff)
downloadlinux-37926f96302d8b6c2bc97990d33e316a3ed6d67f.tar.xz
linux-37926f96302d8b6c2bc97990d33e316a3ed6d67f.zip
efi: runtime: Don't assume virtual mappings are missing if VA == PA == 0
The generic EFI stub can be instructed to avoid SetVirtualAddressMap(), and simply run with the firmware's 1:1 mapping. In this case, it populates the virtual address fields of the runtime regions in the memory map with the physical address of each region, so that the mapping code has to be none the wiser. Only if SetVirtualAddressMap() fails, the virtual addresses are wiped and the kernel code knows that the regions cannot be mapped. However, wiping amounts to setting it to zero, and if a runtime region happens to live at physical address 0, its valid 1:1 mapped virtual address could be mistaken for a wiped field, resulting on loss of access to the EFI services at runtime. So let's only assume that VA == 0 means 'no runtime services' if the region in question does not live at PA 0x0. Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
Diffstat (limited to '')
-rw-r--r--drivers/firmware/efi/riscv-runtime.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/firmware/efi/riscv-runtime.c b/drivers/firmware/efi/riscv-runtime.c
index d28e715d2bcc..d0daacd2c903 100644
--- a/drivers/firmware/efi/riscv-runtime.c
+++ b/drivers/firmware/efi/riscv-runtime.c
@@ -41,7 +41,7 @@ static bool __init efi_virtmap_init(void)
if (!(md->attribute & EFI_MEMORY_RUNTIME))
continue;
- if (md->virt_addr == 0)
+ if (md->virt_addr == U64_MAX)
return false;
ret = efi_create_mapping(&efi_mm, md);