libpayload: cbfs: Fix minor memory leak in some edge cases

cbfs_get_handle() allocates memory for a handle and doesn't free it if
it errors out later, leaving the memory permanently leaked. Fix.

Change-Id: Ide198105ce3ad6237672ff152b4490c768909564
Reported-by: Coverity
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://review.coreboot.org/16207
Reviewed-by: Aaron Durbin <adurbin@chromium.org>
Tested-by: build bot (Jenkins)
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Julius Werner 2016-08-12 12:50:42 -07:00
parent 1b52e2596e
commit 55ffccfbae
1 changed files with 3 additions and 0 deletions

View File

@ -148,6 +148,7 @@ struct cbfs_handle *cbfs_get_handle(struct cbfs_media *media, const char *name)
if (get_cbfs_range(&offset, &cbfs_end, media)) { if (get_cbfs_range(&offset, &cbfs_end, media)) {
ERROR("Failed to find cbfs range\n"); ERROR("Failed to find cbfs range\n");
free(handle);
return NULL; return NULL;
} }
@ -155,6 +156,7 @@ struct cbfs_handle *cbfs_get_handle(struct cbfs_media *media, const char *name)
media = &handle->media; media = &handle->media;
if (init_default_cbfs_media(media) != 0) { if (init_default_cbfs_media(media) != 0) {
ERROR("Failed to initialize default media.\n"); ERROR("Failed to initialize default media.\n");
free(handle);
return NULL; return NULL;
} }
} else { } else {
@ -215,6 +217,7 @@ struct cbfs_handle *cbfs_get_handle(struct cbfs_media *media, const char *name)
} }
media->close(media); media->close(media);
LOG("WARNING: '%s' not found.\n", name); LOG("WARNING: '%s' not found.\n", name);
free(handle);
return NULL; return NULL;
} }