Signed-off-by: Sascha Hauer <s.hauer@xxxxxxxxxxxxxx> --- commands/bootm.c | 19 +++++++++++-------- common/image.c | 1 + 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/commands/bootm.c b/commands/bootm.c index 316ed1f..c62df4f 100644 --- a/commands/bootm.c +++ b/commands/bootm.c @@ -145,10 +145,11 @@ static int do_bootm(struct command *cmdtp, int argc, char *argv[]) { int opt; image_header_t *os_header; - struct image_handle *os_handle, *initrd_handle = NULL; + struct image_handle *os_handle = NULL; struct image_handler *handler; struct image_data data; u32 initrd_start; + int ret = 1; memset(&data, 0, sizeof(struct image_data)); data.verify = 1; @@ -178,19 +179,21 @@ static int do_bootm(struct command *cmdtp, int argc, char *argv[]) data.initrd = map_image(optarg, data.verify); } if (!data.initrd) - return -1; + goto err_out; break; default: break; } } - if (optind == argc) - return COMMAND_ERROR_USAGE; + if (optind == argc) { + ret = COMMAND_ERROR_USAGE; + goto err_out; + } os_handle = map_image(argv[optind], data.verify); if (!os_handle) - return 1; + goto err_out; data.os = os_handle; os_header = &os_handle->header; @@ -224,9 +227,9 @@ static int do_bootm(struct command *cmdtp, int argc, char *argv[]) err_out: if (os_handle) unmap_image(os_handle); - if (initrd_handle) - unmap_image(initrd_handle); - return 1; + if (data.initrd) + unmap_image(data.initrd); + return ret; } BAREBOX_CMD_HELP_START(bootm) diff --git a/common/image.c b/common/image.c index 939fe4b..d68889b 100644 --- a/common/image.c +++ b/common/image.c @@ -404,6 +404,7 @@ err_out: close(fd); if (handle->flags & IH_MALLOC) free(handle->data); + free(handle->data_entries); free(handle); return NULL; } -- 1.7.7.1 _______________________________________________ barebox mailing list barebox@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/barebox