aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorMathias K <kesmtp@freenet.de>2012-03-13 21:26:20 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2012-03-14 20:57:21 +0000
commit4a29a4a86d4ec3e12a9494371c80ace1b8ebedab (patch)
treeb3aed7a9802ae942a5a454effe7bd17e1c7853c7 /src/server
parent5d02d2de43d1c0f4302f5d5cbfe51bbbe87854bd (diff)
downloadriscv-openocd-4a29a4a86d4ec3e12a9494371c80ace1b8ebedab.zip
riscv-openocd-4a29a4a86d4ec3e12a9494371c80ace1b8ebedab.tar.gz
riscv-openocd-4a29a4a86d4ec3e12a9494371c80ace1b8ebedab.tar.bz2
gdb_server: sanity check the gdb register size
This patch checks the received register length with the local configured register length and disconnect on a length missmatch. Change-Id: I6b112c6b55a9ffb4526f582a384ffa91dc8b792f Signed-off-by: Mathias K <kesmtp@freenet.de> Reviewed-on: http://openocd.zylin.com/517 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
Diffstat (limited to 'src/server')
-rw-r--r--src/server/gdb_server.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 238273b..332f74a 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -1137,7 +1137,10 @@ static int gdb_set_register_packet(struct connection *connection,
bin_buf = malloc(DIV_ROUND_UP(reg_list[reg_num]->size, 8));
int chars = (DIV_ROUND_UP(reg_list[reg_num]->size, 8) * 2);
- /* fix!!! add some sanity checks on packet size here */
+ if ((unsigned int)chars != strlen(separator + 1)) {
+ LOG_ERROR("gdb sent a packet with wrong register size");
+ return ERROR_SERVER_REMOTE_CLOSED;
+ }
gdb_target_to_reg(target, separator + 1, chars, bin_buf);