Am 14.09.2012 00:38 schrieb Stefan Tauner:
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@student.tuwien.ac.at
Good find, especially the puts() which had crept in there. Acked-by: Carl-Daniel Hailfinger c-d.hailfinger.devel.2006@gmx.net with a small comment.
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]);
libflashrom allows calling programmer_init() and programmer_shutdown() again after one flashrom run. For that case, we want the second run to have zeroed dmistrings[i]. Please insert 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]);
Regards, Carl-Daniel