[PATCH] efi_loader: fix AllocatePages overlap status
Heinrich Schuchardt
xypron.glpk at gmx.de
Mon Apr 27 19:04:49 CEST 2026
Am 27. April 2026 17:48:21 MESZ schrieb Ilias Apalodimas <ilias.apalodimas at linaro.org>:
>Hi Harsiman,
>
>On Mon, 27 Apr 2026 at 18:05, Harsimran Singh Tungal
><harsimransingh.tungal at arm.com> wrote:
>>
>> Return EFI_NOT_FOUND for EFI_ALLOCATE_ADDRESS overlap
>>
>> When efi_allocate_pages() is called with EFI_ALLOCATE_ADDRESS, UEFI
>> expects EFI_NOT_FOUND if the requested address range is already
>> allocated or unavailable.
>> U-Boot currently returns
>> EFI_OUT_OF_RESOURCES when efi_update_memory_map() detects an overlap
>> after a successful lmb_alloc_mem(), which does not match
>> EFI_ALLOCATE_ADDRESS semantics.
>>
>> Return EFI_NOT_FOUND for EFI_ALLOCATE_ADDRESS requests that fail due
>> to an overlapping EFI memory descriptor, while keeping
>> EFI_OUT_OF_RESOURCES for other allocation types.
>>
>> The UEFI specification [1] specifies that
>> EFI_BOOT_SERVICES.AllocatePages must return EFI_NOT_FOUND when the
>> requested address range is unavailable or already allocated;
>> EFI_OUT_OF_RESOURCES applies to non‑address‑specific allocation
>> failures.
>
>Where does the EFI spec say that? EDKII indeed returns EFI_NOT_FOUND
>for AllocateAddress but looking at the function description, I can't
>find anything specific.
>
>Thanks
>/Ilias
Thank you Harsimran for investigating this difference to EDJ II.
The spec has:
EFI_NOT_FOUND
The requested pages could not be found.
and
EFI_OUT_OF_RESOURCEST
The pages could not be allocated.
Looking at the text one could assume that EFI_NOT_FOUND should be returned if the pages requested with AllocateAddress don't exist in the memory map.
If the pages exist and are already allocated EFI_NOT_FOUND does not look like the right return code according to the spec.
It is unclear if for AllocateMaxAddress a comparison to the memory bottom is required.
The specification should be clarified in the UEFI forum.
Best regards
Heinrich
>
>>
>> [1] https://uefi.org/specs/UEFI/2.10_A/07_Services_Boot_Services.html
>>
>> Signed-off-by: Harsimran Singh Tungal <harsimransingh.tungal at arm.com>
>> ---
>> lib/efi_loader/efi_memory.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
>> index b77c2f980cc..63cf1a7277f 100644
>> --- a/lib/efi_loader/efi_memory.c
>> +++ b/lib/efi_loader/efi_memory.c
>> @@ -510,7 +510,9 @@ efi_status_t efi_allocate_pages(enum efi_allocate_type type,
>> /* Map would overlap, bail out */
>> lmb_free(addr, (u64)pages << EFI_PAGE_SHIFT, flags);
>> unmap_sysmem((void *)(uintptr_t)efi_addr);
>> - return EFI_OUT_OF_RESOURCES;
>> + if (type == EFI_ALLOCATE_ADDRESS)
>> + return EFI_NOT_FOUND;
>> + return EFI_OUT_OF_RESOURCES;
>> }
>>
>> *memory = efi_addr;
>> --
>> 2.34.1
>>
More information about the U-Boot
mailing list