X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Fcommon%2Funix.c;h=023bff847273df004c537593cbbbceb012540681;hb=bf8ac2eaec39ba99aaac4de946bbaf3dca4f5539;hp=0e6c329c072c385da4e25836290f60f436ca69e5;hpb=edf4b93e2f5c849cbec49e987990b3705ea49f6a;p=lttng-tools.git diff --git a/src/common/unix.c b/src/common/unix.c index 0e6c329c0..023bff847 100644 --- a/src/common/unix.c +++ b/src/common/unix.c @@ -181,6 +181,10 @@ ssize_t lttcomm_recv_unix_sock(int sock, void *buf, size_t len) ssize_t ret = -1; size_t len_last; + assert(sock); + assert(buf); + assert(len > 0); + memset(&msg, 0, sizeof(msg)); iov[0].iov_base = buf; @@ -223,6 +227,10 @@ ssize_t lttcomm_recv_unix_sock_non_block(int sock, void *buf, size_t len) struct iovec iov[1]; ssize_t ret; + assert(sock); + assert(buf); + assert(len > 0); + memset(&msg, 0, sizeof(msg)); iov[0].iov_base = buf; @@ -271,6 +279,10 @@ ssize_t lttcomm_send_unix_sock(int sock, const void *buf, size_t len) struct iovec iov[1]; ssize_t ret; + assert(sock); + assert(buf); + assert(len > 0); + memset(&msg, 0, sizeof(msg)); iov[0].iov_base = (void *) buf; @@ -321,6 +333,10 @@ ssize_t lttcomm_send_unix_sock_non_block(int sock, const void *buf, size_t len) struct iovec iov[1]; ssize_t ret; + assert(sock); + assert(buf); + assert(len > 0); + memset(&msg, 0, sizeof(msg)); iov[0].iov_base = (void *) buf; @@ -395,6 +411,10 @@ ssize_t lttcomm_send_fds_unix_sock(int sock, const int *fds, size_t nb_fd) char tmp[CMSG_SPACE(sizeof_fds)]; char dummy = 0; + assert(sock); + assert(fds); + assert(nb_fd > 0); + memset(&msg, 0, sizeof(msg)); memset(tmp, 0, sizeof(tmp)); @@ -525,6 +545,10 @@ ssize_t lttcomm_send_fds_unix_sock_non_block(int sock, const int *fds, size_t nb char tmp[CMSG_SPACE(sizeof_fds)]; char dummy = 0; + assert(sock); + assert(fds); + assert(nb_fd > 0); + memset(&msg, 0, sizeof(msg)); memset(tmp, 0, sizeof(tmp)); @@ -614,6 +638,10 @@ ssize_t lttcomm_recv_fds_unix_sock(int sock, int *fds, size_t nb_fd) struct msghdr msg; char dummy; + assert(sock); + assert(fds); + assert(nb_fd > 0); + memset(&msg, 0, sizeof(msg)); /* Prepare to receive the structures */ @@ -730,6 +758,8 @@ enum lttng_error_code add_fds_to_payload(struct lttng_dynamic_array *raw_fds, int *raw_fd = (int *) lttng_dynamic_array_get_element( raw_fds, i); + assert(*raw_fd != -1); + handle = fd_handle_create(*raw_fd); if (!handle) { ret_code = LTTNG_ERR_NOMEM; @@ -755,15 +785,23 @@ static ssize_t _lttcomm_recv_payload_fds_unix_sock(int sock, size_t nb_fd, struct lttng_payload *payload, bool blocking) { + int i = 0; enum lttng_error_code add_ret; ssize_t ret; + int default_value = -1; struct lttng_dynamic_array raw_fds; + assert(sock); + assert(payload); + assert(nb_fd > 0); + lttng_dynamic_array_init(&raw_fds, sizeof(int), close_raw_fd); - ret = lttng_dynamic_array_set_count(&raw_fds, nb_fd); - if (ret) { - ret = -LTTNG_ERR_NOMEM; - goto end; + + for (i = 0; i < nb_fd; i++) { + if (lttng_dynamic_array_add_element(&raw_fds, &default_value)) { + ret = -LTTNG_ERR_NOMEM; + goto end; + } } if (blocking) { @@ -774,7 +812,7 @@ ssize_t _lttcomm_recv_payload_fds_unix_sock(int sock, size_t nb_fd, sock, (int *) raw_fds.buffer.data, nb_fd); } - if (ret < 0) { + if (ret <= 0) { goto end; } @@ -823,6 +861,10 @@ ssize_t lttcomm_recv_fds_unix_sock_non_block(int sock, int *fds, size_t nb_fd) struct cmsghdr *cmsg; size_t sizeof_fds = nb_fd * sizeof(int); + assert(sock); + assert(fds); + assert(nb_fd > 0); + #ifdef __linux__ /* Account for the struct ucred cmsg in the buffer size */ #define LTTNG_SOCK_RECV_FDS_BUF_SIZE CMSG_SPACE(sizeof_fds) + CMSG_SPACE(sizeof(struct ucred)) @@ -961,6 +1003,10 @@ ssize_t lttcomm_send_creds_unix_sock(int sock, const void *buf, size_t len) memset(&msg, 0, sizeof(msg)); + assert(sock); + assert(buf); + assert(len > 0); + iov[0].iov_base = (void *) buf; iov[0].iov_len = len; msg.msg_iov = iov; @@ -1019,13 +1065,12 @@ ssize_t lttcomm_recv_creds_unix_sock(int sock, void *buf, size_t len, char anc_buf[CMSG_SPACE(sizeof_cred)]; #endif /* __linux__ */ - memset(&msg, 0, sizeof(msg)); + assert(sock); + assert(buf); + assert(len > 0); + assert(creds); - /* Not allowed */ - if (creds == NULL) { - ret = -1; - goto end; - } + memset(&msg, 0, sizeof(msg)); /* Prepare to receive the structures */ iov[0].iov_base = buf;