瀏覽代碼

[efi] Provide dummy device path in efi_image_probe()

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>
tags/v1.20.1
Michael Brown 10 年之前
父節點
當前提交
5d9fbf34ee
共有 1 個文件被更改,包括 6 次插入1 次删除
  1. 6
    1
      src/image/efi_image.c

+ 6
- 1
src/image/efi_image.c 查看文件

@@ -280,12 +280,17 @@ static int efi_image_exec ( struct image *image ) {
280 280
  */
281 281
 static int efi_image_probe ( struct image *image ) {
282 282
 	EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
283
+	static EFI_DEVICE_PATH_PROTOCOL empty_path = {
284
+		.Type = END_DEVICE_PATH_TYPE,
285
+		.SubType = END_ENTIRE_DEVICE_PATH_SUBTYPE,
286
+		.Length[0] = sizeof ( empty_path ),
287
+	};
283 288
 	EFI_HANDLE handle;
284 289
 	EFI_STATUS efirc;
285 290
 	int rc;
286 291
 
287 292
 	/* Attempt loading image */
288
-	if ( ( efirc = bs->LoadImage ( FALSE, efi_image_handle, NULL,
293
+	if ( ( efirc = bs->LoadImage ( FALSE, efi_image_handle, &empty_path,
289 294
 				       user_to_virt ( image->data, 0 ),
290 295
 				       image->len, &handle ) ) != 0 ) {
291 296
 		/* Not an EFI image */

Loading…
取消
儲存