projects
/
lttng-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
lttng-ctl: fix: possible unaligned access in packed structure
[lttng-tools.git]
/
src
/
lib
/
lttng-ctl
/
lttng-ctl.c
diff --git
a/src/lib/lttng-ctl/lttng-ctl.c
b/src/lib/lttng-ctl/lttng-ctl.c
index f6fadcb6adaadb16ccb21cb2fb0ad752581b1050..9cd77cb35e0b7e2260c59b4a55c7c4fd7680d488 100644
(file)
--- a/
src/lib/lttng-ctl/lttng-ctl.c
+++ b/
src/lib/lttng-ctl/lttng-ctl.c
@@
-60,6
+60,13
@@
do { \
} while (0)
#endif
} 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;
/* Socket to session daemon for communication */
static int sessiond_socket;
@@
-208,15
+215,13
@@
end:
LTTNG_HIDDEN
int lttng_check_tracing_group(void)
{
LTTNG_HIDDEN
int lttng_check_tracing_group(void)
{
- struct group *grp_tracing; /* no free(). See getgrnam(3) */
- gid_t *grp_list;
+ gid_t *grp_list, tracing_gid;
int grp_list_size, grp_id, i;
int ret = -1;
const char *grp_name = tracing_group;
/* Get GID of group 'tracing' */
int grp_list_size, grp_id, i;
int ret = -1;
const char *grp_name = tracing_group;
/* Get GID of group 'tracing' */
- grp_tracing = getgrnam(grp_name);
- if (!grp_tracing) {
+ if (utils_get_group_id(grp_name, false, &tracing_gid)) {
/* If grp_tracing is NULL, the group does not exist. */
goto end;
}
/* If grp_tracing is NULL, the group does not exist. */
goto end;
}
@@
-241,7
+246,7
@@
int lttng_check_tracing_group(void)
}
for (i = 0; i < grp_list_size; i++) {
}
for (i = 0; i < grp_list_size; i++) {
- if (grp_list[i] ==
grp_tracing->gr
_gid) {
+ if (grp_list[i] ==
tracing
_gid) {
ret = 1;
break;
}
ret = 1;
break;
}
@@
-567,7
+572,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));
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));
lttng_ctl_copy_string(lsm.u.reg.path, socket_path,
sizeof(lsm.u.reg.path));
@@
-698,7
+703,7
@@
int lttng_add_context(struct lttng_handle *handle,
sizeof(lsm.u.context.channel_name));
}
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));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
@@
-1036,8
+1041,7
@@
int lttng_enable_event_with_exclusions(struct lttng_handle *handle,
lttng_ctl_copy_string(ev->name, "*", sizeof(ev->name));
}
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,
memcpy(&lsm.u.enable.event, ev, sizeof(lsm.u.enable.event));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
@@
-1205,8
+1209,7
@@
int lttng_disable_event_ext(struct lttng_handle *handle,
lsm.cmd_type = LTTNG_DISABLE_EVENT;
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,
memcpy(&lsm.u.disable.event, ev, sizeof(lsm.u.disable.event));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
@@
-1441,7
+1444,7
@@
int lttng_enable_channel(struct lttng_handle *handle,
}
lsm.cmd_type = LTTNG_ENABLE_CHANNEL;
}
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));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
@@
-1469,7
+1472,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_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));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
@@
-1495,7
+1498,7
@@
int lttng_track_pid(struct lttng_handle *handle, int pid)
lsm.cmd_type = LTTNG_TRACK_PID;
lsm.u.pid_tracker.pid = 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));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
@@
-1521,7
+1524,7
@@
int lttng_untrack_pid(struct lttng_handle *handle, int pid)
lsm.cmd_type = LTTNG_UNTRACK_PID;
lsm.u.pid_tracker.pid = 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));
lttng_ctl_copy_string(lsm.session.name, handle->session_name,
sizeof(lsm.session.name));
@@
-1547,7
+1550,7
@@
int lttng_list_tracepoints(struct lttng_handle *handle,
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_TRACEPOINTS;
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) {
ret = lttng_ctl_ask_sessiond(&lsm, (void **) events);
if (ret < 0) {
@@
-1575,7
+1578,7
@@
int lttng_list_tracepoint_fields(struct lttng_handle *handle,
memset(&lsm, 0, sizeof(lsm));
lsm.cmd_type = LTTNG_LIST_TRACEPOINT_FIELDS;
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) {
ret = lttng_ctl_ask_sessiond(&lsm, (void **) fields);
if (ret < 0) {
@@
-1820,7
+1823,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_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) {
ret = lttng_ctl_ask_sessiond(&lsm, (void**) channels);
if (ret < 0) {
@@
-1877,7
+1880,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));
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_varlen(&lsm, NULL, 0, (void **) events,
(void **) &cmd_header, &cmd_header_len);
ret = lttng_ctl_ask_sessiond_varlen(&lsm, NULL, 0, (void **) events,
(void **) &cmd_header, &cmd_header_len);
@@
-2321,7
+2324,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_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) {
size = uri_parse_str_urls(control_url, data_url, &uris);
if (size < 0) {
@@
-2449,6
+2452,10
@@
int lttng_data_pending(const char *session_name)
/* Unexpected payload size */
ret = -LTTNG_ERR_INVALID;
goto end;
/* Unexpected payload size */
ret = -LTTNG_ERR_INVALID;
goto end;
+ } else if (!pending) {
+ /* Internal error. */
+ ret = -LTTNG_ERR_UNK;
+ goto end;
}
ret = (int) *pending;
}
ret = (int) *pending;
@@
-2568,13
+2575,16
@@
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));
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) {
return ret;
}
nr_pids = ret / sizeof(int32_t);
ret = lttng_ctl_ask_sessiond(&lsm, (void **) &pids);
if (ret < 0) {
return ret;
}
nr_pids = ret / sizeof(int32_t);
+ if (nr_pids > 0 && !pids) {
+ return -LTTNG_ERR_UNK;
+ }
if (nr_pids == 1 && pids[0] == -1) {
free(pids);
pids = NULL;
if (nr_pids == 1 && pids[0] == -1) {
free(pids);
pids = NULL;
This page took
0.026529 seconds
and
4
git commands to generate.