Author: stefanct Date: Sun Sep 23 14:14:28 2012 New Revision: 1604 URL: http://flashrom.org/trac/flashrom/changeset/1604
Log: 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
Modified: trunk/dmi.c
Modified: trunk/dmi.c ============================================================================== --- trunk/dmi.c Sun Sep 23 00:56:09 2012 (r1603) +++ trunk/dmi.c Sun Sep 23 14:14:28 2012 (r1604) @@ -144,16 +144,29 @@
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]);