Commit b8911d6c authored by Stefan Tauner's avatar Stefan Tauner
Browse files

Fix memleaks in cli_classic.c


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.

Corresponding to flashrom svn r1629.
Signed-off-by: default avatarStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
Acked-by: default avatarStefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
parent 21541a6b
......@@ -130,7 +130,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;
......@@ -217,8 +219,12 @@ int main(int argc, char *argv[])
break;
case 'i':
tempstr = strdup(optarg);
if (register_include_arg(tempstr))
if (register_include_arg(tempstr)) {
free(tempstr);
cli_classic_abort_usage();
}
/* FIXME: A pointer to the image name is saved in a static array (of size MAX_ROMLAYOUT)
* by register_include_arg() and needs to be freed after processing them. */
break;
case 'L':
if (++operation_specified > 1) {
......@@ -337,6 +343,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
......@@ -473,6 +480,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;
......@@ -517,6 +525,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 */
......
......@@ -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;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment