diff mbox series

[1/1] efi_loader: AllocateAddress requires page address

Message ID 20221106011601.23712-1-heinrich.schuchardt@canonical.com
State Accepted, archived
Delegated to: Heinrich Schuchardt
Headers show
Series [1/1] efi_loader: AllocateAddress requires page address | expand

Commit Message

Heinrich Schuchardt Nov. 6, 2022, 1:16 a.m. UTC
AllocatePages() can be called with Type=AllocateAddress. Such a call can
only succeed if *Memory points to the address of an unallocated page range.

A call with *Memory being an address that is not page aligned must not
succeed. The UEFI specification requires returning EFI_OUT_OF_RESOURCES
if the requested pages cannot be allocated.

Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
---
 lib/efi_loader/efi_memory.c | 2 ++
 1 file changed, 2 insertions(+)
diff mbox series

Patch

diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
index e048a545e4..a17b426d11 100644
--- a/lib/efi_loader/efi_memory.c
+++ b/lib/efi_loader/efi_memory.c
@@ -483,6 +483,8 @@  efi_status_t efi_allocate_pages(enum efi_allocate_type type,
 			return EFI_OUT_OF_RESOURCES;
 		break;
 	case EFI_ALLOCATE_ADDRESS:
+		if (*memory & EFI_PAGE_MASK)
+			return EFI_NOT_FOUND;
 		/* Exact address, reserve it. The addr is already in *memory. */
 		ret = efi_check_allocated(*memory, false);
 		if (ret != EFI_SUCCESS)