From 53def68df5ec10c9aaa46d3422c58fc85d0c93e6 Mon Sep 17 00:00:00 2001 From: Heinrich Schuchardt Date: Sun, 6 Nov 2022 01:52:13 +0100 Subject: efi_loader: AllocateAddress requires page address 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 --- lib/efi_loader/efi_memory.c | 2 ++ 1 file changed, 2 insertions(+) (limited to 'lib') diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c index e048a54..a17b426 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) -- cgit v1.1