[PATCH 1/4] elf: Disallow the empty symbol name

Jan Beulich jbeulich@suse.com
Thu Sep 25 06:03:31 GMT 2025


On 25.09.2025 03:22, Alan Modra wrote:
> On Wed, Sep 24, 2025 at 04:21:33AM +0800, H.J. Lu wrote:
>> On Tue, Sep 23, 2025 at 10:34 PM Jan Beulich <jbeulich@suse.com> wrote:
>>>
>>> On 23.09.2025 13:20, Alan Modra wrote:
>>>> On Tue, Sep 23, 2025 at 10:15:51AM +0800, H.J. Lu wrote:
>>>>> Reject the empty symbol name, "".
>>>>>
>>>>> PR ld/33456
>>>>> * elflink.c (elf_link_add_object_symbols): Disallow the empty
>>>>> symbol name.
>>>>
>>>> OK.
>>>
>>> Where exactly is it stated that zero-length symbols aren't allowed?
>>> gas allows me to make such a symbol. It isn't consistent though: It
>>> doesn't allow me to make such a symbol global, for example. Imo as
>>> long as such symbols aren't forbidden, this should be at most a
>>> warning.
>>
>> name here is a global symbol, which can't be an empty string.

Why? Where's this stated?

>> I will update my commit message with
>>
>> elf: Disallow the empty global symbol name
>>
>> Reject the empty global symbol name, "".
>>
>>         PR ld/33456
>>         * elflink.c (elf_link_add_object_symbols): Disallow the empty
>>         global symbol name.
> 
> This needs tweaking.  When I gave the OK for this patch, I'd seen that
> you were changing global syms (locals can have empty names of course),
> and thought that a global sym with name "" was useless:  We match
> symbols by name when linking, obviously.

Yes, yet still: A single such symbol could exist in the name space. Unless
I've overlooked something in the spec.

Jan

>  The problem is that STT_LOOS
> thru STT_HIPROC symbol types might reasonably have empty names.
> 
> I'll commit the following after running another testsuite run.  It
> fixes
> sparc64-linux-gnu  +FAIL: selective2
> sparc64-linux-gnu  +FAIL: selective3
> 
> 	PR ld/33456
> 	* elflink.c (elf_link_add_object_symbols): Move new check later
> 	to give the backend add_symbol_hook a chance to remove symbols
> 	with empty names.
> 
> diff --git a/bfd/elflink.c b/bfd/elflink.c
> index 0a0456177c2..5c8b822e36a 100644
> --- a/bfd/elflink.c
> +++ b/bfd/elflink.c
> @@ -5096,13 +5096,6 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
>        if (name == NULL)
>  	goto error_free_vers;
>  
> -      if (name[0] == '\0')
> -	{
> -	  _bfd_error_handler (_("%pB: corrupt symbol table"), abfd);
> -	  bfd_set_error (bfd_error_bad_value);
> -	  goto error_free_vers;
> -	}
> -
>        if (isym->st_shndx == SHN_COMMON
>  	  && (abfd->flags & BFD_PLUGIN) != 0)
>  	{
> @@ -5146,6 +5139,13 @@ elf_link_add_object_symbols (bfd *abfd, struct bfd_link_info *info)
>  	    continue;
>  	}
>  
> +      if (name[0] == '\0')
> +	{
> +	  _bfd_error_handler (_("%pB: corrupt symbol table"), abfd);
> +	  bfd_set_error (bfd_error_bad_value);
> +	  goto error_free_vers;
> +	}
> +
>        /* Sanity check that all possibilities were handled.  */
>        if (sec == NULL)
>  	abort ();
> 
> 



More information about the Binutils mailing list