efi_loader: remove efi_delete_handle on loadfile2
authorIlias Apalodimas <ilias.apalodimas@linaro.org>
Sun, 16 Oct 2022 08:36:32 +0000 (11:36 +0300)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 16 Oct 2022 10:23:22 +0000 (12:23 +0200)
Loadfile2 code is installing two protocols on it's own handle
and uses efi_delete_handle() to clean it up on failure(s). However
commit 05c4c9e21ae6 ("efi_loader: define internal implementations of
install/uninstallmultiple") prepares the ground for us to clean up
efi_delete_handle() used in favor of Install/UninstallMultipleProtocol.

While at it clean up the non needed void casts to (void *) on the
protolcol installation.

Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
cmd/bootefi.c
include/efi_loader.h
lib/efi_loader/efi_load_initrd.c

index b93c0d3..2a7d429 100644 (file)
@@ -394,8 +394,10 @@ static efi_status_t do_bootefi_exec(efi_handle_t handle, void *load_options)
 out:
        free(load_options);
 
-       if (IS_ENABLED(CONFIG_EFI_LOAD_FILE2_INITRD))
-               efi_initrd_deregister();
+       if (IS_ENABLED(CONFIG_EFI_LOAD_FILE2_INITRD)) {
+               if (efi_initrd_deregister() != EFI_SUCCESS)
+                       log_err("Failed to remove loadfile2 for initrd\n");
+       }
 
        /* Control is returned to U-Boot, disable EFI watchdog */
        efi_set_watchdog(0);
index 1bac3f4..0c6c95b 100644 (file)
@@ -570,7 +570,7 @@ efi_status_t efi_net_register(void);
 /* Called by bootefi to make the watchdog available */
 efi_status_t efi_watchdog_register(void);
 efi_status_t efi_initrd_register(void);
-void efi_initrd_deregister(void);
+efi_status_t efi_initrd_deregister(void);
 /* Called by bootefi to make SMBIOS tables available */
 /**
  * efi_acpi_register() - write out ACPI tables
index 87fde3f..1934337 100644 (file)
@@ -213,7 +213,7 @@ efi_status_t efi_initrd_register(void)
                                                       &efi_guid_device_path, &dp_lf2_handle,
                                                       /* LOAD_FILE2 */
                                                       &efi_guid_load_file2_protocol,
-                                                      (void *)&efi_lf2_protocol,
+                                                      &efi_lf2_protocol,
                                                       NULL);
 
        return ret;
@@ -227,11 +227,22 @@ efi_status_t efi_initrd_register(void)
  *
  * Return:     status code
  */
-void efi_initrd_deregister(void)
+efi_status_t efi_initrd_deregister(void)
 {
+       efi_status_t ret;
+
        if (!efi_initrd_handle)
-               return;
+               return EFI_SUCCESS;
 
-       efi_delete_handle(efi_initrd_handle);
+       ret = efi_uninstall_multiple_protocol_interfaces(efi_initrd_handle,
+                                                        /* initramfs */
+                                                        &efi_guid_device_path,
+                                                        &dp_lf2_handle,
+                                                        /* LOAD_FILE2 */
+                                                        &efi_guid_load_file2_protocol,
+                                                        &efi_lf2_protocol,
+                                                        NULL);
        efi_initrd_handle = NULL;
+
+       return ret;
 }