[PATCH v1 4/7] bfd: fix memory leak when default-initializing an OAv2 attribute

Jan Beulich jbeulich@suse.com
Thu Feb 5 15:39:17 GMT 2026


On 05.02.2026 16:18, Matthieu Longo wrote:
> New version using oav2_assign_value().

Just one question:

> --- a/bfd/elf-attrs.c
> +++ b/bfd/elf-attrs.c
> @@ -1083,33 +1083,30 @@ oav2_attr_overwrite_with_default (const struct bfd_link_info *info,
>   {
>     const struct elf_backend_data *bed = get_elf_backend_data (info->output_bfd);
> 
> +  union obj_attr_value_v2 default_value;
> +  memset (&default_value, 0, sizeof (default_value));

Why not via an initializer?

Jan

>     const obj_attr_info_t *attr_info
>       = _bfd_obj_attr_v2_find_known_by_tag (bed, subsec->name, attr->tag);
>     if (attr_info == NULL)
>       {
>         attr->status = obj_attr_v2_unknown;
> -      if (subsec->encoding == OA_ENC_ULEB128)
> -       attr->val.uint = 0;
> -      else
> -       attr->val.string = NULL;
> +      oav2_assign_value (subsec->encoding, attr, default_value);
>         return;
>       }
> 
>     if (bed->obj_attr_v2_default_value != NULL
>         && bed->obj_attr_v2_default_value (info, attr_info, subsec, attr))
> -    {}
> -  else if (subsec->encoding == OA_ENC_NTBS)
> +    return;
> +
> +  if (subsec->encoding == OA_ENC_NTBS)
>       {
> -      if (attr->val.string != NULL)
> -       {
> -         free ((void *) attr->val.string);
> -         attr->val.string = NULL;
> -       }
>         if (attr_info->default_value.string != NULL)
> -       attr->val.string = xstrdup (attr_info->default_value.string);
> +       default_value.string = xstrdup (attr_info->default_value.string);
>       }
>     else
> -    attr->val.uint = attr_info->default_value.uint;
> +    default_value.uint = attr_info->default_value.uint;
> +  oav2_assign_value (subsec->encoding, attr, default_value);
>   }
> 
>   /* Create a new attribute with the same key (=tag) as ATTR, and initialized with



More information about the Binutils mailing list