[PATCH v5 09/10] tools: spkgimage: add Renesas SPKG format

Marek Vasut marek.vasut at mailbox.org
Tue May 9 04:25:06 CEST 2023


On 5/8/23 19:50, Ralph Siemsen wrote:
> On Sun, May 07, 2023 at 06:08:33PM +0200, Marek Vasut wrote:
>> [...]
>>
>>> +static int spkgimage_parse_config_file(char *filename)
>>> +{
>>> +    FILE *fcfg;
>>> +    char line[256];
>>> +    size_t line_num = 0;
>>> +
>>> +    fcfg = fopen(filename, "r");
>>> +    if (!fcfg)
>>> +        return -EINVAL;
>>> +
>>> +    conf = calloc(1, sizeof(struct config_file));
>>> +    if (!conf)
>>> +        return -ENOMEM;
>>> +
>>> +    while (fgets(line, sizeof(line), fcfg)) {
>>> +        line_num += 1;
>>> +
>>> +        /* Skip blank lines and comments */
>>> +        if (line[0] == '\n' || line[0] == '#')
>>> +            continue;
>>> +
>>> +        /* Strip any trailing newline */
>>> +        line[strcspn(line, "\n")] = 0;
>>> +
>>> +        /* Parse the line */
>>> +        if (spkgimage_parse_config_line(line, line_num))
>>> +            return -EINVAL;
>>
>> Wouldn't this return -EINVAL; leak memory allocated by the calloc() 
>> above?
> 
> You are correct. But note that in the normal (non-error) code path, the 
> structure remains allocated as well, and there is no good place to 
> free() it, given the available callbacks in struct image_type_params.
> 
> So I am relying on the OS to free all memory upon program exit, both in 
> the error and non-error case. I would think this is reasonable for a 
> small one-shot utility program, keeps things simple.
> 
> If this is not acceptable, I can rework it, but there are quite a few 
> other spots which would also need to free resources before bailing out.

The usual fail path handling like:

"
if (there is an error)
   goto exit;
...

exit:
  free(data);
  return ret;
"

does not work here ?


More information about the U-Boot mailing list