In case of a failure in one of the cdev_* functions original version of bootstrap_read_devfs would not release memory allocated for barebox header or memory allocated for the image. This commit fixes this by adding resource deallocation code.
Signed-off-by: Andrey Smirnov <andrew.smir...@gmail.com> --- lib/bootstrap/devfs.c | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/lib/bootstrap/devfs.c b/lib/bootstrap/devfs.c index 4176819..f7f91d6 100644 --- a/lib/bootstrap/devfs.c +++ b/lib/bootstrap/devfs.c @@ -81,7 +81,7 @@ void* bootstrap_read_devfs(char *devname, bool use_bb, int offset, { int ret; int size = 0; - void *to, *header; + void *to, *header, *result = NULL; struct cdev *cdev, partition; char *partname = "x"; @@ -116,16 +116,21 @@ void* bootstrap_read_devfs(char *devname, bool use_bb, int offset, cdev = cdev_open(partname, O_RDONLY); if (!cdev) { bootstrap_err("%s: failed to open %s\n", devname, partname); - return NULL; + goto free_memory; } ret = cdev_read(cdev, to, size, 0, 0); cdev_close(cdev); - if (ret != size) { + if (ret != size) bootstrap_err("%s: failed to read from %s\n", devname, partname); - return NULL; - } + else + result = to; + +free_memory: + free(header); + if (!result) + free(to); - return to; + return result; } -- 2.1.4 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox