
Changes for complying to EFI spec ยง3.5.1.1 'Removable Media Boot Behavior'. Boot variables can be automatically generated during a removable media is probed. At the same time, unused boot variables will be detected and removed.
Signed-off-by: Raymond Mao raymond.mao@linaro.org --- Changes in v2 - Ignore EFI_NOT_FOUND returned from efi_bootmgr_update_media_device_boot_option which means no boot options scanned. Changes in v3 - Split the patch into moving and renaming functions and individual patches for each changed functionality
lib/efi_loader/efi_disk.c | 7 +++++++ lib/efi_loader/efi_variable.c | 10 +++++++++- lib/efi_loader/efi_variable_tee.c | 5 +++++ 3 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_disk.c b/lib/efi_loader/efi_disk.c index d2256713a8..ca5f07f2ec 100644 --- a/lib/efi_loader/efi_disk.c +++ b/lib/efi_loader/efi_disk.c @@ -687,6 +687,13 @@ int efi_disk_probe(void *ctx, struct event *event) return -1; }
+ /* only do the boot option management when UEFI sub-system is initialized */ + if (efi_obj_list_initialized == EFI_SUCCESS) { + ret = efi_bootmgr_update_media_device_boot_option(); + if (ret != EFI_SUCCESS && ret != EFI_NOT_FOUND) + return -1; + } + return 0; }
diff --git a/lib/efi_loader/efi_variable.c b/lib/efi_loader/efi_variable.c index be95ed44e6..fe71144358 100644 --- a/lib/efi_loader/efi_variable.c +++ b/lib/efi_loader/efi_variable.c @@ -476,6 +476,14 @@ efi_status_t efi_init_variables(void) log_err("Invalid EFI variable seed\n"); }
+ ret = efi_init_secure_state(); + if (ret != EFI_SUCCESS) + return ret;
- return efi_init_secure_state(); + /* update boot option management after variable service initialized */ + ret = efi_bootmgr_update_media_device_boot_option(); + if (ret != EFI_SUCCESS && ret != EFI_NOT_FOUND) + return ret; + + return EFI_SUCCESS; } diff --git a/lib/efi_loader/efi_variable_tee.c b/lib/efi_loader/efi_variable_tee.c index dfef18435d..2995d4a583 100644 --- a/lib/efi_loader/efi_variable_tee.c +++ b/lib/efi_loader/efi_variable_tee.c @@ -748,5 +748,10 @@ efi_status_t efi_init_variables(void) if (ret != EFI_SUCCESS) return ret;
+ /* update boot option management after variable service initialized */ + ret = efi_bootmgr_update_media_device_boot_option(); + if (ret != EFI_SUCCESS && ret != EFI_NOT_FOUND) + return ret; + return EFI_SUCCESS; }