Do not use a local variable for the handle backing the memory device path.
Adjust relate comments.

Signed-off-by: Heinrich Schuchardt <xypron.g...@gmx.de>
---
 cmd/bootefi.c | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index ac4deac22d..791db359f5 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -352,7 +352,7 @@ static efi_status_t do_bootefi_exec(void *efi,
 {
        struct efi_loaded_image loaded_image_info = {};
        struct efi_object loaded_image_info_obj = {};
-       struct efi_object mem_obj = {};
+       efi_handle_t mem_handle = NULL;
        struct efi_device_path *memdp = NULL;
        efi_status_t ret;
 
@@ -362,16 +362,21 @@ static efi_status_t do_bootefi_exec(void *efi,
        /*
         * Special case for efi payload not loaded from disk, such as
         * 'bootefi hello' or for example payload loaded directly into
-        * memory via jtag/etc:
+        * memory via jtag, etc:
         */
        if (!device_path && !image_path) {
                printf("WARNING: using memory device/image path, this may 
confuse some payloads!\n");
                /* actual addresses filled in after efi_load_pe() */
                memdp = efi_dp_from_mem(0, 0, 0);
                device_path = image_path = memdp;
-               efi_add_handle(&mem_obj);
-
-               ret = efi_add_protocol(mem_obj.handle, &efi_guid_device_path,
+               /*
+                * Grub expects that the device path of the loaded image is
+                * installed on a handle.
+                */
+               ret = efi_create_handle(&mem_handle);
+               if (ret != EFI_SUCCESS)
+                       goto exit;
+               ret = efi_add_protocol(mem_handle, &efi_guid_device_path,
                                       device_path);
                if (ret != EFI_SUCCESS)
                        goto exit;
@@ -455,8 +460,8 @@ static efi_status_t do_bootefi_exec(void *efi,
 exit:
        /* image has returned, loaded-image obj goes *poof*: */
        list_del(&loaded_image_info_obj.link);
-       if (mem_obj.handle)
-               list_del(&mem_obj.link);
+       if (mem_handle)
+               efi_delete_handle(mem_handle);
 
        return ret;
 }
-- 
2.18.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to