Skip to content

Commit

Permalink
gdb: Avoid buffer overflow in ada_decode
Browse files Browse the repository at this point in the history
This is a partial backport patch from gdb commit 033bc52bb619 ("Avoid
buffer overflow in ada_decode").

The AddressSanitizer reports a dynamic-stack-buffer-overflow error as
below:
  gdb/ada-lang.c:1388:16 in ada_decode[abi:cxx11](char const*, bool, bool)

Add a missing bounds check to fix the issue.

Link: https://sourceware.org/bugzilla/show_bug.cgi?id=30639
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
  • Loading branch information
lian-bo authored and k-hagio committed Oct 24, 2023
1 parent 0172e35 commit a8e5e4c
Showing 1 changed file with 13 additions and 1 deletion.
14 changes: 13 additions & 1 deletion gdb-10.2.patch
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ tar xvzmf gdb-10.2.tar.gz \
gdb-10.2/gdb/printcmd.c \
gdb-10.2/gdb/symfile.c \
gdb-10.2/gdb/Makefile.in \
gdb-10.2/gdb/dwarf2/read.c
gdb-10.2/gdb/dwarf2/read.c \
gdb-10.2/gdb/ada-lang.c

exit 0

Expand Down Expand Up @@ -3145,3 +3146,14 @@ exit 0
strcat(req->buf, buf);
}
}
--- gdb-10.2/gdb/ada-lang.c.orig
+++ gdb-10.2/gdb/ada-lang.c
@@ -1158,7 +1158,7 @@ ada_decode (const char *encoded)
i -= 1;
if (i > 1 && encoded[i] == '_' && encoded[i - 1] == '_')
len0 = i - 1;
- else if (encoded[i] == '$')
+ else if (i >= 0 && encoded[i] == '$')
len0 = i;
}

0 comments on commit a8e5e4c

Please sign in to comment.