gdb_server: sanity check the gdb register size
[fw/openocd] / src / server / gdb_server.c
index 238273bb0c9f09bb1bd922451a13ec9239c5095d..332f74a239952c3134fccf8b2fb18779abcd8c9d 100644 (file)
@@ -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);