[binutils-gdb] Fix an access through a null pointer when parsing a corrupt SOM format fle.

Nick Clifton nickc@sourceware.org
Thu Apr 29 16:56:17 GMT 2021


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=09e40e44ad05822ed72f6ad720b5e75ea2a8fc67

commit 09e40e44ad05822ed72f6ad720b5e75ea2a8fc67
Author: Nick Clifton <nickc@redhat.com>
Date:   Thu Apr 29 17:55:43 2021 +0100

    Fix an access through a null pointer when parsing a corrupt SOM format fle.
    
            PR 27793
            * som.c (som_slurp_symbol_table): Assign symbols without any scope
            to the undefined section.
            (som_decode_symclass): Check for a missing symbol section.
            * syms.c (bfd_decode_symclass): Likewise.

Diff:
---
 bfd/ChangeLog |  8 ++++++++
 bfd/som.c     | 11 ++++++++++-
 bfd/syms.c    |  4 ++++
 3 files changed, 22 insertions(+), 1 deletion(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 3144a72d21d..4bdee1cb123 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2021-04-29  Nick Clifton  <nickc@redhat.com>
+
+	PR 27793
+	* som.c (som_slurp_symbol_table): Assign symbols without any scope
+	to the undefined section.
+	(som_decode_symclass): Check for a missing symbol section.
+	* syms.c (bfd_decode_symclass): Likewise.
+
 2021-04-29  Nick Clifton  <nickc@redhat.com>
 
 	PR 27792
diff --git a/bfd/som.c b/bfd/som.c
index 656ded96b69..42ecc765945 100644
--- a/bfd/som.c
+++ b/bfd/som.c
@@ -4740,7 +4740,7 @@ som_slurp_symbol_table (bfd *abfd)
 	  goto error_return;
 	}
       sym->symbol.value = bfd_getb32 (bufp->symbol_value);
-      sym->symbol.section = 0;
+      sym->symbol.section = NULL;
       sym->symbol.flags = 0;
 
       switch (symbol_type)
@@ -4800,6 +4800,10 @@ som_slurp_symbol_table (bfd *abfd)
 	  sym->symbol.section = bfd_section_from_som_symbol (abfd, bufp);
 	  sym->symbol.value -= sym->symbol.section->vma;
 	  break;
+
+	default:
+	  sym->symbol.section = bfd_und_section_ptr;
+	  break;
 	}
 
       /* Check for a weak symbol.  */
@@ -5848,6 +5852,11 @@ som_decode_symclass (asymbol *symbol)
 {
   char c;
 
+  /* If the symbol did not have a scope specified,
+     then it will not have associated section.  */
+  if (symbol == NULL || symbol->section == NULL)
+    return '?';
+
   if (bfd_is_com_section (symbol->section))
     return 'C';
   if (bfd_is_und_section (symbol->section))
diff --git a/bfd/syms.c b/bfd/syms.c
index e0ab16795d6..7daf741b7b6 100644
--- a/bfd/syms.c
+++ b/bfd/syms.c
@@ -654,6 +654,10 @@ bfd_decode_symclass (asymbol *symbol)
 {
   char c;
 
+  /* Paranoia...  */
+  if (symbol == NULL || symbol->section == NULL)
+    return '?';
+
   if (symbol->section && bfd_is_com_section (symbol->section))
     {
       if (symbol->section->flags & SEC_SMALL_DATA)


More information about the Binutils-cvs mailing list