summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Jones <pjones@redhat.com>2013-11-21 11:48:24 -0500
committerPeter Jones <pjones@redhat.com>2013-11-21 11:48:24 -0500
commitdd77b3447cb4ee3c80659265f9ea084af8829ae4 (patch)
treee0ec662779e85ad42b64fb08cc5e4cfe02895904
parent040f08c24960bf9076c07d92c46d5f32a1f186d3 (diff)
downloadefi-boot-shim-dd77b3447cb4ee3c80659265f9ea084af8829ae4.tar.gz
efi-boot-shim-dd77b3447cb4ee3c80659265f9ea084af8829ae4.zip
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>
-rw-r--r--fallback.c21
1 files changed, 14 insertions, 7 deletions
diff --git a/fallback.c b/fallback.c
index c8751448..ba864eec 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;