From: Brett Grandbois Date: Wed, 18 Apr 2018 21:55:14 +0000 (+1000) Subject: discover/syslinux-parser: clean up boot option list entries X-Git-Tag: v1.8.0~11 X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=commitdiff_plain;h=b014b38f115dcc1b47e52f8b5f9eb219f75ef071 discover/syslinux-parser: clean up boot option list entries in finalize loop or we can get duplicate boot entries as well as the memory leak Signed-off-by: Brett Grandbois Signed-off-by: Samuel Mendoza-Jonas --- diff --git a/discover/syslinux-parser.c b/discover/syslinux-parser.c index d948765..b127494 100644 --- a/discover/syslinux-parser.c +++ b/discover/syslinux-parser.c @@ -285,7 +285,7 @@ static void syslinux_process_pair(struct conf_context *conf, const char *name, c static void syslinux_finalize(struct conf_context *conf) { struct syslinux_options *state = conf->parser_info; - struct syslinux_boot_option *syslinux_opt; + struct syslinux_boot_option *syslinux_opt, *tmp; struct discover_context *dc = conf->dc; struct discover_boot_option *d_opt; bool implicit_image = true; @@ -404,9 +404,14 @@ static void syslinux_finalize(struct conf_context *conf) discover_context_add_boot_option(dc, d_opt); continue; + fail: talloc_free(d_opt); } + + list_for_each_entry_safe(&state->processed_options, syslinux_opt, tmp, list) + talloc_free(syslinux_opt); + list_init(&state->processed_options); } static int syslinux_parse(struct discover_context *dc)