summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Sørensen <stefan@astylos.dk>2020-07-22 09:43:31 +0200
committerHeinrich Schuchardt <xypron.glpk@gmx.de>2020-07-22 12:32:41 +0200
commit1ef1cf1f93345cbeb5ff52cbf00c6ee6fee1a47b (patch)
treefae98940bf37f8a446edae5741893ec6b22a9d38
parent9b87d4429c145ebb66895c7e053e8d53192180e2 (diff)
downloadu-boot-1ef1cf1f93345cbeb5ff52cbf00c6ee6fee1a47b.tar.gz
u-boot-1ef1cf1f93345cbeb5ff52cbf00c6ee6fee1a47b.tar.xz
u-boot-1ef1cf1f93345cbeb5ff52cbf00c6ee6fee1a47b.zip
efi_loader: loosen buffer parameter check in efi_file_read
When reading a directory, EFI_BUFFER_TOO_SMALL should be returned when the supplied buffer is too small, so a use-case is to call efi_file_read with *buffer_size=0 and buffer=NULL to obtain the needed size before doing the actual read. So move the buffer!=NULL check to after the buffer size has been checked. This fix allows the Redhat shim fallback to run and e.g. Fedora 32 now boots out of the box. Signed-off-by: Stefan Sørensen <stefan.sorensen@spectralink.com> Reviewed-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-rw-r--r--lib/efi_loader/efi_file.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
index 19afa69f53..44fafae058 100644
--- a/lib/efi_loader/efi_file.c
+++ b/lib/efi_loader/efi_file.c
@@ -349,6 +349,11 @@ static efi_status_t file_read(struct file_handle *fh, u64 *buffer_size,
efi_status_t ret;
loff_t file_size;
+ if (!buffer) {
+ ret = EFI_INVALID_PARAMETER;
+ return ret;
+ }
+
ret = efi_get_file_size(fh, &file_size);
if (ret != EFI_SUCCESS)
return ret;
@@ -414,6 +419,8 @@ static efi_status_t dir_read(struct file_handle *fh, u64 *buffer_size,
fh->dent = dent;
return EFI_BUFFER_TOO_SMALL;
}
+ if (!buffer)
+ return EFI_INVALID_PARAMETER;
fh->dent = NULL;
*buffer_size = required_size;
@@ -443,7 +450,7 @@ static efi_status_t EFIAPI efi_file_read(struct efi_file_handle *file,
EFI_ENTRY("%p, %p, %p", file, buffer_size, buffer);
- if (!buffer_size || !buffer) {
+ if (!buffer_size) {
ret = EFI_INVALID_PARAMETER;
goto error;
}