arrfab / rpms / shim

Forked from rpms/shim 5 years ago
Clone
Blob Blame History Raw
From 3a7feeff6cdb3b96a1ef2ccff8c150e2324d50a9 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 15 Nov 2013 09:38:41 -0500
Subject: [PATCH 16/74] Rewrite directory traversal allocation path so coverity
 can grok it.

The things we do for our tools.  In this case, make the AllocatePool()
happen outside of a conditional, even though that conditional will
always bee satisfied.  This way coverity won't think we're setting fi
to NULL and passing it to StrCaseCmp.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 fallback.c | 21 ++++++++++++++-------
 1 file changed, 14 insertions(+), 7 deletions(-)

diff --git a/fallback.c b/fallback.c
index c875144..ba864ee 100644
--- a/fallback.c
+++ b/fallback.c
@@ -445,25 +445,32 @@ find_boot_csv(EFI_FILE_HANDLE fh, CHAR16 *dirname)
 		return EFI_SUCCESS;
 	}
 	FreePool(buffer);
+	buffer = NULL;
 
 	bs = 0;
 	do {
 		bs = 0;
 		rc = uefi_call_wrapper(fh->Read, 3, fh, &bs, NULL);
-		if (rc == EFI_BUFFER_TOO_SMALL) {
-			buffer = AllocateZeroPool(bs);
-			if (!buffer) {
-				Print(L"Could not allocate memory\n");
-				return EFI_OUT_OF_RESOURCES;
-			}
+		if (EFI_ERROR(rc) && rc != EFI_BUFFER_TOO_SMALL) {
+			Print(L"Could not read \\EFI\\%s\\: %d\n", dirname, rc);
+			if (buffer)
+				FreePool(buffer);
+			return rc;
+		}
 
-			rc = uefi_call_wrapper(fh->Read, 3, fh, &bs, buffer);
+		buffer = AllocateZeroPool(bs);
+		if (!buffer) {
+			Print(L"Could not allocate memory\n");
+			return EFI_OUT_OF_RESOURCES;
 		}
+
+		rc = uefi_call_wrapper(fh->Read, 3, fh, &bs, buffer);
 		if (EFI_ERROR(rc)) {
 			Print(L"Could not read \\EFI\\%s\\: %d\n", dirname, rc);
 			FreePool(buffer);
 			return rc;
 		}
+
 		if (bs == 0)
 			break;
 
-- 
1.9.3