[flashrom] [commit] r1604 - trunk

repository service svn at flashrom.org
Sun Sep 23 14:14:29 CEST 2012


Author: stefanct
Date: Sun Sep 23 14:14:28 2012
New Revision: 1604
URL: http://flashrom.org/trac/flashrom/changeset/1604

Log:
Fix memleaks in dmi.c.

In dmi_init() we populate static char *dmistrings[] with values that get
later compared in dmi_match(). Those strings are actually strduped in
get_dmi_string() and hence need to be freed later. This patch accomplishes
this by registering another shutdown method. Also, the tangling pointers are
nulled when the memories are freed.

This bug was found thanks to valgrind.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Modified:
   trunk/dmi.c

Modified: trunk/dmi.c
==============================================================================
--- trunk/dmi.c	Sun Sep 23 00:56:09 2012	(r1603)
+++ trunk/dmi.c	Sun Sep 23 14:14:28 2012	(r1604)
@@ -144,16 +144,29 @@
 
 	result = strdup(answerbuf);
 	if (!result)
-		puts("WARNING: Out of memory - DMI support fails");
+		msg_perr("WARNING: Out of memory - DMI support fails");
 
 	return result;
 }
 
+static int dmi_shutdown(void *data)
+{
+	int i;
+	for (i = 0; i < ARRAY_SIZE(dmistrings); i++) {
+		free(dmistrings[i]);
+		dmistrings[i] = NULL;
+	}
+	return 0;
+}
+
 void dmi_init(void)
 {
 	int i;
 	char *chassis_type;
 
+	if (register_shutdown(dmi_shutdown, NULL))
+		return;
+
 	has_dmi_support = 1;
 	for (i = 0; i < ARRAY_SIZE(dmidecode_names); i++) {
 		dmistrings[i] = get_dmi_string(dmidecode_names[i]);




More information about the flashrom mailing list