[PATCH 2/4] efi_loader: check alignment in efi_add_memory_map()

Michael Walle michael at walle.cc
Thu May 14 20:50:50 CEST 2020


Am 2020-05-14 20:35, schrieb Heinrich Schuchardt:
> On 5/14/20 2:38 PM, Michael Walle wrote:
>> The first argument has to be aligned with EFI_PAGE_SIZE. This 
>> alignment
>> is already checked for external callers but it is not checked for
>> internal callers. Unfortunately, most of the time the return value is
>> not checked, so scream loud and clear.
> 
> Why do you mention the return value here?

most callers just ignore the return value. so if not aligned this will
silently fail.

>> 
>> Signed-off-by: Michael Walle <michael at walle.cc>
>> ---
>>  lib/efi_loader/efi_memory.c | 3 +++
>>  1 file changed, 3 insertions(+)
>> 
>> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
>> index fd79178da9..b56e19cb30 100644
>> --- a/lib/efi_loader/efi_memory.c
>> +++ b/lib/efi_loader/efi_memory.c
>> @@ -248,6 +248,9 @@ efi_status_t efi_add_memory_map(uint64_t start, 
>> uint64_t pages, int memory_type,
>>  	EFI_PRINT("%s: 0x%llx 0x%llx %d %s\n", __func__,
>>  		  start, pages, memory_type, overlap_only_ram ? "yes" : "no");
>> 
>> +	if (start & EFI_PAGE_MASK)
>> +		panic("%s: start not aligned\n", __func__);
>> +
> 
> Did you find any internal caller that has a problem?
See next patch.

> We do not want to increase code size.
Mh, even within the efi_loader? Well I could do a

if (start & EFI_PAGE_MASK) {
     debug("%s: start not aligned\n", __func__);
     return EFI_INVALID_PARAMETER;
}

but as I said, nobody checks the return value.


-- 
-michael


More information about the U-Boot mailing list