Skip to contentSkip to conversation

efi_loader: Fix return value for efi_add_runtime_mmio

PATCH Applied Alexander Graf 1 participant 2 messages Mar 15, 2018 – Apr 4, 2018

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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")
---
 lib/efi_loader/efi_runtime.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)
lib/efi_loader/efi_runtime.c +7 -7
index 0888316140..8558124c0a 100644
@@ -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;
 }
 
 /*
Signature · 1 line
2.12.3
author Applied
#1 lore raw
Quoted 6 lines

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")

Thanks, applied to efi-next

Alex