From: Michael Brown Date: Thu, 28 Aug 2025 14:35:00 +0000 (+0100) Subject: [efi] Use current boot option as a fallback for obtaining the boot URI X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=969ce2c559a6841a949a1b73a3967b1889e0c999;p=thirdparty%2Fipxe.git [efi] Use current boot option as a fallback for obtaining the boot URI Some systems (observed with a Lenovo X1) fail to populate the loaded image device path with a Uri() component when performing a UEFI HTTP boot, instead creating a broken loaded image device path that represents a DHCP+TFTP boot that has not actually taken place. If no URI is found within the loaded image device path, then fall back to looking for a URI within the current boot option. Signed-off-by: Michael Brown --- diff --git a/src/interface/efi/efiprefix.c b/src/interface/efi/efiprefix.c index ddce6aa60..64122185a 100644 --- a/src/interface/efi/efiprefix.c +++ b/src/interface/efi/efiprefix.c @@ -81,13 +81,22 @@ EFI_STATUS EFIAPI _efi_start ( EFI_HANDLE image_handle, static void efi_init_application ( void ) { EFI_HANDLE device = efi_loaded_image->DeviceHandle; EFI_DEVICE_PATH_PROTOCOL *devpath = efi_loaded_image_path; + EFI_DEVICE_PATH_PROTOCOL *bootpath; struct uri *uri; /* Set current working URI from device path, if present */ + bootpath = efi_current_boot_path(); + DBGC ( device, "EFI has loaded image device path %s\n", + efi_devpath_text ( devpath ) ); + DBGC ( device, "EFI has boot option device path %s\n", + efi_devpath_text ( bootpath ) ); uri = efi_path_uri ( devpath ); + if ( bootpath && ( ! uri ) ) + uri = efi_path_uri ( bootpath ); if ( uri ) churi ( uri ); uri_put ( uri ); + free ( bootpath ); /* Identify autoboot device, if any */ efi_set_autoboot_ll_addr ( device, devpath );