summaryrefslogtreecommitdiff
path: root/cmd/bootefi.c
diff options
context:
space:
mode:
authorHeinrich Schuchardt <xypron.glpk@gmx.de>2020-08-07 17:49:39 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-08-08 19:03:24 +0200
commit0ad64007feb93dced461647c75f782160b1c8ede (patch)
treed42e685d39a74b5e8273dcd97347f24870126a2b /cmd/bootefi.c
parent1064d04920beba5564c84fde1993dd39c809ed49 (diff)
efi_loader: set load options in boot manager
Up to now we used the value of the bootargs environment variable as load options in the boot manager. This is not correct. The data has to be taken from the Boot#### variable. Let the boot manager copy the optional data of the EFI_LOAD_OPTION as load options to the loaded image protocol. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'cmd/bootefi.c')
-rw-r--r--cmd/bootefi.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/cmd/bootefi.c b/cmd/bootefi.c
index 5523405e13..fbfed54e85 100644
--- a/cmd/bootefi.c
+++ b/cmd/bootefi.c
@@ -310,17 +310,11 @@ efi_status_t efi_install_fdt(void *fdt)
* Load the EFI binary into a newly assigned memory unwinding the relocation
* information, install the loaded image protocol, and call the binary.
*/
-static efi_status_t do_bootefi_exec(efi_handle_t handle)
+static efi_status_t do_bootefi_exec(efi_handle_t handle, void *load_options)
{
efi_status_t ret;
efi_uintn_t exit_data_size = 0;
u16 *exit_data = NULL;
- u16 *load_options;
-
- /* Transfer environment variable as load options */
- ret = efi_env_set_load_options(handle, "bootargs", &load_options);
- if (ret != EFI_SUCCESS)
- return ret;
/* Call our payload! */
ret = EFI_CALL(efi_start_image(handle, &exit_data_size, &exit_data));
@@ -349,14 +343,15 @@ static int do_efibootmgr(void)
{
efi_handle_t handle;
efi_status_t ret;
+ void *load_options;
- ret = efi_bootmgr_load(&handle);
+ ret = efi_bootmgr_load(&handle, &load_options);
if (ret != EFI_SUCCESS) {
log_notice("EFI boot manager: Cannot load any image\n");
return CMD_RET_FAILURE;
}
- ret = do_bootefi_exec(handle);
+ ret = do_bootefi_exec(handle, load_options);
if (ret != EFI_SUCCESS)
return CMD_RET_FAILURE;
@@ -467,7 +462,14 @@ efi_status_t efi_run_image(void *source_buffer, efi_uintn_t source_size)
if (ret != EFI_SUCCESS)
goto out;
- ret = do_bootefi_exec(handle);
+ u16 *load_options;
+
+ /* Transfer environment variable as load options */
+ ret = efi_env_set_load_options(handle, "bootargs", &load_options);
+ if (ret != EFI_SUCCESS)
+ goto out;
+
+ ret = do_bootefi_exec(handle, load_options);
out:
efi_delete_handle(mem_handle);