From 156ea65a3ff80c6d3f2b0330f23bb85a55618236 Mon Sep 17 00:00:00 2001 From: Mathieu Desnoyers Date: Mon, 6 Feb 2012 22:59:36 -0500 Subject: [PATCH] Zero-initialize struct msghdr ==27395== Syscall param socketcall.sendmsg(msg.msg_iov[i]) points to uninitialised byte(s) ==27395== at 0x546C6A0: __sendmsg_nocancel (syscall-template.S:82) ==27395== by 0x4E30880: lttcomm_send_creds_unix_sock (sessiond-comm.c:449) ==27395== by 0x4E2F584: ask_sessiond (lttng-ctl.c:99) ==27395== by 0x4E2FC85: lttng_list_tracepoints (lttng-ctl.c:667) ==27395== by 0x4039C1: cmd_list (list.c:314) ==27395== by 0x40217C: main (lttng.c:266) Signed-off-by: Mathieu Desnoyers --- src/common/sessiond-comm/sessiond-comm.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/common/sessiond-comm/sessiond-comm.c b/src/common/sessiond-comm/sessiond-comm.c index 24757f702..2b5c226c1 100644 --- a/src/common/sessiond-comm/sessiond-comm.c +++ b/src/common/sessiond-comm/sessiond-comm.c @@ -250,10 +250,12 @@ 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; @@ -274,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; @@ -314,7 +318,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; @@ -322,6 +326,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; @@ -363,9 +369,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; @@ -419,7 +427,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; @@ -427,6 +435,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; @@ -462,13 +472,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; -- 2.34.1