efi_loader: Fix return value for efi_add_runtime_mmio
authorAlexander Graf <agraf@suse.de>
Thu, 15 Mar 2018 14:08:16 +0000 (15:08 +0100)
committerAlexander Graf <agraf@suse.de>
Wed, 4 Apr 2018 09:09:06 +0000 (11:09 +0200)
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 <agraf@suse.de>
lib/efi_loader/efi_runtime.c

index 0888316140721af756c8225008554f09ea6a9590..8558124c0a12d8dcb4d80c27d824747ab88b8e7e 100644 (file)
@@ -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;
 }
 
 /*