Frees the memory allocated for the following strings - log file name - layout file name - image file name - programmer parameter (and reset the associated global variable in flashrom.c)
Also, free the flashchip structs allocated by probe_flash.
The layout image names were not fixed due to the pending layout patches.
These bugs were found thanks to valgrind.
Signed-off-by: Stefan Tauner stefan.tauner@student.tuwien.ac.at --- cli_classic.c | 15 +++++++++++++++ flashrom.c | 1 + 2 files changed, 16 insertions(+)
diff --git a/cli_classic.c b/cli_classic.c index 58696ad..a120532 100644 --- a/cli_classic.c +++ b/cli_classic.c @@ -146,7 +146,9 @@ int main(int argc, char *argv[])
char *filename = NULL; char *layoutfile = NULL; +#ifndef STANDALONE char *logfile = NULL; +#endif /* !STANDALONE */ char *tempstr = NULL; char *pparam = NULL;
@@ -235,6 +237,8 @@ int main(int argc, char *argv[]) tempstr = strdup(optarg); if (register_include_arg(tempstr)) cli_classic_abort_usage(); + /* FIXME: The image name is saved in a static array by register_include_arg() and + * needs to be freed after processing them. */ break; case 'L': if (++operation_specified > 1) { @@ -352,6 +356,7 @@ int main(int argc, char *argv[]) cli_classic_abort_usage(); if (logfile && open_logfile(logfile)) return 1; + free(logfile); #endif /* !STANDALONE */
#if CONFIG_PRINT_WIKI == 1 @@ -478,6 +483,7 @@ int main(int argc, char *argv[]) } msg_cinfo("Please note that forced reads most likely contain garbage.\n"); ret = read_flash_to_file(&flashes[0], filename); + free(flashes[0].chip); goto out_shutdown; } ret = 1; @@ -522,6 +528,15 @@ int main(int argc, char *argv[]) out_shutdown: programmer_shutdown(); out: + for (i = 0; i < chipcount; i++) + free(flashes[i].chip); + + free(filename); + free(layoutfile); + free(pparam); + /* clean up global variables */ + free(chip_to_probe); + chip_to_probe = NULL; #ifndef STANDALONE ret |= close_logfile(); #endif /* !STANDALONE */ diff --git a/flashrom.c b/flashrom.c index fdc5412..68ed652 100644 --- a/flashrom.c +++ b/flashrom.c @@ -351,6 +351,7 @@ int programmer_shutdown(void) int i = --shutdown_fn_count; ret |= shutdown_fn[i].func(shutdown_fn[i].data); } + programmer_param = NULL; return ret; }