From fd1fec534e70891c1fe49779221d93236d8c5ac2 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 3 Jan 2023 15:58:46 +0100 Subject: [PATCH] efi: skip Read() calls with zero sizes Let's avoid calling Read() with zero-sized buffer, to avoid needless firmware quirkiness. See: #25911 --- src/boot/efi/boot.c | 3 +++ src/boot/efi/util.c | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c index 2e657a8bf9..29996b8826 100644 --- a/src/boot/efi/boot.c +++ b/src/boot/efi/boot.c @@ -2295,6 +2295,9 @@ static EFI_STATUS initrd_prepare( if (err != EFI_SUCCESS) return err; + if (info->FileSize == 0) /* Automatically skip over empty files */ + continue; + UINTN new_size, read_size = info->FileSize; if (__builtin_add_overflow(size, read_size, &new_size)) return EFI_OUT_OF_RESOURCES; diff --git a/src/boot/efi/util.c b/src/boot/efi/util.c index d1e1aa59ae..b1c19a5c9b 100644 --- a/src/boot/efi/util.c +++ b/src/boot/efi/util.c @@ -326,9 +326,11 @@ EFI_STATUS file_read(EFI_FILE *dir, const char16_t *name, UINTN off, UINTN size, UINTN extra = size % sizeof(char16_t) + sizeof(char16_t); buf = xmalloc(size + extra); - err = handle->Read(handle, &size, buf); - if (err != EFI_SUCCESS) - return err; + if (size > 0) { + err = handle->Read(handle, &size, buf); + if (err != EFI_SUCCESS) + return err; + } /* Note that handle->Read() changes size to reflect the actually bytes read. */ memset(buf + size, 0, extra); -- 2.25.1