From: Jim Wilson Date: Thu, 21 Mar 2019 22:08:48 +0000 (-0700) Subject: RISC-V: Fix linker crash in section symbol check. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a9f5a5517fb7df640f0fcd4cb0f9961818b6505b;p=binutils-gdb.git RISC-V: Fix linker crash in section symbol check. sym is only set for local symbols. h is only set for global symbols. Gas won't let me create a global section symbol, but bfd appears to have some support for that, and I can't rule out that other assemblers might do this. So we need to support both, and verify sym and h are non-NULL before using. bfd/ PR 24365 * elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check, verify sym non-NULL before using. Add identical check using h. --- diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 31ffadf24f5..1225e3cad8f 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2019-03-21 Jim Wilson + + PR 24365 + * elfnn-riscv.c (riscv_elf_relocate_section): For STT_SECTION check, + verify sym non-NULL before using. Add identical check using h. + 2019-03-21 Sudakshina Das * elf-bfd.h (struct elf_backend_data): Add argument to diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 0a0ceb79306..bb114e59c76 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -2059,7 +2059,9 @@ riscv_elf_relocate_section (bfd *output_bfd, all relocs to update these addends. This is also ambiguous, as we do allow offsets to be added to the target address, which are not to be used to find the auipc address. */ - if ((ELF_ST_TYPE (sym->st_info) == STT_SECTION) && rel->r_addend) + if (((sym != NULL && (ELF_ST_TYPE (sym->st_info) == STT_SECTION)) + || (h != NULL && h->type == STT_SECTION)) + && rel->r_addend) { r = bfd_reloc_dangerous; break;