[flashrom] [PATCH 1/3] Fix memleaks in dmi.c.

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Fri Sep 14 00:38:07 CEST 2012


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.

This bug was found thanks to valgrind.

Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
---
 dmi.c |   14 +++++++++++++-
 1 file changed, 13 insertions(+), 1 deletion(-)

diff --git a/dmi.c b/dmi.c
index dfc78e9..fd260a6 100644
--- a/dmi.c
+++ b/dmi.c
@@ -144,16 +144,28 @@ static char *get_dmi_string(const char *string_name)
 
 	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]);
+	}
+	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]);
-- 
Kind regards, Stefan Tauner





More information about the flashrom mailing list