Fix: initialize syscall table when kernel tracer is lazily initialized
[lttng-tools.git] / src / bin / lttng-sessiond / main.c
index cb9e16ec506e8ffbae652ba4dda670af27a0917d..d559306cb323a7578d62058063777d2a07466d21 100644 (file)
@@ -547,15 +547,9 @@ static void sessiond_cleanup(void)
         */
        utils_close_pipe(thread_quit_pipe);
 
-       /*
-        * If config.pid_file_path.value is undefined, the default file will be
-        * wiped when removing the rundir.
-        */
-       if (config.pid_file_path.value) {
-               ret = remove(config.pid_file_path.value);
-               if (ret < 0) {
-                       PERROR("remove pidfile %s", config.pid_file_path.value);
-               }
+       ret = remove(config.pid_file_path.value);
+       if (ret < 0) {
+               PERROR("remove pidfile %s", config.pid_file_path.value);
        }
 
        DBG("Removing sessiond and consumerd content of directory %s",
@@ -2442,7 +2436,8 @@ static pid_t spawn_consumerd(struct consumer_data *consumer_data)
                        } else if (stat(INSTALL_BIN_PATH "/" DEFAULT_CONSUMERD_FILE, &st) == 0) {
                                DBG3("Found location #2");
                                consumer_to_use = INSTALL_BIN_PATH "/" DEFAULT_CONSUMERD_FILE;
-                       } else if (stat(config.consumerd32_bin_path.value, &st) == 0) {
+                       } else if (config.consumerd32_bin_path.value &&
+                                       stat(config.consumerd32_bin_path.value, &st) == 0) {
                                DBG3("Found location #3");
                                consumer_to_use = config.consumerd32_bin_path.value;
                        } else {
@@ -2657,6 +2652,12 @@ static int init_kernel_tracer(void)
        }
 
        DBG("Kernel tracer fd %d", kernel_tracer_fd);
+
+       ret = syscall_init_table();
+       if (ret < 0) {
+               ERR("Unable to populate syscall table. Syscall tracing won't "
+                       "work for this session daemon.");
+       }
        return 0;
 
 error_version:
@@ -4116,9 +4117,17 @@ static void *thread_manage_health(void *data)
        }
 
        if (is_root) {
+               gid_t gid;
+
                /* lttng health client socket path permissions */
+               ret = utils_get_group_id(config.tracing_group_name.value, true,
+                               &gid);
+               if (ret) {
+                       /* Default to root group. */
+                       gid = 0;
+               }
                ret = chown(config.health_unix_sock_path.value, 0,
-                               utils_get_group_id(config.tracing_group_name.value));
+                               gid);
                if (ret < 0) {
                        ERR("Unable to set group on %s", config.health_unix_sock_path.value);
                        PERROR("chown");
@@ -5243,7 +5252,11 @@ static int set_permissions(char *rundir)
        int ret;
        gid_t gid;
 
-       gid = utils_get_group_id(config.tracing_group_name.value);
+       ret = utils_get_group_id(config.tracing_group_name.value, true, &gid);
+       if (ret) {
+               /* Default to root group. */
+               gid = 0;
+       }
 
        /* Set lttng run dir */
        ret = chown(rundir, 0, gid);
@@ -5354,7 +5367,16 @@ static int set_consumer_sockets(struct consumer_data *consumer_data)
                goto error;
        }
        if (is_root) {
-               ret = chown(path, 0, utils_get_group_id(config.tracing_group_name.value));
+               gid_t gid;
+
+               ret = utils_get_group_id(config.tracing_group_name.value, true,
+                               &gid);
+               if (ret) {
+                       /* Default to root group. */
+                       gid = 0;
+               }
+
+               ret = chown(path, 0, gid);
                if (ret < 0) {
                        ERR("Unable to set group on %s", path);
                        PERROR("chown");
@@ -5552,6 +5574,12 @@ int main(int argc, char **argv)
                goto exit_set_signal_handler;
        }
 
+       /*
+        * Init config from environment variables.
+        * Command line option override env configuration per-doc. Do env first.
+        */
+       sessiond_config_apply_env_config(&config);
+
        /*
         * Parse arguments and load the daemon configuration file.
         *
@@ -5566,9 +5594,6 @@ int main(int argc, char **argv)
                goto exit_options;
        }
 
-       /* Init config from environment variables. */
-       sessiond_config_apply_env_config(&config);
-
        /*
         * Resolve all paths received as arguments, configuration option, or
         * through environment variable as absolute paths. This is necessary
@@ -5752,14 +5777,6 @@ int main(int argc, char **argv)
                /* Setup kernel tracer */
                if (!config.no_kernel) {
                        init_kernel_tracer();
-                       if (kernel_tracer_fd >= 0) {
-                               ret = syscall_init_table();
-                               if (ret < 0) {
-                                       ERR("Unable to populate syscall table. "
-                                               "Syscall tracing won't work "
-                                               "for this session daemon.");
-                               }
-                       }
                }
 
                /* Set ulimit for open files */
This page took 0.029856 seconds and 4 git commands to generate.