PR23141, SIGSEGV in bfd_elf_set_group_contents
authorAlan Modra <amodra@gmail.com>
Tue, 8 May 2018 05:02:04 +0000 (14:32 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 8 May 2018 12:59:39 +0000 (22:29 +0930)
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
binutils/objcopy.c

index 29fd1c247ce1f470b766e32a48b175a43c5aace7..d2d25532db41bff8427c92eab5423ee0b71de1ef 100644 (file)
@@ -1,3 +1,9 @@
+2018-05-08  Alan Modra  <amodra@gmail.com>
+
+       PR 23141
+       * objcopy.c (is_strip_section): Strip groups without a valid
+       signature symbol.
+
 2018-05-07  Alan Modra  <amodra@gmail.com>
 
        PR 23142
index fadc9572433bca8bb083b72f06022eddf6242e66..3563792304349d2f4815c4c2f793b248b063a93b 100644 (file)
@@ -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))