x86: Guard against corrupted PLT
authorH.J. Lu <hjl.tools@gmail.com>
Fri, 22 Sep 2017 21:15:40 +0000 (14:15 -0700)
committerH.J. Lu <hjl.tools@gmail.com>
Fri, 22 Sep 2017 21:18:20 +0000 (14:18 -0700)
There should be only one entry in PLT for a given symbol.  Set howto to
NULL after processing a PLT entry to guard against corrupted PLT so that
the duplicated PLT entries are skipped.

PR binutils/22170
* elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Guard against
corrupted PLT.

bfd/ChangeLog
bfd/elfxx-x86.c

index 1c240793c1f123d30eec5a4c2f0fadf0bd45c02f..9b4cb08d14e8347b76386527aba23b4844123433 100644 (file)
@@ -1,3 +1,9 @@
+2017-09-22  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR binutils/22170
+       * elfxx-x86.c (_bfd_x86_elf_get_synthetic_symtab): Guard against
+       corrupted PLT.
+
 2017-09-22  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR binutils/22163
index 11883ded36cfa96720308fb455651576f2a41295..dcc393b375046a232cdb6a210291ae5ec7a38dce 100644 (file)
@@ -1962,6 +1962,10 @@ _bfd_x86_elf_get_synthetic_symtab (bfd *abfd,
                names += sizeof ("@plt");
                n++;
                s++;
+               /* There should be only one entry in PLT for a given
+                  symbol.  Set howto to NULL after processing a PLT
+                  entry to guard against corrupted PLT.  */
+               p->howto = NULL;
              }
            offset += plt_entry_size;
          }