From 813468cdbd7287f0b2e38f9702aa3eee37b1c5b5 Mon Sep 17 00:00:00 2001 From: Alexander Graf Date: Thu, 15 Mar 2018 15:08:16 +0100 Subject: [PATCH] efi_loader: Fix return value for efi_add_runtime_mmio The efi_add_runtime_mmio function incorrectly returned the added address as return value rather than EFI_SUCCESS. Fix it by checking the return value of efi_add_memory_map properly. Fixes: f057cfef5dc ("efi_loader: exit status for efi_reset_system_init") Signed-off-by: Alexander Graf --- lib/efi_loader/efi_runtime.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/efi_loader/efi_runtime.c b/lib/efi_loader/efi_runtime.c index 0888316140..8558124c0a 100644 --- a/lib/efi_loader/efi_runtime.c +++ b/lib/efi_loader/efi_runtime.c @@ -349,13 +349,13 @@ static efi_status_t EFIAPI efi_set_virtual_address_map( efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len) { struct efi_runtime_mmio_list *newmmio; - efi_status_t ret; - u64 pages = (len + EFI_PAGE_MASK) >> EFI_PAGE_SHIFT; - ret = efi_add_memory_map(*(uintptr_t *)mmio_ptr, pages, EFI_MMAP_IO, - false); - if (ret != EFI_SUCCESS) - return ret; + uint64_t addr = *(uintptr_t *)mmio_ptr; + uint64_t retaddr; + + retaddr = efi_add_memory_map(addr, pages, EFI_MMAP_IO, false); + if (retaddr != addr) + return EFI_OUT_OF_RESOURCES; newmmio = calloc(1, sizeof(*newmmio)); if (!newmmio) @@ -365,7 +365,7 @@ efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len) newmmio->len = len; list_add_tail(&newmmio->link, &efi_runtime_mmio); - return ret; + return EFI_SUCCESS; } /* -- 2.39.5