[efi] Fill in loaded image's DeviceHandle if firmware fails to do so
Some EFI 1.10 implementations (observed with a mid-2011 iMac) seem to fail to fill in the DeviceHandle for our loaded images. It is plausible that these implementations fill in the DeviceHandle only if loading the image from a device path (rather than directly from a memory buffer). Work around this problem by filling in DeviceHandle if the firmware leaves it empty. We cannot sensibly fill in FilePath, because we have no way of knowing whether or not the firmware will treat this as a pointer to be freed when the image returns. Reported-by: Curtis Larsen <larsen@dixie.edu> Tested-by: Curtis Larsen <larsen@dixie.edu> Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
parent
b53d4ae398
commit
79419a1c69
|
@ -209,6 +209,13 @@ static int efi_image_exec ( struct image *image ) {
|
|||
goto err_open_protocol;
|
||||
}
|
||||
|
||||
/* Some EFI 1.10 implementations seem not to fill in DeviceHandle */
|
||||
if ( loaded.image->DeviceHandle == NULL ) {
|
||||
DBGC ( image, "EFIIMAGE %p filling in missing DeviceHandle\n",
|
||||
image );
|
||||
loaded.image->DeviceHandle = snpdev->handle;
|
||||
}
|
||||
|
||||
/* Sanity checks */
|
||||
assert ( loaded.image->ParentHandle == efi_image_handle );
|
||||
assert ( loaded.image->DeviceHandle == snpdev->handle );
|
||||
|
|
Reference in New Issue