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
