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; } --
