summaryrefslogtreecommitdiff
path: root/bfd/elf32-i386.c
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-01-05 23:13:50 +0000
committerNick Clifton <nickc@redhat.com>2015-01-05 23:13:50 +0000
commit896ca0981329171639b1fe0b934393a79ef4fdfb (patch)
treeac6f2a1d6ab8084254dac309ba83173eb962d5c2 /bfd/elf32-i386.c
parent82b1b41bcdc6d01fdbd94b246e24a8a8f8c2bddd (diff)
More fixes for invalid memory accesses triggered by fuzzed binaries.
PR binutils/17512 * nm.c (print_symbol): Add 'is_synthetic' parameter. Use it to help initialize the info.elfinfo field. (print_size_symbols): Add 'synth_count' parameter. Use it to set the is_synthetic parameter when calling print_symbol. (print_symbols): Likewise. (display_rel_file): Pass synth_count to printing function. (display_archive): Break loop if the last archive displayed matches the current archive. * size.c (display_archive): Likewise. * archive.c (do_slurp_bsd_armap): Make sure that the parsed sized is at least big enough for the header to be read. * elf32-i386.c (elf_i386_get_plt_sym_val): Skip unknown relocs. * mach-o.c (bfd_mach_o_get_synthetic_symtab): Add range checks. (bfd_mach_o_read_command): Prevetn duplicate error messages about unrecognized commands. * syms.c (_bfd_stab_section_find_nearest_line): Add range checks when indexing into the string table.
Diffstat (limited to 'bfd/elf32-i386.c')
-rw-r--r--bfd/elf32-i386.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 24e3d4cc31..85acf0fce6 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -5194,8 +5194,9 @@ bad_return:
{
long reloc_index;
- if (p->howto->type != R_386_JUMP_SLOT
- && p->howto->type != R_386_IRELATIVE)
+ if (p->howto == NULL /* PR 17512: file: bc9d6cf5. */
+ || (p->howto->type != R_386_JUMP_SLOT
+ && p->howto->type != R_386_IRELATIVE))
continue;
reloc_index = H_GET_32 (abfd, (plt_contents + plt_offset