Fix addrss violation when processing a corrupt SH COFF binary.
authorNick Clifton <nickc@redhat.com>
Wed, 21 Jun 2017 15:36:44 +0000 (16:36 +0100)
committerNick Clifton <nickc@redhat.com>
Wed, 21 Jun 2017 15:36:44 +0000 (16:36 +0100)
PR binutils/21646
* coff-sh.c (sh_reloc): Check for an out of range reloc.

bfd/ChangeLog
bfd/coff-sh.c

index 35b9d97..b1cf4f9 100644 (file)
@@ -1,5 +1,10 @@
 2017-06-21  Nick Clifton  <nickc@redhat.com>
 
+       PR binutils/21646
+       * coff-sh.c (sh_reloc): Check for an out of range reloc.
+
+2017-06-21  Nick Clifton  <nickc@redhat.com>
+
        PR binutils/21639
        * vms-misc.c (_bfd_vms_save_sized_string): Use unsigned int as
        type of the size parameter.
index d76f98a..26d296b 100644 (file)
@@ -596,6 +596,9 @@ sh_reloc (bfd *      abfd,
       && bfd_is_und_section (symbol_in->section))
     return bfd_reloc_undefined;
 
+  if (addr > input_section->size)
+    return bfd_reloc_outofrange;
+
   sym_value = get_symbol_value (symbol_in);
 
   switch (r_type)
@@ -2910,7 +2913,6 @@ sh_coff_get_relocated_section_contents (bfd *output_bfd,
   struct internal_reloc *internal_relocs = NULL;
   struct internal_syment *internal_syms = NULL;
 
-fprintf (stderr, "DATA = %p\n", data);
   /* We only need to handle the case of relaxing, or of having a
      particular set of section contents, specially.  */
   if (relocatable