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 <christ...@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.g...@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");
}