This is an automated email from Gerrit.

"zapb <d...@zapb.de>" just uploaded a new patch set to Gerrit, which you can 
find at https://review.openocd.org/c/openocd/+/8257

-- gerrit

commit 1b0bcfde03e2ddf9bd1241efe7641ccf4ef0d231
Author: Marc Schink <d...@zapb.de>
Date:   Wed May 1 10:24:32 2024 +0200

    target/semihosting: Fix double free()
    
    Do not free the service in 'connection_closed_handler' because it is
    free'd by the server infrastructure.
    
    This error was detected with valgrind:
    
    ==272468== Invalid free() / delete / delete[] / realloc()
    ==272468==    at 0x484B27F: free (in 
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==272468==    by 0x1F34C7: remove_service (server.c:374)
    ==272468==    by 0x2ED3D5: semihosting_tcp_close_cnx 
(semihosting_common.c:1819)
    ==272468==    by 0x2ED3D5: handle_common_semihosting_redirect_command 
(semihosting_common.c:1926)
    ==272468==    by 0x1FC703: exec_command (command.c:520)
    ==272468==    by 0x1FC703: jim_command_dispatch (command.c:931)
    ==272468==    by 0x36980F: JimInvokeCommand (in 
/home/marc/openocd/build/src/openocd)
    ==272468==    by 0x1FFFFFFFFF: ???
    ==272468==    by 0x53ED09F: ???
    ==272468==    by 0x300000001: ???
    ==272468==    by 0x1FFEFFF7FF: ???
    ==272468==    by 0x3D3984: ??? (in /home/marc/openocd/build/src/openocd)
    ==272468==    by 0x2: ???
    ==272468==  Address 0x5fff650 is 0 bytes inside a block of size 24 free'd
    ==272468==    at 0x484B27F: free (in 
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==272468==    by 0x2ECA42: semihosting_service_connection_closed_handler 
(semihosting_common.c:1807)
    ==272468==    by 0x1F2E39: remove_connection.isra.0 (server.c:164)
    ==272468==    by 0x1F349E: remove_connections (server.c:350)
    ==272468==    by 0x1F349E: remove_service (server.c:364)
    ==272468==    by 0x2ED3D5: semihosting_tcp_close_cnx 
(semihosting_common.c:1819)
    ==272468==    by 0x2ED3D5: handle_common_semihosting_redirect_command 
(semihosting_common.c:1926)
    ==272468==    by 0x1FC703: exec_command (command.c:520)
    ==272468==    by 0x1FC703: jim_command_dispatch (command.c:931)
    ==272468==    by 0x36980F: JimInvokeCommand (in 
/home/marc/openocd/build/src/openocd)
    ==272468==    by 0x1FFFFFFFFF: ???
    ==272468==    by 0x53ED09F: ???
    ==272468==    by 0x300000001: ???
    ==272468==    by 0x1FFEFFF7FF: ???
    ==272468==    by 0x3D3984: ??? (in /home/marc/openocd/build/src/openocd)
    ==272468==  Block was alloc'd at
    ==272468==    at 0x484DA83: calloc (in 
/usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
    ==272468==    by 0x2ED326: handle_common_semihosting_redirect_command 
(semihosting_common.c:1931)
    ==272468==    by 0x1FC703: exec_command (command.c:520)
    ==272468==    by 0x1FC703: jim_command_dispatch (command.c:931)
    ==272468==    by 0x36980F: JimInvokeCommand (in 
/home/marc/openocd/build/src/openocd)
    ==272468==    by 0x1FFFFFFFFF: ???
    ==272468==    by 0x53ED09F: ???
    ==272468==    by 0x400000002: ???
    ==272468==    by 0x1FFEFFF7FF: ???
    ==272468==    by 0x3D3984: ??? (in /home/marc/openocd/build/src/openocd)
    ==272468==    by 0x2: ???
    ==272468==
    
    Change-Id: I3e5323f145a98d1ff9ea7d03f87ed96140f49a18
    Signed-off-by: Marc Schink <d...@zapb.de>

diff --git a/src/target/semihosting_common.c b/src/target/semihosting_common.c
index f7acc6092d..e71bb740fe 100644
--- a/src/target/semihosting_common.c
+++ b/src/target/semihosting_common.c
@@ -1804,7 +1804,6 @@ static int 
semihosting_service_connection_closed_handler(struct connection *conn
        struct semihosting_tcp_service *service = connection->service->priv;
        if (service) {
                free(service->name);
-               free(service);
        }
 
        return ERROR_OK;

-- 

Reply via email to