Blob Blame History Raw
From 2ca5e334bbc5309fc6329b1263bd8d3d85712d03 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Tue, 9 May 2017 09:43:29 -0400
Subject: [PATCH 12/13] Try harder to satisfy coverity about the structure of
 update_info.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 efi/fwupdate.c     | 2 +-
 efi/mkvar2.c       | 2 +-
 include/fwup-efi.h | 3 ++-
 linux/libfwup.c    | 6 +++---
 4 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/efi/fwupdate.c b/efi/fwupdate.c
index 942d347..d009267 100644
--- a/efi/fwupdate.c
+++ b/efi/fwupdate.c
@@ -674,7 +674,7 @@ add_capsule(update_table *update, EFI_CAPSULE_HEADER **capsule_out,
 	UINTN fsize = 0;
 	EFI_CAPSULE_HEADER *capsule;
 
-	rc = open_file((EFI_DEVICE_PATH *)update->info->dp, &fh);
+	rc = open_file((EFI_DEVICE_PATH *)update->info->dp_buf, &fh);
 	if (EFI_ERROR(rc))
 		return rc;
 
diff --git a/efi/mkvar2.c b/efi/mkvar2.c
index 0c60a5a..a02a912 100644
--- a/efi/mkvar2.c
+++ b/efi/mkvar2.c
@@ -44,7 +44,7 @@ efi_main(EFI_HANDLE image, EFI_SYSTEM_TABLE *systab)
 	InitializeLib(image, systab);
 
 	ZeroMem(&info->time_attempted, sizeof (info->time_attempted));
-	CopyMem(info->dp, devicepath, sizeof (devicepath)-1);
+	CopyMem(info->dp_buf, devicepath, sizeof (devicepath)-1);
 	CopyMem(&info->guid, &guid, sizeof (guid));
 
 	EFI_STATUS rc = uefi_call_wrapper(RT->SetVariable, 5, L"FwUpdates",
diff --git a/include/fwup-efi.h b/include/fwup-efi.h
index fe1ec90..37f3459 100644
--- a/include/fwup-efi.h
+++ b/include/fwup-efi.h
@@ -31,7 +31,8 @@ typedef struct update_info_s {
 	/* variadic device path */
 	union {
 		efidp_header *dp_ptr;
-		uint8_t dp[sizeof(efidp_header)];
+		efidp_header dp;
+		uint8_t dp_buf[0];
 	};
 } __attribute__((__packed__)) update_info;
 
diff --git a/linux/libfwup.c b/linux/libfwup.c
index b29a0e5..232eb77 100644
--- a/linux/libfwup.c
+++ b/linux/libfwup.c
@@ -321,7 +321,7 @@ get_err:
 		goto get_err;
 	}
 
-	ssize_t sz = efidp_size((efidp)local->dp);
+	ssize_t sz = efidp_size((efidp)local->dp_buf);
 	if (sz < 0) {
 		efi_error("efidp_size() failed");
 		free(data);
@@ -337,7 +337,7 @@ get_err:
 		return -1;
 	}
 
-	memcpy(dp, local->dp, (size_t)sz);
+	memcpy(dp, local->dp_buf, (size_t)sz);
 	local->dp_ptr = dp;
 
 	*info = local;
@@ -394,7 +394,7 @@ err:
 		return -1;
 
 	memcpy(info2, info, sizeof(*info));
-	memcpy(info2->dp, info->dp_ptr, dps);
+	memcpy(info2->dp_buf, info->dp_ptr, dps);
 
 	uint32_t attributes = EFI_VARIABLE_NON_VOLATILE
 			      | EFI_VARIABLE_BOOTSERVICE_ACCESS
-- 
2.12.2