[PATCH v2 1/4] EFI: Populate descriptor_count value only when image_info_size is not zero

Peter Griffin peter.griffin at linaro.org
Fri Jun 10 21:07:40 CEST 2022


Hi Sughosh,

On Wed, 1 Jun 2022 at 19:01, Sughosh Ganu <sughosh.ganu at linaro.org> wrote:

> The GetImageInfo function of the Firmware Mangement Protocol(FMP) gets
> called initially to query the size of the image descriptor array that
> would have to be allocated. During this call, the rest of the function
> arguments, specifically pointers might be passed as NULL. Do not
> populate the descriptor_count value before it is known that the call
> to GetImageInfo has been made with the allocated buffer for the image
> descriptors.
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Reviewed-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
> ---
>

This patch solves the hang issue I observed on master with
CapsuleApp.efi when doing

FS5:EFI/BOOT/app/CapsuleApp.efi -P

Which is part of the SystemReady IR ACS compliance suite.
Tested on a RockPi4b board.

Tested-by: Peter Griffin <peter.griffin at linaro.org>

Peter


> Changes since V1: None
>
>  lib/efi_loader/efi_firmware.c | 5 ++---
>  1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/lib/efi_loader/efi_firmware.c b/lib/efi_loader/efi_firmware.c
> index fe4e084106..9cdefab41f 100644
> --- a/lib/efi_loader/efi_firmware.c
> +++ b/lib/efi_loader/efi_firmware.c
> @@ -130,9 +130,6 @@ static efi_status_t efi_fill_image_desc_array(
>         struct efi_fw_image *fw_array;
>         int i;
>
> -       fw_array = update_info.images;
> -       *descriptor_count = num_image_type_guids;
> -
>         total_size = sizeof(*image_info) * num_image_type_guids;
>
>         if (*image_info_size < total_size) {
> @@ -142,6 +139,8 @@ static efi_status_t efi_fill_image_desc_array(
>         }
>         *image_info_size = total_size;
>
> +       fw_array = update_info.images;
> +       *descriptor_count = num_image_type_guids;
>         *descriptor_version = EFI_FIRMWARE_IMAGE_DESCRIPTOR_VERSION;
>         *descriptor_size = sizeof(*image_info);
>         *package_version = 0xffffffff; /* not supported */
> --
> 2.25.1
>
>


More information about the U-Boot mailing list