Fix seg-fault running strip on a corrupt binary.

PR binutils/20929
	* aoutx.h (squirt_out_relocs): Check for relocs without an
	associated symbol.
This commit is contained in:
Nick Clifton 2016-12-06 15:58:15 +00:00
parent 5eecd8621b
commit 92744f0580
2 changed files with 17 additions and 6 deletions

View File

@ -1,3 +1,9 @@
2016-12-06 Nick Clifton <nickc@redhat.com>
PR binutils/20929
* aoutx.h (squirt_out_relocs): Check for relocs without an
associated symbol.
2016-12-06 Alan Modra <amodra@gmail.com>
* elf64-ppc.c (ok_lo_toc_insn): Add r_type param. Recognize

View File

@ -2395,10 +2395,15 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section)
count != 0;
--count, natptr += each_size, ++generic)
{
if ((*generic)->howto == NULL)
/* PR 20921: If the howto field has not been initialised then skip
this reloc.
PR 20929: Similarly for the symbol field. */
if ((*generic)->howto == NULL
|| (*generic)->sym_ptr_ptr == NULL)
{
bfd_set_error (bfd_error_invalid_operation);
_bfd_error_handler (_("%B: attempt to write out unknown reloc type"), abfd);
_bfd_error_handler (_("\
%B: attempt to write out unknown reloc type"), abfd);
return FALSE;
}
MY_swap_ext_reloc_out (abfd, *generic,
@ -2411,12 +2416,12 @@ NAME (aout, squirt_out_relocs) (bfd *abfd, asection *section)
count != 0;
--count, natptr += each_size, ++generic)
{
/* PR 20921: If the howto field has not been initialised then skip
this reloc. */
if ((*generic)->howto == NULL)
if ((*generic)->howto == NULL
|| (*generic)->sym_ptr_ptr == NULL)
{
bfd_set_error (bfd_error_invalid_operation);
_bfd_error_handler (_("%B: attempt to write out unknown reloc type"), abfd);
_bfd_error_handler (_("\
%B: attempt to write out unknown reloc type"), abfd);
return FALSE;
}
MY_swap_std_reloc_out (abfd, *generic,