Fix: worker structure is leaked in run_as process
[lttng-tools.git] / src / common / runas.c
index c81652e9f4b4f3a09ca1747c0b030aa9d1e13c42..4fc229b0d0317452df0b3db08c78ab4c998a97d3 100644 (file)
@@ -877,7 +877,7 @@ int run_as_create_worker_no_lock(const char *procname)
        worker->procname = strdup(procname);
        if (!worker->procname) {
                ret = -ENOMEM;
        worker->procname = strdup(procname);
        if (!worker->procname) {
                ret = -ENOMEM;
-               goto end;
+               goto error_procname_alloc;
        }
        /* Create unix socket. */
        if (lttcomm_create_anon_unix_socketpair(worker->sockpair) < 0) {
        }
        /* Create unix socket. */
        if (lttcomm_create_anon_unix_socketpair(worker->sockpair) < 0) {
@@ -921,6 +921,8 @@ int run_as_create_worker_no_lock(const char *procname)
                        ret = -1;
                }
                worker->sockpair[1] = -1;
                        ret = -1;
                }
                worker->sockpair[1] = -1;
+               free(worker->procname);
+               free(worker);
                LOG(ret ? PRINT_ERR : PRINT_DBG, "run_as worker exiting (ret = %d)", ret);
                exit(ret ? EXIT_FAILURE : EXIT_SUCCESS);
        } else {
                LOG(ret ? PRINT_ERR : PRINT_DBG, "run_as worker exiting (ret = %d)", ret);
                exit(ret ? EXIT_FAILURE : EXIT_SUCCESS);
        } else {
@@ -960,6 +962,8 @@ error_fork:
                worker->sockpair[i] = -1;
        }
 error_sock:
                worker->sockpair[i] = -1;
        }
 error_sock:
+       free(worker->procname);
+error_procname_alloc:
        free(worker);
        return ret;
 }
        free(worker);
        return ret;
 }
This page took 0.025381 seconds and 5 git commands to generate.