discover/syslinux-parser: clean up boot option list entries
authorBrett Grandbois <brett.grandbois@opengear.com>
Wed, 18 Apr 2018 21:55:14 +0000 (07:55 +1000)
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>
Thu, 19 Apr 2018 00:41:16 +0000 (10:41 +1000)
in finalize loop or we can get duplicate boot entries as well as the
memory leak

Signed-off-by: Brett Grandbois <brett.grandbois@opengear.com>
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
discover/syslinux-parser.c

index d948765bf52ab68558e827af4b933df9341ac52e..b1274942e753f4137f6ced79badab221ead1191b 100644 (file)
@@ -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)