mirror of
https://review.coreboot.org/flashrom.git
synced 2025-07-01 22:21:16 +02:00
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: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at> Acked-by: Stefan Tauner <stefan.tauner@alumni.tuwien.ac.at>
This commit is contained in:
@ -130,7 +130,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
char *filename = NULL;
|
char *filename = NULL;
|
||||||
char *layoutfile = NULL;
|
char *layoutfile = NULL;
|
||||||
|
#ifndef STANDALONE
|
||||||
char *logfile = NULL;
|
char *logfile = NULL;
|
||||||
|
#endif /* !STANDALONE */
|
||||||
char *tempstr = NULL;
|
char *tempstr = NULL;
|
||||||
char *pparam = NULL;
|
char *pparam = NULL;
|
||||||
|
|
||||||
@ -217,8 +219,12 @@ int main(int argc, char *argv[])
|
|||||||
break;
|
break;
|
||||||
case 'i':
|
case 'i':
|
||||||
tempstr = strdup(optarg);
|
tempstr = strdup(optarg);
|
||||||
if (register_include_arg(tempstr))
|
if (register_include_arg(tempstr)) {
|
||||||
|
free(tempstr);
|
||||||
cli_classic_abort_usage();
|
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;
|
break;
|
||||||
case 'L':
|
case 'L':
|
||||||
if (++operation_specified > 1) {
|
if (++operation_specified > 1) {
|
||||||
@ -337,6 +343,7 @@ int main(int argc, char *argv[])
|
|||||||
cli_classic_abort_usage();
|
cli_classic_abort_usage();
|
||||||
if (logfile && open_logfile(logfile))
|
if (logfile && open_logfile(logfile))
|
||||||
return 1;
|
return 1;
|
||||||
|
free(logfile);
|
||||||
#endif /* !STANDALONE */
|
#endif /* !STANDALONE */
|
||||||
|
|
||||||
#if CONFIG_PRINT_WIKI == 1
|
#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");
|
msg_cinfo("Please note that forced reads most likely contain garbage.\n");
|
||||||
ret = read_flash_to_file(&flashes[0], filename);
|
ret = read_flash_to_file(&flashes[0], filename);
|
||||||
|
free(flashes[0].chip);
|
||||||
goto out_shutdown;
|
goto out_shutdown;
|
||||||
}
|
}
|
||||||
ret = 1;
|
ret = 1;
|
||||||
@ -517,6 +525,15 @@ int main(int argc, char *argv[])
|
|||||||
out_shutdown:
|
out_shutdown:
|
||||||
programmer_shutdown();
|
programmer_shutdown();
|
||||||
out:
|
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
|
#ifndef STANDALONE
|
||||||
ret |= close_logfile();
|
ret |= close_logfile();
|
||||||
#endif /* !STANDALONE */
|
#endif /* !STANDALONE */
|
||||||
|
@ -351,6 +351,7 @@ int programmer_shutdown(void)
|
|||||||
int i = --shutdown_fn_count;
|
int i = --shutdown_fn_count;
|
||||||
ret |= shutdown_fn[i].func(shutdown_fn[i].data);
|
ret |= shutdown_fn[i].func(shutdown_fn[i].data);
|
||||||
}
|
}
|
||||||
|
programmer_param = NULL;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user