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:
parent
d8c823c8b6
commit
ec1f73bb0b
3 changed files with 21 additions and 14 deletions
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue