libpayload: fix leak in libcbfs

stage wasn't freed on errors.

Change-Id: I10d2f42f3e484955619addbef2898981f6f90a35
Signed-off-by: Patrick Georgi <pgeorgi@chromium.org>
Found-by: Coverity Scan #1347345
Reviewed-on: https://review.coreboot.org/15958
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Reviewed-by: Duncan Laurie <dlaurie@chromium.org>
This commit is contained in:
Patrick Georgi 2016-07-29 16:36:23 +02:00 committed by Martin Roth
parent 41b3196bc8
commit 33ab4fea23
1 changed files with 5 additions and 2 deletions

View File

@ -116,8 +116,10 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name)
sizeof(struct cbfs_stage), sizeof(struct cbfs_stage),
(void *) (uintptr_t) stage->load, (void *) (uintptr_t) stage->load,
stage->len); stage->len);
if (!final_size) if (!final_size) {
return (void *) -1; entry = -1;
goto out;
}
memset((void *)((uintptr_t)stage->load + final_size), 0, memset((void *)((uintptr_t)stage->load + final_size), 0,
stage->memlen - final_size); stage->memlen - final_size);
@ -127,6 +129,7 @@ void * cbfs_load_stage(struct cbfs_media *media, const char *name)
entry = stage->entry; entry = stage->entry;
// entry = ntohll(stage->entry); // entry = ntohll(stage->entry);
out:
free(stage); free(stage);
return (void *) entry; return (void *) entry;
} }