Am 14.09.2012 00:38 schrieb Stefan Tauner: > 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]>
Good find, especially the puts() which had crept in there. Acked-by: Carl-Daniel Hailfinger <[email protected]> with a small comment. > 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]); libflashrom allows calling programmer_init() and programmer_shutdown() again after one flashrom run. For that case, we want the second run to have zeroed dmistrings[i]. Please insert 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]); Regards, Carl-Daniel -- http://www.hailfinger.org/ _______________________________________________ flashrom mailing list [email protected] http://www.flashrom.org/mailman/listinfo/flashrom
