gdb_server: check for invalid read memory requests
authorPaul Fertser <fercerpav@gmail.com>
Mon, 6 Jan 2014 17:36:21 +0000 (21:36 +0400)
committerSpencer Oliver <spen@spen-soft.co.uk>
Mon, 20 Jan 2014 13:29:01 +0000 (13:29 +0000)
This prevents invalid free(NULL) (that crashes OpenOCD on desktop
distros).

With radare2 it's now a bit more useful, memory access works if I seek
to the correct address, can't test further as it apparently lacks thumb2
support.

Change-Id: I6ec32d09fd52dab53ba765d7f7519baa1f55d973
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/1853
Tested-by: jenkins
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
src/server/gdb_server.c

index 6729df3a3387813defeebe0c4cd2d054bc749790..91016e42435d390b673bf9a465c0e42017cb0cb0 100644 (file)
@@ -1352,6 +1352,12 @@ static int gdb_read_memory_packet(struct connection *connection,
 
        len = strtoul(separator + 1, NULL, 16);
 
+       if (!len) {
+               LOG_WARNING("invalid read memory packet received (len == 0)");
+               gdb_put_packet(connection, NULL, 0);
+               return ERROR_OK;
+       }
+
        buffer = malloc(len);
 
        LOG_DEBUG("addr: 0x%8.8" PRIx32 ", len: 0x%8.8" PRIx32 "", addr, len);