commit 4f3ca05b487e9755018b4c9a053a2e6c35d8a7df Author: Nick Clifton Date: Tue Dec 6 16:53:57 2016 +0000 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. Upstream-Status: Backport CVE: CVE-2017-7304 Signed-off-by: Thiruvadi Rajaraman Index: git/bfd/ChangeLog =================================================================== --- git.orig/bfd/ChangeLog 2017-09-04 16:13:03.512095249 +0530 +++ git/bfd/ChangeLog 2017-09-04 16:16:25.173745111 +0530 @@ -114,6 +114,12 @@ (bfd_elf_final_link): Only initialize the extended symbol index section if there are extended symbol tables to list. + 2016-12-06 Nick Clifton + + PR binutils/20931 + * elf.c (copy_special_section_fields): Check for an invalid + sh_link field before attempting to follow it. + 2016-12-05 Nick Clifton PR binutils/20905 Index: git/bfd/elf.c =================================================================== --- git.orig/bfd/elf.c 2017-09-04 16:13:03.512095249 +0530 +++ git/bfd/elf.c 2017-09-04 16:15:38.257359045 +0530 @@ -1324,6 +1324,16 @@ 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) {