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 <[email protected]>
---
 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


_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom

Reply via email to