From ce4ec1a9b6c442a9feefa18dd8734372a718665c Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Mon, 7 May 2018 22:41:47 +0930 Subject: [PATCH] Bug 23142, SIGSEGV in is_strip_section PR 23142 * objcopy.c (group_signature): Don't accept groups that use a symbol table other than the one we've read. --- binutils/ChangeLog | 6 ++++++ binutils/objcopy.c | 9 ++++----- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 61bbd2f6295..29fd1c247ce 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2018-05-07 Alan Modra + + PR 23142 + * objcopy.c (group_signature): Don't accept groups that use a + symbol table other than the one we've read. + 2018-04-30 Francois H. Theron * readelf.c: Very basic support for EM_NFP and its section types. diff --git a/binutils/objcopy.c b/binutils/objcopy.c index 61c513b482d..fadc9572433 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -1211,14 +1211,13 @@ group_signature (asection *group) return NULL; ghdr = &elf_section_data (group)->this_hdr; - if (ghdr->sh_link < elf_numsections (abfd)) + if (ghdr->sh_link == elf_onesymtab (abfd)) { const struct elf_backend_data *bed = get_elf_backend_data (abfd); - Elf_Internal_Shdr *symhdr = elf_elfsections (abfd) [ghdr->sh_link]; + Elf_Internal_Shdr *symhdr = &elf_symtab_hdr (abfd); - if (symhdr->sh_type == SHT_SYMTAB - && ghdr->sh_info > 0 - && ghdr->sh_info < (symhdr->sh_size / bed->s->sizeof_sym)) + if (ghdr->sh_info > 0 + && ghdr->sh_info < symhdr->sh_size / bed->s->sizeof_sym) return isympp[ghdr->sh_info - 1]; } return NULL; -- 2.30.2