On 3/6/19 1:27 AM, AKASHI Takahiro wrote: > On Tue, Mar 05, 2019 at 08:48:37PM +0100, Heinrich Schuchardt wrote: >> On 3/5/19 6:53 AM, AKASHI Takahiro wrote: >>> It is just wrong to add devcie path protocol to image handle. >>> >>> Signed-off-by: AKASHI Takahiro <takahiro.aka...@linaro.org> >>> --- >>> lib/efi_loader/efi_boottime.c | 11 +---------- >>> 1 file changed, 1 insertion(+), 10 deletions(-) >>> >>> diff --git a/lib/efi_loader/efi_boottime.c b/lib/efi_loader/efi_boottime.c >>> index bd8b8a17ae71..7bd9c0a952d4 100644 >>> --- a/lib/efi_loader/efi_boottime.c >>> +++ b/lib/efi_loader/efi_boottime.c >>> @@ -1540,17 +1540,8 @@ efi_status_t efi_setup_loaded_image(struct >>> efi_device_path *device_path, >>> info->file_path = file_path; >>> info->system_table = &systab; >>> >>> - if (device_path) { >>> + if (device_path) >>> info->device_handle = efi_dp_find_obj(device_path, NULL); >>> - /* >>> - * When asking for the device path interface, return >>> - * bootefi_device_path >>> - */ >>> - ret = efi_add_protocol(&obj->header, >>> - &efi_guid_device_path, device_path); >> >> Installing the device path is not the problem. It is the GUID that is >> wrong. Use EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID here. > > Okay, but I believe that we need duplicate device_path here > before installing it as EFI_LOADED_IMAGE_DEVICE_PATH_PROTOCOL_GUID. > > See this line: > >>> info->device_handle = efi_dp_find_obj(device_path, NULL); > > Normally, device_path is expected to be already associated with > another handle. We should not allow two handles to share one protocol(data). > That is also why I initially believed that add_protocol() should be removed.
The spec says we should use a copy of the unchanged DevicePath parameter of LoadImage() which may be NULL. So we have to rework all callers to get the device_path parameter of efi_setup_loaded_image() right. Best regards Heinrich > > Thanks, > -Takahiro Akashi > > >> UEFI Spec 2.7: >> >> "The Loaded Image Device Path Protocol must be installed onto the image >> handle of a PE/COFF image loaded through the EFI Boot Service LoadImage()." >> >> Best regards >> >> Heinrich >> >>> - if (ret != EFI_SUCCESS) >>> - goto failure; >>> - } >>> >>> /* >>> * When asking for the loaded_image interface, just >>> >> > _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot