x86 synthetic plt symbols

Changing "pushq $1" in the following to "pushq $too_big" results in an
abort.  BFD shouldn't abort on (deliberately) bad user input.

 400480:       ff 25 9a 0b 20 00       jmpq   *0x200b9a(%rip)
 400486:       68 01 00 00 00          pushq  $0x1
 40048b:       e9 d0 ff ff ff          jmpq   400460 <_init+0x20>

	* elf64-x86-64.c (elf_x86_64_get_plt_sym_val): Don't abort on
	an out of range reloc_index.
	* elf32-i386.c (elf_i386_get_plt_sym_val): Likewise.
This commit is contained in:
Alan Modra 2016-02-01 21:27:02 +10:30
parent d8c823c8b6
commit ec1f73bb0b
3 changed files with 21 additions and 14 deletions

View file

@ -1,3 +1,9 @@
2016-02-01 Alan Modra <amodra@gmail.com>
* elf64-x86-64.c (elf_x86_64_get_plt_sym_val): Don't abort on
an out of range reloc_index.
* elf32-i386.c (elf_i386_get_plt_sym_val): Likewise.
2016-02-01 Kamil Rytarowski <n54@gmx.com>
* Makefile.am (OPTIONAL_BACKENDS): Add netbsd-core.lo.

View file

@ -5684,9 +5684,9 @@ bad_return:
reloc_index = H_GET_32 (abfd, (plt_contents + plt_offset
+ bed->plt->plt_reloc_offset));
reloc_index /= sizeof (Elf32_External_Rel);
if (reloc_index >= count)
abort ();
if (reloc_index < count)
plt_sym_val[reloc_index] = plt->vma + plt_offset;
plt_offset += bed->plt->plt_entry_size;
/* PR binutils/18437: Skip extra relocations in the .rel.plt

View file

@ -6066,8 +6066,8 @@ bad_return:
reloc_index = H_GET_32 (abfd, (plt_contents + plt_offset
+ bed->plt_reloc_offset));
if (reloc_index >= count)
abort ();
if (reloc_index < count)
{
if (plt_bnd)
{
/* This is the index in .plt section. */
@ -6079,6 +6079,7 @@ bad_return:
}
else
plt_sym_val[reloc_index] = plt->vma + plt_offset;
}
plt_offset += bed->plt_entry_size;
/* PR binutils/18437: Skip extra relocations in the .rela.plt