[PATCH] PR32870: ld: arm32: fix segfault when linking with LLVMgold.so plugin under LTO

Richard Earnshaw Richard.Earnshaw@arm.com
Wed Jun 11 13:39:43 GMT 2025


On 04/06/2025 07:10, dongjianqiang (A) wrote:
> Hi Alan and Richard,
> Thank you for reviewing this, can you please help install this patch ? I am not a binutils committer.

Pushed.

Thanks for the patch,

R.
> 
>> -----Original Message-----
>> From: Alan Modra [mailto:amodra@gmail.com]
>> Sent: Wednesday, June 4, 2025 8:34 AM
>> To: Richard Earnshaw <Richard.Earnshaw@arm.com>
>> Cc: dongjianqiang (A) <dongjianqiang2@huawei.com>;
>> binutils@sourceware.org; Zhangwen(Esan)
>> <zwzhangwen.zhang@huawei.com>; Yangjian (Compiler)
>> <yangjian86@huawei.com>; sam@gentoo.org
>> Subject: Re: [PATCH] PR32870: ld: arm32: fix segfault when linking with
>> LLVMgold.so plugin under LTO
>>
>> On Tue, Jun 03, 2025 at 04:58:36PM +0100, Richard Earnshaw wrote:
>>> On 15/04/2025 10:14, dongjianqiang (A) wrote:
>>>> Hi,
>>>>
>>>> Proposed patch to PR32870.
>>>> When handling the iplt in ARM32, the ld must check whether the
>> input_bfd
>>>> is in ELF format. If the input is an LLVM Bitcode file, an error will be raised.
>>>>
>>>> Any suggestions? Thanks.
>>>>
>>>> ---
>>>> 	PR 32870
>>>> 	* elf32-arm.c (elf32_arm_output_arch_local_syms): Check input_bfd
>>>>
>>>> diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
>>>> index 3b7cee3de1c..3af964ce034 100644
>>>> --- a/bfd/elf32-arm.c
>>>> +++ b/bfd/elf32-arm.c
>>>> @@ -18345,6 +18345,9 @@ elf32_arm_output_arch_local_syms (bfd
>> *output_bfd,
>>>>    	  struct arm_local_iplt_info **local_iplt;
>>>>    	  unsigned int i, num_syms;
>>>> +	  if (!is_arm_elf (input_bfd))
>>>> +	    continue;
>>>> +
>>>>    	  local_iplt = elf32_arm_local_iplt (input_bfd);
>>>>    	  if (local_iplt != NULL)
>>>>    	    {
>>>
>>> I'd like Alan's opinion on this one.  To me it's strange that something that
>>> is not remotely like a object file is still in the list of input BFDs at
>>> this point.  This feels like it might be yet another rich source of fuzzing
>>> bugs.
>>
>> The patch is OK.
>>
>> GNU ld can link foreign object files, if they have no relocations or
>> the relocs are simple enough and the target support for that object
>> properly describes them in reloc howtos.
>>
>>> If keeping this in the bfd list is correct, then I think a better fix would
>>> be to refuse to create a local iplt for this bfd; then we'll simply skip the
>>> following code because elf32_arm_local_iplt will simply return NULL.
>>
>> Well, as things stand you need to check the input bfd is the correct
>> type and thus has elf_arm_obj_tdata before even accessing
>> elf32_arm_local_iplt.
>>
>> --
>> Alan Modra



More information about the Binutils mailing list