Skip to content

Commit

Permalink
gdb_server: fix segfault with GDB command 'flash-erase'
Browse files Browse the repository at this point in the history
Running the GDB command 'flash-erase' triggers sending the remote
GDB commands 'vFlashErase' (one per flash bank) followed by one
single 'vFlashDone', with no 'vFlashWrite' commands in between.
This causes the field 'gdb_connection->vflash_image' to be NULL
during the execution of 'vFlashDone', triggering a segmentation
fault in OpenOCD.

While parsing 'vFlashDone', check if any image to flash has been
received.

Change-Id: I443021c7a531255b60f2c44c2685e52e3c34b5c8
Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com>
Reviewed-on: https://review.openocd.org/c/openocd/+/8164
Tested-by: jenkins
  • Loading branch information
borneoa committed Mar 9, 2024
1 parent 5c395fd commit fcda9f1
Showing 1 changed file with 7 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/server/gdb_server.c
Original file line number Diff line number Diff line change
Expand Up @@ -3376,6 +3376,13 @@ static int gdb_v_packet(struct connection *connection,
if (strncmp(packet, "vFlashDone", 10) == 0) {
uint32_t written;

/* GDB command 'flash-erase' does not send a vFlashWrite,
* so nothing to write here. */
if (!gdb_connection->vflash_image) {
gdb_put_packet(connection, "OK", 2);
return ERROR_OK;
}

/* process the flashing buffer. No need to erase as GDB
* always issues a vFlashErase first. */
target_call_event_callbacks(target,
Expand Down

0 comments on commit fcda9f1

Please sign in to comment.