summaryrefslogtreecommitdiff
path: root/dmi.c
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 /dmi.c
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
Diffstat (limited to 'dmi.c')
-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]);