aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Clifton <nickc@redhat.com>2015-01-15 16:22:55 +0000
committerNick Clifton <nickc@redhat.com>2015-01-15 16:22:55 +0000
commitcd21f5daad4335b50366b838664ade64bec29957 (patch)
tree51f091bb808e6350a6c63a77cd8a4d5db16769e4 /bfd/elf32-spu.c
parentFixes a bug in the relaxation of R_MSP430X_ABS16 to R_MSP430_10_PCREL. (diff)
downloadbinutils-gdb-cd21f5daad4335b50366b838664ade64bec29957.tar.gz
binutils-gdb-cd21f5daad4335b50366b838664ade64bec29957.tar.bz2
binutils-gdb-cd21f5daad4335b50366b838664ade64bec29957.zip
Fix memory access violations triggered by running objdump on fuzzed binaries.
PR binutils/17512 * elf-m10300.c (mn10300_info_to_howto): Replace assertion with an error message. Never return an invalid howto pointer. * elf32-cr16.c (cr16_info_to_howto): Likewise. * elf32-crx.c (elf_crx_info_to_howto): Likewise. * elf32-i370.c (i370_elf_info_to_howto): Likewise. * elf32-mcore.c (mcore_elf_info_to_howto): Likewise. * elf32-microblaze.c (microblaze_elf_info_to_howto): Likewise. * elf32-mips.c (mips_elf32_rtype_to_howto): Likewise. * elf32-pj.c (pj_elf_info_to_howto): Likewise. * elf32-ppc.c (ppc_elf_info_to_howto): Likewise. * elf32-spu.c (spu_elf_info_to_howto): Likewise. * elf32-v850.c (v850_elf_info_to_howto_rela): Likewise. * elf32-vax.c (rtype_to_howto): Likewise. * elf64-alpha.c (elf64_alpha_info_to_howto): Likewise. * elf64-mips.c (mips_elf64_rtype_to_howto): Likewise. * elfn32-mips.c (sh_elf_info_to_howto): Likewise. * elf32-sh.c (sh_elf_info_to_howto): Likewise. (sh_elf_reloc): Check that the reloc is in range. * reloc.c (bfd_perform_relocation): Check that the section is big enough for the entire reloc. (bfd_generic_get_relocated_section_contents): Report unexpected return values from perform_reloc.
Diffstat (limited to 'bfd/elf32-spu.c')
-rw-r--r--bfd/elf32-spu.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/bfd/elf32-spu.c b/bfd/elf32-spu.c
index ace7c29dcca..21fd856ab29 100644
--- a/bfd/elf32-spu.c
+++ b/bfd/elf32-spu.c
@@ -151,7 +151,14 @@ spu_elf_info_to_howto (bfd *abfd ATTRIBUTE_UNUSED,
enum elf_spu_reloc_type r_type;
r_type = (enum elf_spu_reloc_type) ELF32_R_TYPE (dst->r_info);
- BFD_ASSERT (r_type < R_SPU_max);
+ /* PR 17512: file: 90c2a92e. */
+ if (r_type >= R_SPU_max)
+ {
+ (*_bfd_error_handler) (_("%A: unrecognised SPU reloc number: %d"),
+ abfd, r_type);
+ bfd_set_error (bfd_error_bad_value);
+ r_type = R_SPU_NONE;
+ }
cache_ptr->howto = &elf_howto_table[(int) r_type];
}