[binutils-gdb] PR26507 UBSAN: elf32-xtensa.c:6013 null pointer bsearch

Alan Modra amodra@sourceware.org
Wed Aug 26 13:55:33 GMT 2020


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

commit 4d43072582c3ccbb86485d79107a9d3550a1557a
Author: Alan Modra <amodra@gmail.com>
Date:   Wed Aug 26 20:25:04 2020 +0930

    PR26507 UBSAN: elf32-xtensa.c:6013 null pointer bsearch
    
            PR 26507
            * elf32-xtensa.c (find_removed_literal): Don't bsearch empty map.

Diff:
---
 bfd/ChangeLog      |  5 +++++
 bfd/elf32-xtensa.c | 15 +++++++++------
 2 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 765188d303c..988e2f0c649 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,8 @@
+2020-08-26  Alan Modra  <amodra@gmail.com>
+
+	PR 26507
+	* elf32-xtensa.c (find_removed_literal): Don't bsearch empty map.
+
 2020-08-26  Alan Modra  <amodra@gmail.com>
 
 	PR 26506
diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
index 5184fbf1be7..5824c599ca8 100644
--- a/bfd/elf32-xtensa.c
+++ b/bfd/elf32-xtensa.c
@@ -6014,13 +6014,16 @@ find_removed_literal (removed_literal_list *removed_list, bfd_vma addr)
   if (removed_list->map == NULL)
     map_removed_literal (removed_list);
 
-  p = bsearch (&addr, removed_list->map, removed_list->n_map,
-	       sizeof (*removed_list->map), removed_literal_compare);
-  if (p)
+  if (removed_list->map != NULL)
     {
-      while (p != removed_list->map && (p - 1)->addr == addr)
-	--p;
-      r = p->literal;
+      p = bsearch (&addr, removed_list->map, removed_list->n_map,
+		   sizeof (*removed_list->map), removed_literal_compare);
+      if (p)
+	{
+	  while (p != removed_list->map && (p - 1)->addr == addr)
+	    --p;
+	  r = p->literal;
+	}
     }
   return r;
 }


More information about the Binutils-cvs mailing list