cbfstool: free memory
Change-Id: Ic53127a61154460fa3741a92a3b2de0eba446e9f Found-by: Coverity Scan Signed-off-by: Patrick Georgi <patrick@georgi-clan.de> Reviewed-on: http://review.coreboot.org/6987 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
This commit is contained in:
parent
747c07f08a
commit
96990a285d
|
@ -79,8 +79,9 @@ int parse_elf_to_payload(const struct buffer *input,
|
||||||
int segments = 1;
|
int segments = 1;
|
||||||
int isize = 0, osize = 0;
|
int isize = 0, osize = 0;
|
||||||
int doffset = 0;
|
int doffset = 0;
|
||||||
struct cbfs_payload_segment *segs;
|
struct cbfs_payload_segment *segs = NULL;
|
||||||
int i;
|
int i;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
comp_func_ptr compress = compression_function(algo);
|
comp_func_ptr compress = compression_function(algo);
|
||||||
if (!compress)
|
if (!compress)
|
||||||
|
@ -133,12 +134,16 @@ int parse_elf_to_payload(const struct buffer *input,
|
||||||
}
|
}
|
||||||
/* allocate the segment header array */
|
/* allocate the segment header array */
|
||||||
segs = calloc(segments, sizeof(*segs));
|
segs = calloc(segments, sizeof(*segs));
|
||||||
if (segs == NULL)
|
if (segs == NULL) {
|
||||||
return -1;
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
/* Allocate a block of memory to store the data in */
|
/* Allocate a block of memory to store the data in */
|
||||||
if (buffer_create(output, (segments * sizeof(*segs)) + isize,
|
if (buffer_create(output, (segments * sizeof(*segs)) + isize,
|
||||||
input->name) != 0)
|
input->name) != 0) {
|
||||||
return -1;
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
memset(output->data, 0, output->size);
|
memset(output->data, 0, output->size);
|
||||||
|
|
||||||
doffset = (segments * sizeof(*segs));
|
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],
|
if (compress((char *)&header[phdr[i].p_offset],
|
||||||
phdr[i].p_filesz, output->data + doffset, &len)) {
|
phdr[i].p_filesz, output->data + doffset, &len)) {
|
||||||
buffer_delete(output);
|
buffer_delete(output);
|
||||||
return -1;
|
ret = -1;
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
segs[segments].len = len;
|
segs[segments].len = len;
|
||||||
|
|
||||||
|
@ -233,7 +239,12 @@ int parse_elf_to_payload(const struct buffer *input,
|
||||||
|
|
||||||
output->size = (segments * sizeof(*segs)) + osize;
|
output->size = (segments * sizeof(*segs)) + osize;
|
||||||
xdr_segs(output, segs, segments);
|
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,
|
int parse_flat_binary_to_payload(const struct buffer *input,
|
||||||
|
|
Loading…
Reference in New Issue