diff options
| author | Julian Andres Klode <julian.klode@canonical.com> | 2021-08-04 10:43:30 +0200 |
|---|---|---|
| committer | Peter Jones <pjones@redhat.com> | 2021-10-12 10:50:44 -0400 |
| commit | 7cbf1184b612b71e06a3750fe827a94caf726cc7 (patch) | |
| tree | f8e2a1901f883f3ad1a2e06bdc667ceb5cb81cd0 /shim.c | |
| parent | 885feafdc1d2af477c48d156f0aa4c19b828cf18 (diff) | |
| download | efi-boot-shim-7cbf1184b612b71e06a3750fe827a94caf726cc7.tar.gz efi-boot-shim-7cbf1184b612b71e06a3750fe827a94caf726cc7.zip | |
Extract is_removable_media_path() out of should_use_fallback()
Simple refactoring that extracts the path checking on the given
loaded image. This will be useful to check if we were booted via
removable media path in other places.
Diffstat (limited to 'shim.c')
| -rw-r--r-- | shim.c | 48 |
1 files changed, 31 insertions, 17 deletions
@@ -690,25 +690,12 @@ verify_buffer (char *data, int datasize, } static int -should_use_fallback(EFI_HANDLE image_handle) +is_removable_media_path(EFI_LOADED_IMAGE *li) { - EFI_LOADED_IMAGE *li; unsigned int pathlen = 0; CHAR16 *bootpath = NULL; - EFI_FILE_IO_INTERFACE *fio = NULL; - EFI_FILE *vh = NULL; - EFI_FILE *fh = NULL; - EFI_STATUS efi_status; int ret = 0; - efi_status = BS->HandleProtocol(image_handle, &EFI_LOADED_IMAGE_GUID, - (void **)&li); - if (EFI_ERROR(efi_status)) { - perror(L"Could not get image for boot" EFI_ARCH L".efi: %r\n", - efi_status); - return 0; - } - bootpath = DevicePathToStr(li->FilePath); /* Check the beginning of the string and the end, to avoid @@ -726,6 +713,36 @@ should_use_fallback(EFI_HANDLE image_handle) if (pathlen < 5 || StrCaseCmp(bootpath + pathlen - 4, L".EFI")) goto error; + ret = 1; + +error: + if (bootpath) + FreePool(bootpath); + + return ret; +} + +static int +should_use_fallback(EFI_HANDLE image_handle) +{ + EFI_LOADED_IMAGE *li; + EFI_FILE_IO_INTERFACE *fio = NULL; + EFI_FILE *vh = NULL; + EFI_FILE *fh = NULL; + EFI_STATUS efi_status; + int ret = 0; + + efi_status = BS->HandleProtocol(image_handle, &EFI_LOADED_IMAGE_GUID, + (void **)&li); + if (EFI_ERROR(efi_status)) { + perror(L"Could not get image for boot" EFI_ARCH L".efi: %r\n", + efi_status); + return 0; + } + + if (!is_removable_media_path(li)) + goto error; + efi_status = BS->HandleProtocol(li->DeviceHandle, &FileSystemProtocol, (void **) &fio); if (EFI_ERROR(efi_status)) { @@ -758,12 +775,9 @@ error: fh->Close(fh); if (vh) vh->Close(vh); - if (bootpath) - FreePool(bootpath); return ret; } - /* * Open the second stage bootloader and read it into a buffer */ |
