[binutils-gdb] gdb/riscv: Fix oob memory access when printing info registers

Tom Tromey tromey@sourceware.org
Tue Sep 5 16:35:58 GMT 2023


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

commit 5cd2b85eba535f3623129f617f331210f62afd76
Author: Ciaran Woodward <ciaranwoodward@xmos.com>
Date:   Fri Sep 1 12:13:55 2023 +0100

    gdb/riscv: Fix oob memory access when printing info registers
    
    If the length of a register name was greater than 15,
    print_spaces was called with a negative number, which
    prints random data from the heap instead of the requested
    number of spaces.
    
    This could happen if a target-description file was used
    to specify additional long-named registers.
    
    Fix is simple - don't ask for fewer than 1 space (since
    we still want column separation).
    
    Approved-by: Kevin Buettner <kevinb@redhat.com>

Diff:
---
 gdb/riscv-tdep.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/gdb/riscv-tdep.c b/gdb/riscv-tdep.c
index ae18eb64452..3a2891c2c92 100644
--- a/gdb/riscv-tdep.c
+++ b/gdb/riscv-tdep.c
@@ -1145,7 +1145,7 @@ riscv_print_one_register_info (struct gdbarch *gdbarch,
   enum tab_stops { value_column_1 = 15 };
 
   gdb_puts (name, file);
-  print_spaces (value_column_1 - strlen (name), file);
+  print_spaces (std::max<int> (1, value_column_1 - strlen (name)), file);
 
   try
     {


More information about the Gdb-cvs mailing list