[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