PE linker segmentation fault with MALLOC_PERTURB_=1
authorAlan Modra <amodra@gmail.com>
Tue, 28 May 2019 10:42:32 +0000 (20:12 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 28 May 2019 11:17:14 +0000 (20:47 +0930)
PR 24596
* emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Check that
the output is coff before accessing coff tdata.
* emultempl/pep.em (gld_${EMULATION_NAME}_after_open): Likewise.

ld/ChangeLog
ld/emultempl/pe.em
ld/emultempl/pep.em

index 581be2e..52d89ec 100644 (file)
@@ -1,3 +1,10 @@
+2019-05-28  Alan Modra  <amodra@gmail.com>
+
+       PR 24596
+       * emultempl/pe.em (gld_${EMULATION_NAME}_after_open): Check that
+       the output is coff before accessing coff tdata.
+       * emultempl/pep.em (gld_${EMULATION_NAME}_after_open): Likewise.
+
 2019-05-28  Szabolcs Nagy  <szabolcs.nagy@arm.com>
 
        * testsuite/ld-aarch64/variant_pcs-now.d: Use --hash-style=sysv.
index 10bacbc..218f98a 100644 (file)
@@ -1360,7 +1360,8 @@ gld_${EMULATION_NAME}_after_open (void)
      FIXME: This should be done via a function, rather than by
      including an internal BFD header.  */
 
-  if (coff_data (link_info.output_bfd) == NULL
+  if (bfd_get_flavour (link_info.output_bfd) != bfd_target_coff_flavour
+      || coff_data (link_info.output_bfd) == NULL
       || coff_data (link_info.output_bfd)->pe == 0)
     einfo (_("%F%P: cannot perform PE operations on non PE output file '%pB'\n"),
           link_info.output_bfd);
index c0070c0..649efaf 100644 (file)
@@ -1348,7 +1348,8 @@ gld_${EMULATION_NAME}_after_open (void)
      FIXME: This should be done via a function, rather than by
      including an internal BFD header.  */
 
-  if (coff_data (link_info.output_bfd) == NULL
+  if (bfd_get_flavour (link_info.output_bfd) != bfd_target_coff_flavour
+      || coff_data (link_info.output_bfd) == NULL
       || coff_data (link_info.output_bfd)->pe == 0)
     einfo (_("%F%P: cannot perform PE operations on non PE output file '%pB'\n"),
           link_info.output_bfd);