[coreboot-gerrit] New patch to review for coreboot: 33f240c cbfstool: free memory

Patrick Georgi (patrick@georgi-clan.de) gerrit at coreboot.org
Mon Sep 29 10:09:32 CEST 2014


Patrick Georgi (patrick at georgi-clan.de) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/6987

-gerrit

commit 33f240cd54eeb599a630ab2d913b2afdd1857960
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Mon Sep 29 10:08:35 2014 +0200

    cbfstool: free memory
    
    Change-Id: Ic53127a61154460fa3741a92a3b2de0eba446e9f
    Found-by: Coverity Scan
    Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
---
 util/cbfstool/cbfs-mkpayload.c | 25 ++++++++++++++++++-------
 1 file changed, 18 insertions(+), 7 deletions(-)

diff --git a/util/cbfstool/cbfs-mkpayload.c b/util/cbfstool/cbfs-mkpayload.c
index dabe322..38cc482 100644
--- a/util/cbfstool/cbfs-mkpayload.c
+++ b/util/cbfstool/cbfs-mkpayload.c
@@ -79,8 +79,9 @@ int parse_elf_to_payload(const struct buffer *input,
 	int segments = 1;
 	int isize = 0, osize = 0;
 	int doffset = 0;
-	struct cbfs_payload_segment *segs;
+	struct cbfs_payload_segment *segs = NULL;
 	int i;
+	int ret = 0;
 
 	comp_func_ptr compress = compression_function(algo);
 	if (!compress)
@@ -133,12 +134,16 @@ int parse_elf_to_payload(const struct buffer *input,
 	}
 	/* allocate the segment header array */
 	segs = calloc(segments, sizeof(*segs));
-	if (segs == NULL)
-		return -1;
+	if (segs == NULL) {
+		ret = -1;
+		goto out;
+	}
 	/* Allocate a block of memory to store the data in */
 	if (buffer_create(output, (segments * sizeof(*segs)) + isize,
-			  input->name) != 0)
-		return -1;
+			  input->name) != 0) {
+		ret = -1;
+		goto out;
+	}
 	memset(output->data, 0, output->size);
 
 	doffset = (segments * sizeof(*segs));
@@ -208,7 +213,8 @@ int parse_elf_to_payload(const struct buffer *input,
 		if (compress((char *)&header[phdr[i].p_offset],
 			     phdr[i].p_filesz, output->data + doffset, &len)) {
 			buffer_delete(output);
-			return -1;
+			ret = -1;
+			goto out;
 		}
 		segs[segments].len = len;
 
@@ -233,7 +239,12 @@ int parse_elf_to_payload(const struct buffer *input,
 
 	output->size = (segments * sizeof(*segs)) + osize;
 	xdr_segs(output, segs, segments);
-	return 0;
+
+out:
+	if (segs) free(segs);
+	if (shdr) free(shdr);
+	if (phdr) free(phdr);
+	return ret;
 }
 
 int parse_flat_binary_to_payload(const struct buffer *input,



More information about the coreboot-gerrit mailing list