libpayload: cbfs: Fix minor memory leak in some edge cases
authorJulius Werner <jwerner@chromium.org>
Fri, 12 Aug 2016 19:50:42 +0000 (12:50 -0700)
committerJulius Werner <jwerner@chromium.org>
Fri, 12 Aug 2016 20:52:22 +0000 (22:52 +0200)
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>
payloads/libpayload/libcbfs/cbfs_core.c

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