]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
util: make file_read() 64bit offset safe
authorLennart Poettering <lennart@poettering.net>
Wed, 26 Jun 2024 13:43:28 +0000 (15:43 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 26 Jun 2024 15:09:44 +0000 (17:09 +0200)
File offsets in UEFI are 64bit on all archs, hence let's use that typo
too, and not create artificial confusion around types.

src/boot/efi/util.c
src/boot/efi/util.h

index b5c8c6306e2d5e82a12e6caad34f03a108d808cb..eb29eb2d5b9a637bf2628b9e8c922577b01d5652 100644 (file)
@@ -330,7 +330,14 @@ EFI_STATUS chunked_read(EFI_FILE *file, size_t *size, void *buf) {
         return EFI_SUCCESS;
 }
 
-EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, size_t off, size_t size, char **ret, size_t *ret_size) {
+EFI_STATUS file_read(
+                EFI_FILE *dir,
+                const char16_t *name,
+                uint64_t off,
+                size_t size,
+                char **ret,
+                size_t *ret_size) {
+
         _cleanup_(file_closep) EFI_FILE *handle = NULL;
         _cleanup_free_ char *buf = NULL;
         EFI_STATUS err;
@@ -350,6 +357,9 @@ EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, size_t off, size_t siz
                 if (err != EFI_SUCCESS)
                         return err;
 
+                if (info->FileSize > SIZE_MAX)
+                        return EFI_BAD_BUFFER_SIZE;
+
                 size = info->FileSize;
         }
 
index ceac07ca3921ca07d6b79ac1647e7ebc64104b80..dc624f45aeb3d684443f326d9c3a3c4740ee2539 100644 (file)
@@ -102,7 +102,7 @@ char16_t *xstr8_to_path(const char *stra);
 char16_t *mangle_stub_cmdline(char16_t *cmdline);
 
 EFI_STATUS chunked_read(EFI_FILE *file, size_t *size, void *buf);
-EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, size_t off, size_t size, char **content, size_t *content_size);
+EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, uint64_t off, size_t size, char **content, size_t *content_size);
 
 static inline void file_closep(EFI_FILE **handle) {
         if (!*handle)