[PATCH] efi_loader: loosen buffer parameter check in efi_file_read_int

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Apr 28 15:02:56 CEST 2021


On 28.04.21 14:49, Heinrich Schuchardt wrote:
> On 28.04.21 10:15, Peng Fan (OSS) wrote:
>> From: Peng Fan <peng.fan at nxp.com>
>>
>> This is same issue as https://bugzilla.redhat.com/show_bug.cgi?id=1733817,
>> but that fix was wrongly partial reverted.
>>
>> To Fedora shim loader, when buffer is NULL, a use-case is to call
>> efi_file_read with *buffer_size=0 and buffer=NULL to obtain the needed

An EFI binary cannot directly call efi_file_read(). It calls
EFI_FILE_PROTOCOL.Read().

>> size before doing the actual read.
>>
>> Otherwise, we always met "Could not read \EFI\: Invalid Parameter"

Please, describe the problem in UEFI terms.

>
> The EFI specification does not require this behavior. EDK II does not
> implement it either. See for instance SemihostFileRead(),
> FvSimpleFileSystemRead().
>
> To determine the file size you have to use GetInfo(). Please, fix the
> client code.
>
> Best regards
>
> Heinrich

Please, make it clear in the commit message, please, that this patch is
about reading a *directory entry* and not about reading a file.

Best regards

Heinrich

>
>>
>> Fixes: db12f518edb0("efi_loader: implement non-blocking file services")
>> Signed-off-by: Peng Fan <peng.fan at nxp.com>
>> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
>> Cc: Stefan Sørensen <stefan.sorensen at spectralink.com>
>> ---
>>  lib/efi_loader/efi_file.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
>> index 204105e25a..6b3f5962be 100644
>> --- a/lib/efi_loader/efi_file.c
>> +++ b/lib/efi_loader/efi_file.c
>> @@ -554,7 +554,7 @@ static efi_status_t efi_file_read_int(struct efi_file_handle *this,
>>  	efi_status_t ret = EFI_SUCCESS;
>>  	u64 bs;
>>
>> -	if (!this || !buffer_size || !buffer)
>> +	if (!this || !buffer_size)
>>  		return EFI_INVALID_PARAMETER;
>>
>>  	bs = *buffer_size;
>>
>



More information about the U-Boot mailing list