Re: [PATCH v2] elf: Set this_idx to -1 for invalid relocations
Jan Beulich <[email protected]> Tue, 4 Aug 2026 12:25:57 +0200
| Newsgroups | gmane.comp.gnu.binutils |
|---|---|
| Message-ID | <[email protected]> |
On 04.08.2026 10:57, H.J. Lu wrote: > On Tue, Aug 4, 2026 at 3:42 PM Jan Beulich <[email protected]> wrote: >> >> On 04.08.2026 00:20, H.J. Lu wrote: >>> On Mon, Aug 3, 2026 at 8:51 PM Alan Modra <[email protected]> wrote: >>>> >>>> On Mon, Aug 03, 2026 at 07:58:27AM +0800, H.J. Lu wrote: >>>>> On Mon, Aug 3, 2026 at 7:43 AM Alan Modra <[email protected]> wrote: >>>>>> >>>>>> On Sun, Aug 02, 2026 at 08:55:00AM +0800, H.J. Lu wrote: >>>>>>> On Sun, Aug 2, 2026 at 6:18 AM H.J. Lu <[email protected]> wrote: >>>>>>>> >>>>>>>> When invalid relocation is reported by elf_link_read_relocs_from_section >>>>>>>> called from lang_gc_sections: >>>>>>>> >>>>>>>> ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >= 0x13) for >>>>>>>> offset 0x4 in section `.text.get_tls[get_tls]' >>>>>>>> >>>>>>>> the same error is reported again: >>>>>>>> >>>>>>>> ld: pr34448-bug_18.o: bad reloc symbol index (0xf2000005 >= 0x13) for >>>>>>>> offset 0x4 in section `.text.get_tls[get_tls]' >>>>>> >>>>>> Using this_idx as a flag is a bad idea. >>>>>> >>>>>> I also think that no one should be too concerned about error messages >>>>>> from fuzzed object files, so if you are going to fix this minor >>>>>> problem do so in a way that won't potentially break the linker. >>>>>> >>>>> >>>>> Then should linker stop when seeing a fuzzed object file, instead of keep >>>>> going and crash later? >>>> >>>> How is this relevant to a patch about duplicate error messages? >>> >>> If we don't care too much about fuzzed object files, why doesn't linker >>> stop when seeing them? >> >> How would you (non-heuristically, i.e. entirely reliably) tell a fuzzed object >> from a "real" one? >> >> Jan > > When linker reaches the following code > > if (nsyms > 0) > { > if ((size_t) r_symndx >= nsyms) > { > _bfd_error_handler > /* xgettext:c-format */ > (_("%pB: bad reloc symbol index (%#" PRIx64 " >= %#lx)" > " for offset %#" PRIx64 " in section `%pA'"), > abfd, (uint64_t) r_symndx, (unsigned long) nsyms, > (uint64_t) irela->r_offset, sec); > elf_section_data (sec)->this_idx > = ELF_SECTION_WITH_INVALID_RELOCATION; > bfd_set_error (bfd_error_bad_value); > return false; > } > } > else if (r_symndx != STN_UNDEF) > { > _bfd_error_handler > /* xgettext:c-format */ > (_("%pB: non-zero symbol index (%#" PRIx64 ")" > " for offset %#" PRIx64 " in section `%pA'" > " when the object file has no symbol table"), > abfd, (uint64_t) r_symndx, > (uint64_t) irela->r_offset, sec); > elf_section_data (sec)->this_idx > = ELF_SECTION_WITH_INVALID_RELOCATION; > bfd_set_error (bfd_error_bad_value); > return false; > } > > in elf_link_read_relocs_from_section, the input isn't a valid > ELF object file. It could be a fuzzed object. Right. And whether to continue after such an error is indeed a policy question. I'm inclined to say that upon encountering broken input, a fatal error is pretty reasonable. Jan