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 <agraf@suse.de>
master
Alexander Graf 7 years ago
parent 8e47506409
commit 813468cdbd
  1. 14
      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;
}
/*

Loading…
Cancel
Save