X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ust-ctl%2Fustctl.c;h=6faaef5ed44ff4fcc88a31b181ddd511c3f87cce;hb=a616fb4e0a0245ae2cbd4614910480df19aa23d6;hp=46a1c89dee6f568a21188c12c840fe79222280be;hpb=92d3cba45e0f6ffd5d81bbba7b2d7011b0b18de1;p=lttng-ust.git diff --git a/src/lib/lttng-ust-ctl/ustctl.c b/src/lib/lttng-ust-ctl/ustctl.c index 46a1c89d..6faaef5e 100644 --- a/src/lib/lttng-ust-ctl/ustctl.c +++ b/src/lib/lttng-ust-ctl/ustctl.c @@ -1,7 +1,7 @@ /* * SPDX-License-Identifier: GPL-2.0-only * - * Copyright (C) 2011 Julien Desfossez + * Copyright (C) 2011 EfficiOS Inc. * Copyright (C) 2011-2013 Mathieu Desnoyers */ @@ -394,15 +394,15 @@ int lttng_ust_ctl_add_context(int sock, struct lttng_ust_context_attr *ctx, } ret = ustcomm_recv_app_reply(sock, &lur, lum.handle, lum.cmd); if (ret < 0) { + if (ret == -EINVAL) { + /* + * Command unknown from remote end. The communication socket is + * now out-of-sync and needs to be shutdown. + */ + (void) ustcomm_shutdown_unix_sock(sock); + } goto end; - } else if (ret == -EINVAL) { - /* - * Command unknown from remote end. The communication socket is - * now out-of-sync and needs to be shutdown. - */ - (void) ustcomm_shutdown_unix_sock(sock); } - context_data->handle = -1; DBG("Context created successfully"); *_context_data = context_data; @@ -1257,7 +1257,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.channel.wakeup_fd = dup(src->u.channel.wakeup_fd); if (obj->u.channel.wakeup_fd < 0) { - ret = errno; + ret = -errno; goto chan_error_wakeup_fd; } } else { @@ -1293,7 +1293,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.stream.wakeup_fd = dup(src->u.stream.wakeup_fd); if (obj->u.stream.wakeup_fd < 0) { - ret = errno; + ret = -errno; goto stream_error_wakeup_fd; } } else { @@ -1305,7 +1305,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.stream.shm_fd = dup(src->u.stream.shm_fd); if (obj->u.stream.shm_fd < 0) { - ret = errno; + ret = -errno; goto stream_error_shm_fd; } } else { @@ -1344,7 +1344,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.counter_global.shm_fd = dup(src->u.counter_global.shm_fd); if (obj->u.counter_global.shm_fd < 0) { - ret = errno; + ret = -errno; goto error_type; } } @@ -1358,7 +1358,7 @@ int lttng_ust_ctl_duplicate_ust_object_data(struct lttng_ust_abi_object_data **d obj->u.counter_cpu.shm_fd = dup(src->u.counter_cpu.shm_fd); if (obj->u.counter_cpu.shm_fd < 0) { - ret = errno; + ret = -errno; goto error_type; } } @@ -1384,7 +1384,7 @@ error: int lttng_ust_ctl_get_nr_stream_per_channel(void) { - return num_possible_cpus(); + return get_possible_cpus_array_len(); } struct lttng_ust_ctl_consumer_channel * @@ -2408,7 +2408,6 @@ int get_cred(int sock, /* * Override application uid/gid with unix socket credentials. Use the * first group of the cr_groups. - * Use the pid and ppid provided by the application on registration. */ static int get_cred(int sock, @@ -2422,21 +2421,25 @@ int get_cred(int sock, socklen_t xucred_len = sizeof(struct xucred); int ret; - ret = getsockopt(sock, SOL_SOCKET, LOCAL_PEERCRED, &xucred, &xucred_len); + ret = getsockopt(sock, SOL_LOCAL, LOCAL_PEERCRED, &xucred, &xucred_len); if (ret) { return -LTTNG_UST_ERR_PEERCRED; } if (xucred.cr_version != XUCRED_VERSION || xucred.cr_ngroups < 1) { return -LTTNG_UST_ERR_PEERCRED; } - DBG("Unix socket peercred [ uid: %u, gid: %u ], " - "application registered claiming [ pid: %d, ppid: %d, uid: %u, gid: %u ]", - xucred.cr_uid, xucred.cr_groups[0], + DBG("Unix socket peercred [ pid: %u, uid: %u, gid: %u ], " + "application registered claiming [ pid: %u, ppid: %u, uid: %u, gid: %u ]", + xucred.cr_pid, xucred.cr_uid, xucred.cr_groups[0], reg_msg->pid, reg_msg->ppid, reg_msg->uid, reg_msg->gid); - *pid = reg_msg->pid; - *ppid = reg_msg->ppid; + *pid = xucred.cr_pid; *uid = xucred.cr_uid; *gid = xucred.cr_groups[0]; + if (xucred.cr_pid == reg_msg->pid) { + *ppid = reg_msg->ppid; + } else { + *ppid = 0; + } return 0; } #else @@ -2901,7 +2904,7 @@ int lttng_ust_ctl_regenerate_statedump(int sock, int handle) int lttng_ust_ctl_get_nr_cpu_per_counter(void) { - return num_possible_cpus(); + return get_possible_cpus_array_len(); } struct lttng_ust_ctl_daemon_counter *