]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
efi_loader: return immediately in UCLASS_EFI_LOADER removal
authorMasahisa Kojima <masahisa.kojima@linaro.org>
Fri, 19 Jan 2024 00:45:46 +0000 (09:45 +0900)
committerHeinrich Schuchardt <heinrich.schuchardt@canonical.com>
Sun, 21 Jan 2024 10:24:24 +0000 (11:24 +0100)
In case of UCLASS_EFI_LOADER, EFI handles are managed by
EFI application/driver, we must not delete EFI handles.

Signed-off-by: Masahisa Kojima <masahisa.kojima@linaro.org>
Reviewed-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
lib/efi_loader/efi_disk.c

index e2edc69fcf0d45e237bff150116b2bfbca446758..b1739d99201c3788be614bc6c2b07ad08666908a 100644 (file)
@@ -731,8 +731,14 @@ int efi_disk_remove(void *ctx, struct event *event)
        switch (id) {
        case UCLASS_BLK:
                desc = dev_get_uclass_plat(dev);
-               if (desc && desc->uclass_id != UCLASS_EFI_LOADER)
-                       diskobj = (struct efi_disk_obj *)handle;
+               if (desc && desc->uclass_id == UCLASS_EFI_LOADER)
+                       /*
+                        * EFI application/driver manages the EFI handle,
+                        * no need to delete EFI handle.
+                        */
+                       return 0;
+
+               diskobj = (struct efi_disk_obj *)handle;
                break;
        case UCLASS_PARTITION:
                diskobj = (struct efi_disk_obj *)handle;
@@ -744,10 +750,8 @@ int efi_disk_remove(void *ctx, struct event *event)
                return 0;
        }
 
-       if (diskobj) {
-               dp = diskobj->dp;
-               volume = diskobj->volume;
-       }
+       dp = diskobj->dp;
+       volume = diskobj->volume;
 
        ret = efi_delete_handle(handle);
        /* Do not delete DM device if there are still EFI drivers attached. */