Fix seg-fault in strip when copying a corrupt binary.

PR binutils/20931
	* elf.c (copy_special_section_fields): Check for an invalid
	sh_link field before attempting to follow it.
This commit is contained in:
Nick Clifton 2016-12-06 16:53:57 +00:00
parent 8b929e420a
commit 4f3ca05b48
2 changed files with 14 additions and 0 deletions

View File

@ -1,5 +1,9 @@
2016-12-06 Nick Clifton <nickc@redhat.com>
PR binutils/20931
* elf.c (copy_special_section_fields): Check for an invalid
sh_link field before attempting to follow it.
PR binutils/20929
* aoutx.h (squirt_out_relocs): Check for relocs without an
associated symbol.

View File

@ -1346,6 +1346,16 @@ copy_special_section_fields (const bfd *ibfd,
in the input bfd. */
if (iheader->sh_link != SHN_UNDEF)
{
/* See PR 20931 for a reproducer. */
if (iheader->sh_link >= elf_numsections (ibfd))
{
(* _bfd_error_handler)
/* xgettext:c-format */
(_("%B: Invalid sh_link field (%d) in section number %d"),
ibfd, iheader->sh_link, secnum);
return FALSE;
}
sh_link = find_link (obfd, iheaders[iheader->sh_link], iheader->sh_link);
if (sh_link != SHN_UNDEF)
{