summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2012-09-23 12:14:28 +0000
committerstefanct <stefanct@2b7e53f0-3cfb-0310-b3e9-8179ed1497e1>2012-09-23 12:14:28 +0000
commitfaffbaf71dbcb787d39f95fd0317c2e79117c75e (patch)
tree42f8ce222cd6f6607d0b1e12bb65ea11532b7d32
parentdd75e7651000321a753539c364ee74ce0e3c5b28 (diff)
downloadflashrom-faffbaf71dbcb787d39f95fd0317c2e79117c75e.tar.gz
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@student.tuwien.ac.at> Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006@gmx.net> git-svn-id: https://code.coreboot.org/svn/flashrom/trunk@1604 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
-rw-r--r--dmi.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/dmi.c b/dmi.c
index dfc78e9..a6e2146 100644
--- a/dmi.c
+++ b/dmi.c
@@ -144,16 +144,29 @@ 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]);
+ 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]);