[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