[PATCH] efi_loader: loosen buffer parameter check in efi_file_read_int

Heinrich Schuchardt xypron.glpk at gmx.de
Wed Apr 28 14:49:05 CEST 2021


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
> size before doing the actual read.
>
> Otherwise, we always met "Could not read \EFI\: Invalid Parameter"

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

>
> 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