mirror of https://github.com/ipxe/ipxe.git
[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>pull/27/merge
parent
0df7ce9641
commit
5d9fbf34ee
|
@ -280,12 +280,17 @@ static int efi_image_exec ( struct image *image ) {
|
||||||
*/
|
*/
|
||||||
static int efi_image_probe ( struct image *image ) {
|
static int efi_image_probe ( struct image *image ) {
|
||||||
EFI_BOOT_SERVICES *bs = efi_systab->BootServices;
|
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_HANDLE handle;
|
||||||
EFI_STATUS efirc;
|
EFI_STATUS efirc;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Attempt loading image */
|
/* 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 ),
|
user_to_virt ( image->data, 0 ),
|
||||||
image->len, &handle ) ) != 0 ) {
|
image->len, &handle ) ) != 0 ) {
|
||||||
/* Not an EFI image */
|
/* Not an EFI image */
|
||||||
|
|
Loading…
Reference in New Issue