[binutils-gdb] PR26460 UBSAN: tc-ia64.c:6107 index out of bounds

Alan Modra amodra@sourceware.org
Fri Aug 28 13:46:20 GMT 2020


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

commit ed2ed4dcf4ae20b9a7c38ffdf379fef383c6b8f9
Author: Alan Modra <amodra@gmail.com>
Date:   Fri Aug 28 23:09:29 2020 +0930

    PR26460 UBSAN: tc-ia64.c:6107 index out of bounds
    
            PR 26460
            * config/tc-ia64.c (parse_operands): Don't access past end of
            idesc->operands.

Diff:
---
 gas/ChangeLog        | 6 ++++++
 gas/config/tc-ia64.c | 6 ++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 63d1596eba4..9bdbb4b172f 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2020-08-28  Alan Modra  <amodra@gmail.com>
+
+	PR 26460
+	* config/tc-ia64.c (parse_operands): Don't access past end of
+	idesc->operands.
+
 2020-08-26  Mark Wielaard  <mark@klomp.org>
 
 	* as.c (parse_args): Handle bad -gdwarf options.
diff --git a/gas/config/tc-ia64.c b/gas/config/tc-ia64.c
index f827e459df2..0e60416f1b2 100644
--- a/gas/config/tc-ia64.c
+++ b/gas/config/tc-ia64.c
@@ -6098,8 +6098,10 @@ parse_operands (struct ia64_opcode *idesc)
     {
       if (i < NELEMS (CURR_SLOT.opnd))
 	{
-	  sep = parse_operand_maybe_eval (CURR_SLOT.opnd + i, '=',
-					  idesc->operands[i]);
+	  enum ia64_opnd op = IA64_OPND_NIL;
+	  if (i < NELEMS (idesc->operands))
+	    op = idesc->operands[i];
+	  sep = parse_operand_maybe_eval (CURR_SLOT.opnd + i, '=', op);
 	  if (CURR_SLOT.opnd[i].X_op == O_absent)
 	    break;
 	}


More information about the Binutils-cvs mailing list