[flashrom] [commit] r1629 - trunk

repository service svn at flashrom.org
Wed Dec 26 08:55:01 CET 2012


Author: stefanct
Date: Wed Dec 26 08:55:00 2012
New Revision: 1629
URL: http://flashrom.org/trac/flashrom/changeset/1629

Log:
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.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
Acked-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>

Modified:
   trunk/cli_classic.c
   trunk/flashrom.c

Modified: trunk/cli_classic.c
==============================================================================
--- trunk/cli_classic.c	Mon Dec 24 23:07:36 2012	(r1628)
+++ trunk/cli_classic.c	Wed Dec 26 08:55:00 2012	(r1629)
@@ -130,7 +130,9 @@
 
 	char *filename = NULL;
 	char *layoutfile = NULL;
+#ifndef STANDALONE
 	char *logfile = NULL;
+#endif /* !STANDALONE */
 	char *tempstr = NULL;
 	char *pparam = NULL;
 
@@ -217,8 +219,12 @@
 			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 @@
 		cli_classic_abort_usage();
 	if (logfile && open_logfile(logfile))
 		return 1;
+	free(logfile);
 #endif /* !STANDALONE */
 
 #if CONFIG_PRINT_WIKI == 1
@@ -473,6 +480,7 @@
 			}
 			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 @@
 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 */

Modified: trunk/flashrom.c
==============================================================================
--- trunk/flashrom.c	Mon Dec 24 23:07:36 2012	(r1628)
+++ trunk/flashrom.c	Wed Dec 26 08:55:00 2012	(r1629)
@@ -351,6 +351,7 @@
 		int i = --shutdown_fn_count;
 		ret |= shutdown_fn[i].func(shutdown_fn[i].data);
 	}
+	programmer_param = NULL;
 	return ret;
 }
 




More information about the flashrom mailing list