This is an automated email from Gerrit.

"Antonio Borneo <borneo.anto...@gmail.com>" just uploaded a new patch set to 
Gerrit, which you can find at https://review.openocd.org/c/openocd/+/8164

-- gerrit

commit 7d45150a08c328297351a8866de3832a3fecc7e4
Author: Antonio Borneo <borneo.anto...@gmail.com>
Date:   Sun Feb 25 18:36:47 2024 +0100

    gdb_server: fix segfault with GDB command 'flash-erase'
    
    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.anto...@gmail.com>

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 13bc233957..afe84abe8b 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -3379,6 +3379,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,

-- 

Reply via email to