lttng-ctl: fix: possible unaligned access in packed structure
[lttng-tools.git] / src / lib / lttng-ctl / lttng-ctl.c
index 9e709c1b6e4157f9072838d3fdbc8f779ed63cda..79644ceed79ae55c7c543de9d0a2af8e680f08bd 100644 (file)
@@ -67,6 +67,13 @@ do {                                                         \
 } while (0)
 #endif
 
+#define COPY_DOMAIN_PACKED(dst, src)                           \
+do {                                                           \
+       struct lttng_domain _tmp_domain;                        \
+                                                               \
+       lttng_ctl_copy_lttng_domain(&_tmp_domain, &src);        \
+       dst = _tmp_domain;                                      \
+} while (0)
 
 /* Socket to session daemon for communication */
 static int sessiond_socket = -1;
@@ -653,7 +660,7 @@ int lttng_register_consumer(struct lttng_handle *handle,
        lsm.cmd_type = LTTNG_REGISTER_CONSUMER;
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        lttng_ctl_copy_string(lsm.u.reg.path, socket_path,
                        sizeof(lsm.u.reg.path));
@@ -784,7 +791,7 @@ int lttng_add_context(struct lttng_handle *handle,
                                sizeof(lsm.u.context.channel_name));
        }
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
 
@@ -1124,8 +1131,7 @@ int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
                lttng_ctl_copy_string(ev->name, "*", sizeof(ev->name));
        }
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
-       /* FIXME: copying non-packed struct to packed struct. */
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
        memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
@@ -1318,8 +1324,7 @@ int lttng_disable_event_ext(struct lttng_handle *handle,
 
        lsm.cmd_type = LTTNG_DISABLE_EVENT;
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
-       /* FIXME: copying non-packed struct to packed struct. */
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
        memcpy(&lsm.u.disable.event, ev, sizeof(lsm.u.disable.event));
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
@@ -1565,7 +1570,7 @@ int lttng_enable_channel(struct lttng_handle *handle,
        }
 
        lsm.cmd_type = LTTNG_ENABLE_CHANNEL;
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
@@ -1593,7 +1598,7 @@ int lttng_disable_channel(struct lttng_handle *handle, const char *name)
        lttng_ctl_copy_string(lsm.u.disable.channel_name, name,
                        sizeof(lsm.u.disable.channel_name));
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
@@ -1619,7 +1624,7 @@ int lttng_track_pid(struct lttng_handle *handle, int pid)
        lsm.cmd_type = LTTNG_TRACK_PID;
        lsm.u.pid_tracker.pid = pid;
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
@@ -1645,7 +1650,7 @@ int lttng_untrack_pid(struct lttng_handle *handle, int pid)
        lsm.cmd_type = LTTNG_UNTRACK_PID;
        lsm.u.pid_tracker.pid = pid;
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
@@ -1671,7 +1676,7 @@ int lttng_list_tracepoints(struct lttng_handle *handle,
 
        memset(&lsm, 0, sizeof(lsm));
        lsm.cmd_type = LTTNG_LIST_TRACEPOINTS;
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        ret = lttng_ctl_ask_sessiond(&lsm, (void **) events);
        if (ret < 0) {
@@ -1699,7 +1704,7 @@ int lttng_list_tracepoint_fields(struct lttng_handle *handle,
 
        memset(&lsm, 0, sizeof(lsm));
        lsm.cmd_type = LTTNG_LIST_TRACEPOINT_FIELDS;
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        ret = lttng_ctl_ask_sessiond(&lsm, (void **) fields);
        if (ret < 0) {
@@ -2201,7 +2206,7 @@ int lttng_list_channels(struct lttng_handle *handle,
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
 
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        ret = lttng_ctl_ask_sessiond(&lsm, (void**) channels);
        if (ret < 0) {
@@ -2261,7 +2266,7 @@ int lttng_list_events(struct lttng_handle *handle,
                        sizeof(lsm.session.name));
        lttng_ctl_copy_string(lsm.u.list.channel_name, channel_name,
                        sizeof(lsm.u.list.channel_name));
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        ret = lttng_ctl_ask_sessiond_fds_varlen(&lsm, NULL, 0, NULL, 0,
                (void **) &reception_buffer, (void **) &cmd_header,
@@ -2788,7 +2793,7 @@ int lttng_set_consumer_url(struct lttng_handle *handle,
 
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        size = uri_parse_str_urls(control_url, data_url, &uris);
        if (size < 0) {
@@ -2896,7 +2901,7 @@ int lttng_list_tracker_pids(struct lttng_handle *handle,
        lsm.cmd_type = LTTNG_LIST_TRACKER_PIDS;
        lttng_ctl_copy_string(lsm.session.name, handle->session_name,
                        sizeof(lsm.session.name));
-       lttng_ctl_copy_lttng_domain(&lsm.domain, &handle->domain);
+       COPY_DOMAIN_PACKED(lsm.domain, handle->domain);
 
        ret = lttng_ctl_ask_sessiond(&lsm, (void **) &pids);
        if (ret < 0) {
This page took 0.026092 seconds and 4 git commands to generate.