Fix a seg-fault when processing a corrupt binary containing reloc(s) with negative addresses.

PR binutils/21434
	* reloc.c (bfd_perform_relocation): Check for a negative address
	in the reloc.
This commit is contained in:
Nick Clifton 2017-04-26 16:30:22 +01:00
parent d21f3ddb0d
commit 04b31182bf
2 changed files with 10 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2017-04-26 Nick Clifton <nickc@redhat.com>
PR binutils/21434
* reloc.c (bfd_perform_relocation): Check for a negative address
in the reloc.
2017-04-26 Maciej W. Rozycki <macro@imgtec.com>
PR ld/21334

View File

@ -624,7 +624,10 @@ bfd_perform_relocation (bfd *abfd,
PR 17512: file: c146ab8b, 46dff27f, 38e53ebf. */
octets = reloc_entry->address * bfd_octets_per_byte (abfd);
if (octets + bfd_get_reloc_size (howto)
> bfd_get_section_limit_octets (abfd, input_section))
> bfd_get_section_limit_octets (abfd, input_section)
/* Check for an overly large offset which
masquerades as a negative value too. */
|| (octets + bfd_get_reloc_size (howto) < bfd_get_reloc_size (howto)))
return bfd_reloc_outofrange;
/* Work out which section the relocation is targeted at and the