1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-27 18:55:40 +03:00

util: make file_read() 64bit offset safe

File offsets in UEFI are 64bit on all archs, hence let's use that typo
too, and not create artificial confusion around types.
This commit is contained in:
Lennart Poettering 2024-06-26 15:43:28 +02:00
parent ba694646ea
commit 9573ab8f5a
2 changed files with 12 additions and 2 deletions

View File

@ -330,7 +330,14 @@ EFI_STATUS chunked_read(EFI_FILE *file, size_t *size, void *buf) {
return EFI_SUCCESS; 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_(file_closep) EFI_FILE *handle = NULL;
_cleanup_free_ char *buf = NULL; _cleanup_free_ char *buf = NULL;
EFI_STATUS err; 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) if (err != EFI_SUCCESS)
return err; return err;
if (info->FileSize > SIZE_MAX)
return EFI_BAD_BUFFER_SIZE;
size = info->FileSize; size = info->FileSize;
} }

View File

@ -102,7 +102,7 @@ char16_t *xstr8_to_path(const char *stra);
char16_t *mangle_stub_cmdline(char16_t *cmdline); char16_t *mangle_stub_cmdline(char16_t *cmdline);
EFI_STATUS chunked_read(EFI_FILE *file, size_t *size, void *buf); 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) { static inline void file_closep(EFI_FILE **handle) {
if (!*handle) if (!*handle)