This is an automated email from Gerrit.

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

-- gerrit

commit 6920173e72b9bf94fc642838f69ccb2c85fa0e9f
Author: Antonio Borneo <[email protected]>
Date:   Sun Jan 4 17:40:43 2026 +0100

    server: gdb_server: check for out of memory and fix a memory leak
    
    During GDB service start, check that memory is properly allocated
    and if add_service() fails release the allocated memory.
    
    While there, modify the code following the coding style.
    
    Change-Id: Iebd1481a82f7391c110c5f6ad9878ba4abf052b3
    Signed-off-by: Antonio Borneo <[email protected]>

diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index a989bda578..7b3cc21417 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -3881,12 +3881,11 @@ static const struct service_driver gdb_service_driver = 
{
 
 static int gdb_target_start(struct target *target, const char *port)
 {
-       struct gdb_service *gdb_service;
-       int ret;
-       gdb_service = malloc(sizeof(struct gdb_service));
-
-       if (!gdb_service)
-               return -ENOMEM;
+       struct gdb_service *gdb_service = malloc(sizeof(struct gdb_service));
+       if (!gdb_service) {
+               LOG_ERROR("Out of memory");
+               return ERROR_FAIL;
+       }
 
        LOG_TARGET_INFO(target, "starting gdb server on %s", port);
 
@@ -3895,17 +3894,22 @@ static int gdb_target_start(struct target *target, 
const char *port)
        gdb_service->core[1] = -1;
        target->gdb_service = gdb_service;
 
-       ret = add_service(&gdb_service_driver, port, 
target->gdb_max_connections, gdb_service);
+       int retval = add_service(&gdb_service_driver, port,
+                       target->gdb_max_connections, gdb_service);
+       if (retval != ERROR_OK) {
+               free(gdb_service);
+               return retval;
+       }
+
        /* initialize all targets gdb service with the same pointer */
-       {
                struct target_list *head;
                foreach_smp_target(head, target->smp_targets) {
                        struct target *curr = head->target;
                        if (curr != target)
                                curr->gdb_service = gdb_service;
                }
-       }
-       return ret;
+
+       return ERROR_OK;
 }
 
 static int gdb_target_add_one(struct target *target)

-- 

Reply via email to