PR24041, Invalid Memory Address Dereference in elf_link_add_object_symbols
authorAlan Modra <amodra@gmail.com>
Mon, 31 Dec 2018 05:10:08 +0000 (15:40 +1030)
committerAlan Modra <amodra@gmail.com>
Mon, 31 Dec 2018 05:27:39 +0000 (15:57 +1030)
PR 24041
* elflink.c (elf_link_add_object_symbols): Don't segfault on
crafted ET_DYN with no program headers.

bfd/ChangeLog
bfd/elflink.c

index fbdd0c25b60f60db25bda6dc77fed6a23e3d1aab..370466f13750bcaa4fd52e43918216b7e32c9f45 100644 (file)
@@ -1,3 +1,9 @@
+2018-12-31  Alan Modra  <amodra@gmail.com>
+
+       PR 24041
+       * elflink.c (elf_link_add_object_symbols): Don't segfault on
+       crafted ET_DYN with no program headers.
+
 2018-12-31  Alan Modra  <amodra@gmail.com>
 
        * elf64-ppc.c (ppc64_elf_relocate_section <tls_ldgd_opt>): When
index f5b411bd6285671033c71b35fa17b6c33d7168e8..6e421fb6cdcd8e3ec15728cd91b35b2a505f5da4 100644 (file)
@@ -4186,7 +4186,7 @@ error_free_dyn:
         all sections contained fully therein.  This makes relro
         shared library sections appear as they will at run-time.  */
       phdr = elf_tdata (abfd)->phdr + elf_elfheader (abfd)->e_phnum;
-      while (--phdr >= elf_tdata (abfd)->phdr)
+      while (phdr-- > elf_tdata (abfd)->phdr)
        if (phdr->p_type == PT_GNU_RELRO)
          {
            for (s = abfd->sections; s != NULL; s = s->next)