efi_loader: do not use local variable for handle

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

Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index a0a8a7c..d6366c3 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -325,7 +325,7 @@
 {
 	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;
 
@@ -335,16 +335,21 @@
 	/*
 	 * 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;
@@ -428,8 +433,8 @@
 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;
 }