diff options
author | Jan Janssen <medhefgo@web.de> | 2019-11-01 12:31:07 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2019-11-04 13:39:20 +0100 |
commit | f9f1d01cbd19d5396656e8a4caaaa4ab59d464fc (patch) | |
tree | 632d54cc322bfd68091de4aa8f1772156975ec48 | |
parent | b5395600a0b0a4e01f3f50a860547060290aca34 (diff) | |
download | systemd-f9f1d01cbd19d5396656e8a4caaaa4ab59d464fc.tar.gz |
sd-boot: Skip adding boot entries when the loader does not exist
-rw-r--r-- | src/boot/efi/boot.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index fb7abd1f38..849c3c63b6 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -1300,6 +1300,7 @@ static VOID config_entry_bump_counters( static VOID config_entry_add_from_file( Config *config, EFI_HANDLE *device, + EFI_FILE *root_dir, CHAR16 *path, CHAR16 *file, CHAR8 *content, @@ -1310,6 +1311,8 @@ static VOID config_entry_add_from_file( UINTN pos = 0; CHAR8 *key, *value; UINTN len; + EFI_STATUS err; + EFI_FILE_HANDLE handle; _cleanup_freepool_ CHAR16 *initrd = NULL; entry = AllocatePool(sizeof(ConfigEntry)); @@ -1406,6 +1409,14 @@ static VOID config_entry_add_from_file( return; } + /* check existence */ + err = uefi_call_wrapper(root_dir->Open, 5, root_dir, &handle, entry->loader, EFI_FILE_MODE_READ, 0ULL); + if (EFI_ERROR(err)) { + config_entry_free(entry); + return; + } + uefi_call_wrapper(handle->Close, 1, handle); + /* add initrd= to options */ if (entry->type == LOADER_LINUX && initrd) { if (entry->options) { @@ -1503,7 +1514,7 @@ static VOID config_load_entries( err = file_read(entries_dir, f->FileName, 0, 0, &content, NULL); if (!EFI_ERROR(err)) - config_entry_add_from_file(config, device, L"\\loader\\entries", f->FileName, content, loaded_image_path); + config_entry_add_from_file(config, device, root_dir, L"\\loader\\entries", f->FileName, content, loaded_image_path); } uefi_call_wrapper(entries_dir->Close, 1, entries_dir); } |