This is an automated email from Gerrit.

"Brian Kuschak <[email protected]>" just uploaded a new patch set to Gerrit, 
which you can find at https://review.openocd.org/c/openocd/+/9147

-- gerrit

commit 78e0e1b20dfa2baa30c7fbc943f500c1e241a926
Author: Brian Kuschak <[email protected]>
Date:   Thu Sep 25 23:53:38 2025 +1000

    jtag/drivers/cmsis_dap_tcp: fix memory leak
    
    Fix memory leak related to command handler strdup().
    
    Change-Id: I4c47abbe157ab46736549af3601c88ba87e3c82c
    Signed-off-by: Brian Kuschak <[email protected]>

diff --git a/src/jtag/drivers/cmsis_dap_tcp.c b/src/jtag/drivers/cmsis_dap_tcp.c
index 8a96cd6244..4d5af80ac8 100644
--- a/src/jtag/drivers/cmsis_dap_tcp.c
+++ b/src/jtag/drivers/cmsis_dap_tcp.c
@@ -27,6 +27,7 @@
 #include <netinet/tcp.h>
 #endif
 #include <stdbool.h>
+#include <stdlib.h>
 #include <string.h>
 #ifdef HAVE_SYS_SOCKET_H
 #include <sys/socket.h>
@@ -359,6 +360,22 @@ static void cmsis_dap_tcp_cancel_all(struct cmsis_dap *dap)
 {
 }
 
+
+static void cmsis_dap_tcp_free_strdup(void)
+{
+       /* Called only at program termination. This function is called even if
+        * adapter initialization fails for some reason and the adapter driver 
does
+        * not call close.
+        */
+       free(cmsis_dap_tcp_host);
+       cmsis_dap_tcp_host = NULL;
+
+       if (cmsis_dap_tcp_port != cmsis_dap_tcp_port_default) {
+               free(cmsis_dap_tcp_port);
+               cmsis_dap_tcp_port = cmsis_dap_tcp_port_default;
+       }
+}
+
 COMMAND_HANDLER(cmsis_dap_handle_tcp_port)
 {
        if (CMD_ARGC != 1)
@@ -372,6 +389,7 @@ COMMAND_HANDLER(cmsis_dap_handle_tcp_port)
                LOG_ERROR("CMSIS-DAP: out of memory");
                return ERROR_FAIL;
        }
+       atexit(cmsis_dap_tcp_free_strdup);
        return ERROR_OK;
 }
 
@@ -386,6 +404,7 @@ COMMAND_HANDLER(cmsis_dap_handle_tcp_host)
                LOG_ERROR("CMSIS-DAP: out of memory");
                return ERROR_FAIL;
        }
+       atexit(cmsis_dap_tcp_free_strdup);
        return ERROR_OK;
 }
 

-- 

Reply via email to