]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
boot: port more code over to get_file_info_harder()
authorLennart Poettering <lennart@poettering.net>
Tue, 21 Sep 2021 13:29:03 +0000 (15:29 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 23 Sep 2021 15:24:10 +0000 (17:24 +0200)
src/boot/efi/boot.c
src/boot/efi/devicetree.c
src/boot/efi/random-seed.c

index 40fb933af4c90c745a0a3194cb92cd94caae288b..386ee678ea663ae34587b4b8f9defae7126c1aa6 100644 (file)
@@ -1226,7 +1226,7 @@ static VOID config_entry_bump_counters(
         _cleanup_(FileHandleClosep) EFI_FILE_HANDLE handle = NULL;
         static const EFI_GUID EfiFileInfoGuid = EFI_FILE_INFO_ID;
         _cleanup_freepool_ EFI_FILE_INFO *file_info = NULL;
-        UINTN file_info_size, a, b;
+        UINTN file_info_size;
         EFI_STATUS r;
 
         assert(entry);
@@ -1244,26 +1244,9 @@ static VOID config_entry_bump_counters(
         if (EFI_ERROR(r))
                 return;
 
-        a = StrLen(entry->current_name);
-        b = StrLen(entry->next_name);
-
-        file_info_size = OFFSETOF(EFI_FILE_INFO, FileName) + (a > b ? a : b) + 1;
-
-        for (;;) {
-                file_info = AllocatePool(file_info_size);
-
-                r = uefi_call_wrapper(handle->GetInfo, 4, handle, (EFI_GUID*) &EfiFileInfoGuid, &file_info_size, file_info);
-                if (!EFI_ERROR(r))
-                        break;
-
-                if (r != EFI_BUFFER_TOO_SMALL || file_info_size * 2 < file_info_size) {
-                        log_error_stall(L"Failed to get file info for '%s': %r", old_path, r);
-                        return;
-                }
-
-                file_info_size *= 2;
-                FreePool(file_info);
-        }
+        r = get_file_info_harder(handle, &file_info, &file_info_size);
+        if (EFI_ERROR(r))
+                return;
 
         /* And rename the file */
         StrCpy(file_info->FileName, entry->next_name);
index c65936bdb4f405a837834aaa8cc9860aa2ee0a80..87ae97a52e0659c7bdf492a52a52f2ccf20cc783 100644 (file)
@@ -91,9 +91,9 @@ EFI_STATUS devicetree_install(struct devicetree_state *state,
         if (EFI_ERROR(err))
                 return err;
 
-        info = LibFileInfo(handle);
-        if (!info)
-                return EFI_OUT_OF_RESOURCES;
+        err = get_file_info_harder(handle, &info, NULL);
+        if (EFI_ERROR(err))
+                return err;
         if (info->FileSize < FDT_V1_SIZE || info->FileSize > 32 * 1024 * 1024)
                 /* 32MB device tree blob doesn't seem right */
                 return EFI_INVALID_PARAMETER;
index d20923eacc5ff98369969e9410b21016c3032426..1505b9d93bb63b6d3ce004e038468392e0b3e8a0 100644 (file)
@@ -263,9 +263,9 @@ EFI_STATUS process_random_seed(EFI_FILE *root_dir, RandomSeedMode mode) {
                 return err;
         }
 
-        info = LibFileInfo(handle);
-        if (!info)
-                return log_oom();
+        err = get_file_info_harder(handle, &info, NULL);
+        if (EFI_ERROR(err))
+                return log_error_status_stall(err, L"Failed to get file info for random seed: %r");
 
         size = info->FileSize;
         if (size < RANDOM_MAX_SIZE_MIN)