sessiond: fix: possible unaligned access in packed structure
[lttng-tools.git] / src / bin / lttng-sessiond / client.c
index 02eac96e422f8c8f3067df10c7c040c9eb1d02cd..956dab8c867413b5cc4e2c79c75cd5e8e1a3bd28 100644 (file)
@@ -410,7 +410,7 @@ error:
  * Should *NOT* be called with RCU read-side lock held.
  */
 static int create_ust_session(struct ltt_session *session,
-               struct lttng_domain *domain)
+               const struct lttng_domain *domain)
 {
        int ret;
        struct ltt_ust_session *lus = NULL;
@@ -478,7 +478,7 @@ static int create_kernel_session(struct ltt_session *session)
 
        DBG("Creating kernel session");
 
-       ret = kernel_create_session(session, kernel_tracer_fd);
+       ret = kernel_create_session(session);
        if (ret < 0) {
                ret = LTTNG_ERR_KERN_SESS_FAIL;
                goto error_create;
@@ -879,6 +879,15 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int *sock,
                        goto error;
                }
 
+               /* Kernel tracer check */
+               if (!kernel_tracer_is_initialized()) {
+                       /* Basically, load kernel tracer modules */
+                       ret = init_kernel_tracer();
+                       if (ret != 0) {
+                               goto error;
+                       }
+               }
+
                /* Consumer is in an ERROR state. Report back to client */
                if (uatomic_read(&kernel_consumerd_state) == CONSUMER_ERROR) {
                        ret = LTTNG_ERR_NO_KERNCONSUMERD;
@@ -941,7 +950,7 @@ static int process_client_msg(struct command_ctx *cmd_ctx, int *sock,
                        /* Create UST session if none exist. */
                        if (cmd_ctx->session->ust_session == NULL) {
                                ret = create_ust_session(cmd_ctx->session,
-                                               &cmd_ctx->lsm->domain);
+                                               ALIGNED_CONST_PTR(cmd_ctx->lsm->domain));
                                if (ret != LTTNG_OK) {
                                        goto error;
                                }
@@ -1130,7 +1139,7 @@ skip_domain:
                ret = cmd_add_context(cmd_ctx->session,
                                cmd_ctx->lsm->domain.type,
                                cmd_ctx->lsm->u.context.channel_name,
-                               &cmd_ctx->lsm->u.context.ctx,
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.context.ctx),
                                kernel_poll_pipe[1]);
 
                cmd_ctx->lsm->u.context.ctx.u.app_ctx.provider_name = NULL;
@@ -1178,18 +1187,18 @@ error_add_context:
                                count -= (size_t) ret;
                        }
                }
-               /* FIXME: passing packed structure to non-packed pointer */
                ret = cmd_disable_event(cmd_ctx->session, cmd_ctx->lsm->domain.type,
                                cmd_ctx->lsm->u.disable.channel_name,
-                               &cmd_ctx->lsm->u.disable.event);
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.disable.event));
                break;
        }
        case LTTNG_ENABLE_CHANNEL:
        {
                cmd_ctx->lsm->u.channel.chan.attr.extended.ptr =
                                (struct lttng_channel_extended *) &cmd_ctx->lsm->u.channel.extended;
-               ret = cmd_enable_channel(cmd_ctx->session, &cmd_ctx->lsm->domain,
-                               &cmd_ctx->lsm->u.channel.chan,
+               ret = cmd_enable_channel(cmd_ctx->session,
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->domain),
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.channel.chan),
                                kernel_poll_pipe[1]);
                break;
        }
@@ -1311,7 +1320,7 @@ error_add_context:
                        }
                }
 
-               ev = lttng_event_copy(&cmd_ctx->lsm->u.enable.event);
+               ev = lttng_event_copy(ALIGNED_CONST_PTR(cmd_ctx->lsm->u.enable.event));
                if (!ev) {
                        DBG("Failed to copy event: %s",
                                        cmd_ctx->lsm->u.enable.event.name);
@@ -1335,7 +1344,8 @@ error_add_context:
                        }
                }
 
-               ret = cmd_enable_event(cmd_ctx->session, &cmd_ctx->lsm->domain,
+               ret = cmd_enable_event(cmd_ctx->session,
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->domain),
                                cmd_ctx->lsm->u.enable.channel_name,
                                ev,
                                filter_expression, bytecode, exclusion,
@@ -1703,13 +1713,16 @@ error_add_context:
        }
        case LTTNG_SNAPSHOT_ADD_OUTPUT:
        {
+               uint32_t snapshot_id;
                struct lttcomm_lttng_output_id reply;
 
                ret = cmd_snapshot_add_output(cmd_ctx->session,
-                               &cmd_ctx->lsm->u.snapshot_output.output, &reply.id);
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.snapshot_output.output),
+                               &snapshot_id);
                if (ret != LTTNG_OK) {
                        goto error;
                }
+               reply.id = snapshot_id;
 
                ret = setup_lttng_msg_no_cmd_header(cmd_ctx, &reply,
                        sizeof(reply));
@@ -1724,7 +1737,7 @@ error_add_context:
        case LTTNG_SNAPSHOT_DEL_OUTPUT:
        {
                ret = cmd_snapshot_del_output(cmd_ctx->session,
-                               &cmd_ctx->lsm->u.snapshot_output.output);
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.snapshot_output.output));
                break;
        }
        case LTTNG_SNAPSHOT_LIST_OUTPUT:
@@ -1753,7 +1766,7 @@ error_add_context:
        case LTTNG_SNAPSHOT_RECORD:
        {
                ret = cmd_snapshot_record(cmd_ctx->session,
-                               &cmd_ctx->lsm->u.snapshot_record.output,
+                               ALIGNED_CONST_PTR(cmd_ctx->lsm->u.snapshot_record.output),
                                cmd_ctx->lsm->u.snapshot_record.wait);
                break;
        }
This page took 0.025331 seconds and 4 git commands to generate.