efi_loader: pass handle of loaded image
authorHeinrich Schuchardt <xypron.glpk@gmx.de>
Sun, 26 Nov 2017 13:05:22 +0000 (14:05 +0100)
committerAlexander Graf <agraf@suse.de>
Fri, 1 Dec 2017 12:40:07 +0000 (13:40 +0100)
The handle of a loaded image is the value of the handle
member of the loaded image info object and not the
address of the loaded image info.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Signed-off-by: Alexander Graf <agraf@suse.de>
cmd/bootefi.c
lib/efi_loader/efi_boottime.c

index aa754b7..78ff109 100644 (file)
@@ -254,7 +254,8 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
                dcache_disable();       /* flush cache before switch to EL2 */
 
                /* Move into EL2 and keep running there */
                dcache_disable();       /* flush cache before switch to EL2 */
 
                /* Move into EL2 and keep running there */
-               armv8_switch_to_el2((ulong)entry, (ulong)&loaded_image_info,
+               armv8_switch_to_el2((ulong)entry,
+                                   (ulong)&loaded_image_info_obj.handle,
                                    (ulong)&systab, 0, (ulong)efi_run_in_el2,
                                    ES_TO_AARCH64);
 
                                    (ulong)&systab, 0, (ulong)efi_run_in_el2,
                                    ES_TO_AARCH64);
 
@@ -263,7 +264,7 @@ static efi_status_t do_bootefi_exec(void *efi, void *fdt,
        }
 #endif
 
        }
 #endif
 
-       ret = efi_do_enter(&loaded_image_info, &systab, entry);
+       ret = efi_do_enter(loaded_image_info_obj.handle, &systab, entry);
 
 exit:
        /* image has returned, loaded-image obj goes *poof*: */
 
 exit:
        /* image has returned, loaded-image obj goes *poof*: */
@@ -350,7 +351,7 @@ static int do_bootefi(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                /* Transfer environment variable efi_selftest as load options */
                set_load_options(&loaded_image_info, "efi_selftest");
                /* Execute the test */
                /* Transfer environment variable efi_selftest as load options */
                set_load_options(&loaded_image_info, "efi_selftest");
                /* Execute the test */
-               r = efi_selftest(&loaded_image_info, &systab);
+               r = efi_selftest(loaded_image_info_obj.handle, &systab);
                efi_restore_gd();
                free(loaded_image_info.load_options);
                list_del(&loaded_image_info_obj.link);
                efi_restore_gd();
                free(loaded_image_info.load_options);
                list_del(&loaded_image_info_obj.link);
index 54e9c27..0fb2848 100644 (file)
@@ -1317,7 +1317,7 @@ static efi_status_t EFIAPI efi_load_image(bool boot_policy,
 
        info->system_table = &systab;
        info->parent_handle = parent_image;
 
        info->system_table = &systab;
        info->parent_handle = parent_image;
-       *image_handle = info;
+       *image_handle = obj->handle;
 
        return EFI_EXIT(EFI_SUCCESS);
 }
 
        return EFI_EXIT(EFI_SUCCESS);
 }