efi: skip Read() calls with zero sizes

Let's avoid calling Read() with zero-sized buffer, to avoid needless firmware
quirkiness.

See: #25911
This commit is contained in:
Lennart Poettering
2023-01-03 23:12:36 +01:00
committed by Luca Boccassi
parent 40557509be
commit fd1fec534e
2 changed files with 8 additions and 3 deletions
+3
View File
@@ -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;
+5 -3
View File
@@ -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);