Fix: sessiond: leak of config_path on duplicate --config option
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index 5f99bdbf63b66c01bb70d54a9839170b0e67d487..aec2af425df1887b3d61d71a099dc732c026687c 100644 (file)
@@ -62,7 +62,7 @@
 #include "kernel.h"
 #include "kernel-consumer.h"
 #include "shm.h"
-#include "ust-ctl.h"
+#include "lttng-ust-ctl.h"
 #include "ust-consumer.h"
 #include "utils.h"
 #include "fd-limit.h"
@@ -797,7 +797,7 @@ static int set_options(int argc, char **argv)
        int ret = 0, c = 0, option_index = 0;
        int orig_optopt = optopt, orig_optind = optind;
        char *optstring;
-       const char *config_path = NULL;
+       char *config_path = NULL;
 
        optstring = utils_generate_optstring(long_options,
                        sizeof(long_options) / sizeof(struct option));
@@ -821,6 +821,7 @@ static int set_options(int argc, char **argv)
                        WARN("Getting '%s' argument from setuid/setgid binary refused for security reasons.",
                                "-f, --config");
                } else {
+                       free(config_path);
                        config_path = utils_expand_path(optarg);
                        if (!config_path) {
                                ERR("Failed to resolve path: %s", optarg);
@@ -866,6 +867,7 @@ static int set_options(int argc, char **argv)
        }
 
 end:
+       free(config_path);
        free(optstring);
        return ret;
 }
@@ -1819,7 +1821,9 @@ stop_threads:
        lttng_pipe_destroy(ust64_channel_monitor_pipe);
        lttng_pipe_destroy(kernel_channel_monitor_pipe);
 
-       health_app_destroy(health_sessiond);
+       if (health_sessiond) {
+               health_app_destroy(health_sessiond);
+       }
 exit_create_run_as_worker_cleanup:
 exit_options:
        sessiond_cleanup_lock_file();
This page took 0.024297 seconds and 4 git commands to generate.