X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Fsessiond-comm%2Fsessiond-comm.c;h=0c29003a6267a382b204a6f277a9d0a1468ad182;hb=aeb968923d1245f4cb2be1eed2ab7b8b5eb45cf8;hp=59b76aae1c125827792d781f2b0362567f70e63b;hpb=10a8a2237343699e3923d87e24dbf2d7fe225377;p=lttng-tools.git diff --git a/src/common/sessiond-comm/sessiond-comm.c b/src/common/sessiond-comm/sessiond-comm.c index 59b76aae1..0c29003a6 100644 --- a/src/common/sessiond-comm/sessiond-comm.c +++ b/src/common/sessiond-comm/sessiond-comm.c @@ -28,6 +28,8 @@ #include #include +#include + #include "sessiond-comm.h" /* @@ -45,7 +47,7 @@ static const char *lttcomm_readable_code[] = { [ LTTCOMM_ERR_INDEX(LTTCOMM_SESS_NOT_FOUND) ] = "Session name not found", [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACE) ] = "No trace found", [ LTTCOMM_ERR_INDEX(LTTCOMM_FATAL) ] = "Fatal error of the session daemon", - [ LTTCOMM_ERR_INDEX(LTTCOMM_CREATE_FAIL) ] = "Create trace failed", + [ LTTCOMM_ERR_INDEX(LTTCOMM_CREATE_DIR_FAIL) ] = "Create directory failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_START_FAIL) ] = "Start trace failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_STOP_FAIL) ] = "Stop trace failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_NO_TRACEABLE) ] = "App is not traceable", @@ -55,6 +57,7 @@ static const char *lttcomm_readable_code[] = { [ LTTCOMM_ERR_INDEX(LTTCOMM_APP_NOT_FOUND) ] = "Application not found", [ LTTCOMM_ERR_INDEX(LTTCOMM_EPERM) ] = "Permission denied", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NA) ] = "Kernel tracer not available", + [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_VERSION) ] = "Kernel tracer version is not compatible", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_EVENT_EXIST) ] = "Kernel event already exists", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_SESS_FAIL) ] = "Kernel create session failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_CHAN_FAIL) ] = "Kernel create channel failed", @@ -73,6 +76,8 @@ static const char *lttcomm_readable_code[] = { [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_DIR_EXIST) ] = "Kernel trace directory already exist", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_NO_SESSION) ] = "No kernel session found", [ LTTCOMM_ERR_INDEX(LTTCOMM_KERN_LIST_FAIL) ] = "Listing kernel events failed", + [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_CALIBRATE_FAIL) ] = "UST calibration failed", + [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_VERSION) ] = "UST tracer version is not compatible", [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_SESS_FAIL) ] = "UST create session failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_CHAN_FAIL) ] = "UST create channel failed", [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_CHAN_EXIST) ] = "UST channel already exist", @@ -95,6 +100,7 @@ static const char *lttcomm_readable_code[] = { [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_EVENT_EXIST) ] = "UST event already exist", [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_EVENT_NOT_FOUND)] = "UST event not found", [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_CONTEXT_EXIST)] = "UST context already exist", + [ LTTCOMM_ERR_INDEX(LTTCOMM_UST_CONTEXT_INVAL)] = "UST invalid context", [ LTTCOMM_ERR_INDEX(CONSUMERD_COMMAND_SOCK_READY) ] = "consumerd command socket ready", [ LTTCOMM_ERR_INDEX(CONSUMERD_SUCCESS_RECV_FD) ] = "consumerd success on receiving fds", [ LTTCOMM_ERR_INDEX(CONSUMERD_ERROR_RECV_FD) ] = "consumerd error on receiving fds", @@ -244,16 +250,18 @@ int lttcomm_listen_unix_sock(int sock) */ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len) { - struct msghdr msg = { 0 }; + struct msghdr msg; struct iovec iov[1]; ssize_t ret = -1; + memset(&msg, 0, sizeof(msg)); + iov[0].iov_base = buf; iov[0].iov_len = len; msg.msg_iov = iov; msg.msg_iovlen = 1; - ret = recvmsg(sock, &msg, 0); + ret = recvmsg(sock, &msg, MSG_WAITALL); if (ret < 0) { perror("recvmsg"); } @@ -268,10 +276,12 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len) */ ssize_t lttcomm_send_unix_sock(int sock, void *buf, size_t len) { - struct msghdr msg = { 0 }; + struct msghdr msg; struct iovec iov[1]; ssize_t ret = -1; + memset(&msg, 0, sizeof(msg)); + iov[0].iov_base = buf; iov[0].iov_len = len; msg.msg_iov = iov; @@ -298,6 +308,8 @@ int lttcomm_close_unix_sock(int sock) perror("shutdown"); } + close(sock); + return ret; } @@ -308,7 +320,7 @@ int lttcomm_close_unix_sock(int sock) */ ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd) { - struct msghdr msg = { 0 }; + struct msghdr msg; struct cmsghdr *cmptr; struct iovec iov[1]; ssize_t ret = -1; @@ -316,6 +328,8 @@ ssize_t lttcomm_send_fds_unix_sock(int sock, int *fds, size_t nb_fd) char tmp[CMSG_SPACE(sizeof_fds)]; char dummy = 0; + memset(&msg, 0, sizeof(msg)); + if (nb_fd > LTTCOMM_MAX_SEND_FDS) return -EINVAL; @@ -357,9 +371,11 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd) struct cmsghdr *cmsg; size_t sizeof_fds = nb_fd * sizeof(int); char recv_fd[CMSG_SPACE(sizeof_fds)]; - struct msghdr msg = { 0 }; + struct msghdr msg; char dummy; + memset(&msg, 0, sizeof(msg)); + /* Prepare to receive the structures */ iov[0].iov_base = &dummy; iov[0].iov_len = 1; @@ -413,7 +429,7 @@ end: */ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len) { - struct msghdr msg = { 0 }; + struct msghdr msg; struct cmsghdr *cmptr; struct iovec iov[1]; ssize_t ret = -1; @@ -421,6 +437,8 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len) size_t sizeof_cred = sizeof(struct ucred); char anc_buf[CMSG_SPACE(sizeof_cred)]; + memset(&msg, 0, sizeof(msg)); + iov[0].iov_base = buf; iov[0].iov_len = len; msg.msg_iov = iov; @@ -456,13 +474,15 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, void *buf, size_t len) ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, struct ucred *creds) { - struct msghdr msg = { 0 }; + struct msghdr msg; struct cmsghdr *cmptr; struct iovec iov[1]; ssize_t ret; size_t sizeof_cred = sizeof(struct ucred); char anc_buf[CMSG_SPACE(sizeof_cred)]; + memset(&msg, 0, sizeof(msg)); + /* Not allowed */ if (creds == NULL) { ret = -1;