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:
committed by
Luca Boccassi
parent
40557509be
commit
fd1fec534e
@@ -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
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user