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);