From 886d542809fd73fba55ba72da1bd64ba50164222 Mon Sep 17 00:00:00 2001 From: Alan Modra Date: Tue, 8 May 2018 14:32:04 +0930 Subject: [PATCH] PR23141, SIGSEGV in bfd_elf_set_group_contents Another fuzzing fix. I think it's reasonable to simply strip out any group section that is too weird for objcopy to handle. PR 23141 * objcopy.c (is_strip_section): Strip groups without a valid signature symbol. --- binutils/ChangeLog | 6 ++++++ binutils/objcopy.c | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 29fd1c247c..d2d25532db 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,9 @@ +2018-05-08 Alan Modra + + PR 23141 + * objcopy.c (is_strip_section): Strip groups without a valid + signature symbol. + 2018-05-07 Alan Modra PR 23142 diff --git a/binutils/objcopy.c b/binutils/objcopy.c index fadc957243..3563792304 100644 --- a/binutils/objcopy.c +++ b/binutils/objcopy.c @@ -1343,14 +1343,15 @@ is_strip_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec) const char *gname; asection *elt, *first; + gsym = group_signature (sec); + /* Strip groups without a valid signature. */ + if (gsym == NULL) + return TRUE; + /* PR binutils/3181 If we are going to strip the group signature symbol, then strip the group section too. */ - gsym = group_signature (sec); - if (gsym != NULL) - gname = gsym->name; - else - gname = sec->name; + gname = gsym->name; if ((strip_symbols == STRIP_ALL && !is_specified_symbol (gname, keep_specific_htab)) || is_specified_symbol (gname, strip_specific_htab)) -- 2.34.1