efi_loader: initialize root node first
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Wed, 20 May 2020 19:27:29 +0000 (21:27 +0200)
committerHeinrich Schuchardt <xypron.glpk@gmx.de>
Thu, 21 May 2020 08:00:17 +0000 (10:00 +0200)
With commit 16ad946f41d3 ("efi_loader: change setup sequence") the
detection of block device was moved to the start of the initialization
sequence. In the case of virtio devices two handles with the same device
path being created.

The root node handle should be created before anything else.

Reported-by: Ard Biesheuvel <ardb@kernel.org>
Fixes: 16ad946f41d3 ("efi_loader: change setup sequence")
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
lib/efi_loader/efi_setup.c

index 26a7423203626d429aabdb515849afb060ee72f9..dd0c53fc23992fd1a476a135459bd412acaba14b 100644 (file)
@@ -135,6 +135,11 @@ efi_status_t efi_init_obj_list(void)
        /* On ARM switch from EL3 or secure mode to EL2 or non-secure mode */
        switch_to_non_secure_mode();
 
+       /* Initialize root node */
+       ret = efi_root_node_register();
+       if (ret != EFI_SUCCESS)
+               goto out;
+
 #ifdef CONFIG_PARTITIONS
        ret = efi_disk_register();
        if (ret != EFI_SUCCESS)
@@ -175,11 +180,6 @@ efi_status_t efi_init_obj_list(void)
        if (ret != EFI_SUCCESS)
                goto out;
 
-       /* Initialize root node */
-       ret = efi_root_node_register();
-       if (ret != EFI_SUCCESS)
-               goto out;
-
        /* Initialize EFI driver uclass */
        ret = efi_driver_init();
        if (ret != EFI_SUCCESS)