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

Reply via email to