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>
diff --git a/lib/efi_loader/efi_file.c b/lib/efi_loader/efi_file.c
index 19afa69..44fafae 100644
--- a/lib/efi_loader/efi_file.c
+++ b/lib/efi_loader/efi_file.c
@@ -349,6 +349,11 @@
 	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 @@
 		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 @@
 
 	EFI_ENTRY("%p, %p, %p", file, buffer_size, buffer);
 
-	if (!buffer_size || !buffer) {
+	if (!buffer_size) {
 		ret = EFI_INVALID_PARAMETER;
 		goto error;
 	}