diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 707d159baca8c6e565fb8199486b921bed6d26f3..f55a40dc84cd05dc2f3cbb39583f9c70f7e5a68c 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -263,6 +263,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 = {};
 	struct efi_device_path *memdp = NULL;
 	efi_status_t ret;
 
@@ -279,6 +280,12 @@ static efi_status_t do_bootefi_exec(void *efi,
 		/* 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,
+				       device_path);
+		if (ret != EFI_SUCCESS)
+			goto exit;
 	} else {
 		assert(device_path && image_path);
 	}
@@ -343,6 +350,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);
 
 	return ret;
 }