[flashrom] [PATCH 1/3] Fix memleaks in dmi.c.
Carl-Daniel Hailfinger
c-d.hailfinger.devel.2006 at gmx.net
Sun Sep 23 01:30:50 CEST 2012
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 <stefan.tauner at student.tuwien.ac.at>
Good find, especially the puts() which had crept in there.
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
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/
More information about the flashrom
mailing list