summaryrefslogtreecommitdiff
path: root/util/cbfstool/cbfs_image.c
diff options
context:
space:
mode:
authorPatrick Georgi <pgeorgi@chromium.org>2017-01-13 13:30:54 +0100
committerNico Huber <nico.h@gmx.de>2017-03-20 20:05:09 +0100
commitdce629b2f8260010a06ea5a9bd31f5c65f483f3d (patch)
treee115338fc2b00d1c9820414afd33e2bb8608fd34 /util/cbfstool/cbfs_image.c
parent1dfc0a64d42cc9052f5140cfa481ec0380971eef (diff)
downloadcoreboot-dce629b2f8260010a06ea5a9bd31f5c65f483f3d.tar.xz
util/cbfstool: avoid memleaks and off-by-ones
Change-Id: Iac136a5dfe76f21aa7c0d5ee4e974e50b955403b Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Found-by: scan-build 3.8 Reviewed-on: https://review.coreboot.org/18134 Tested-by: build bot (Jenkins) Reviewed-by: Nico Huber <nico.h@gmx.de>
Diffstat (limited to 'util/cbfstool/cbfs_image.c')
-rw-r--r--util/cbfstool/cbfs_image.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/util/cbfstool/cbfs_image.c b/util/cbfstool/cbfs_image.c
index e530224fac..1f4b49a48d 100644
--- a/util/cbfstool/cbfs_image.c
+++ b/util/cbfstool/cbfs_image.c
@@ -1150,13 +1150,22 @@ static int cbfs_payload_make_elf(struct buffer *buff, uint32_t arch)
segs[i].len);
} else if (segs[i].type == PAYLOAD_SEGMENT_ENTRY) {
break;
+ } else {
+ ERROR("unknown ELF segment type\n");
+ goto out;
}
+ if (!name) {
+ ERROR("out of memory\n");
+ goto out;
+ }
if (elf_writer_add_section(ew, &shdr, &tbuff, name)) {
ERROR("Unable to add ELF section: %s\n", name);
+ free(name);
goto out;
}
+ free(name);
if (empty_sz != 0) {
struct buffer b;
@@ -1168,10 +1177,16 @@ static int cbfs_payload_make_elf(struct buffer *buff, uint32_t arch)
shdr.sh_addr = segs[i].load_addr + segs[i].len;
shdr.sh_size = empty_sz;
name = strdup(".empty");
+ if (!name) {
+ ERROR("out of memory\n");
+ goto out;
+ }
if (elf_writer_add_section(ew, &shdr, &b, name)) {
ERROR("Unable to add ELF section: %s\n", name);
+ free(name);
goto out;
}
+ free(name);
}
}