]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[efi] Provide dummy device path in efi_image_probe()
authorMichael Brown <mcb30@ipxe.org>
Fri, 19 Sep 2014 12:16:31 +0000 (13:16 +0100)
committerMichael Brown <mcb30@ipxe.org>
Fri, 19 Sep 2014 12:22:04 +0000 (13:22 +0100)
Some UEFI platforms will fail the call to LoadImage() with
EFI_INVALID_PARAMETER if we do not provide a device path (even though
we are providing a non-NULL SourceBuffer).

Fix by providing an empty device path for the call to LoadImage() in
efi_image_probe().

The call to LoadImage() in efi_image_exec() already constructs and
provides a device path (based on the most recently opened SNP device),
and so does not require this fix.

Reported-by: NICOLAS CATTIE <nicolas.cattie@mpsa.com>
Tested-by: NICOLAS CATTIE <nicolas.cattie@mpsa.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/image/efi_image.c

index 83da9d9bfb9962b4e9a9bcf767c542087728d41c..b7d8f9c6e649d22208edb6135170eb735d6070bd 100644 (file)
@@ -280,12 +280,17 @@ static int efi_image_exec ( struct image *image ) {
  */
 static int efi_image_probe ( struct image *image ) {
        EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
+       static EFI_DEVICE_PATH_PROTOCOL empty_path = {
+               .Type = END_DEVICE_PATH_TYPE,
+               .SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE,
+               .Length[0] = sizeof ( empty_path ),
+       };
        EFI_HANDLE handle;
        EFI_STATUS efirc;
        int rc;
 
        /* Attempt loading image */
-       if ( ( efirc = bs->LoadImage ( FALSE, efi_image_handle, NULL,
+       if ( ( efirc = bs->LoadImage ( FALSE, efi_image_handle, &empty_path,
                                       user_to_virt ( image->data, 0 ),
                                       image->len, &handle ) ) != 0 ) {
                /* Not an EFI image */