[PATCH] efi: Fix efiboot for payloads loaded from memory

Heinrich Schuchardt xypron.glpk at gmx.de
Fri Apr 11 08:31:27 CEST 2025


On 3/23/25 20:03, Christian Kohlschütter wrote:
> Calling bootefi on an address that was loaded from memory (e.g., cramfs
> or SPI flash via "sf read", etc.), currently results in the EFI binary
> not being able to access the EFI image device path.
>
> For example, iPXE would fail with an error "EFI could not get loaded
> image's device path: Error 0x7f39e082 (https://ipxe.org/7f39e082)".
>
> This is due to an incomplete special-case in efi_binary_run, where a new
> device path was created but not used in all required places.
>
> Fix the in-memory special case, set the "bootefi_device_path" to the
> generated "file_path".
>
> iPXE will now boot, and report the device path as
> "/MemoryMapped(0x0,0xSTART,0xLEN)"
>
> Signed-off-by: Christian Kohlschütter <christian at kohlschutter.com>

Hello Christian,

Thank you for the patch.

For future submission, please, use scripts/get_maintainer.pl to identify
mail recipients.

Best regards

Reviewed-by: Heinrich Schuchardt <xypron.glpk at gmx.de>


> ---
>   lib/efi_loader/efi_bootbin.c | 3 +++
>   1 file changed, 3 insertions(+)
>
> diff --git a/lib/efi_loader/efi_bootbin.c b/lib/efi_loader/efi_bootbin.c
> index 10ec5e9ada3..f78cf972228 100644
> --- a/lib/efi_loader/efi_bootbin.c
> +++ b/lib/efi_loader/efi_bootbin.c
> @@ -268,6 +268,9 @@ efi_status_t efi_binary_run(void *image, size_t size, void *fdt)
>   							       file_path, NULL);
>   		if (ret != EFI_SUCCESS)
>   			goto out;
> +
> +		bootefi_device_path = file_path;
> +		bootefi_image_path = NULL;
>   	} else {
>   		log_debug("Loaded from disk\n");
>   	}



More information about the U-Boot mailing list