diff --git a/lib/passfd.c b/lib/passfd.c index 573b80e..8b1e68f 100644 --- a/lib/passfd.c +++ b/lib/passfd.c @@ -47,6 +47,8 @@ sendfd (int sock, int fd) struct msghdr msg; /* send at least one char */ + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(struct iovec)); iov[0].iov_base = &send; iov[0].iov_len = 1; msg.msg_iov = iov; @@ -101,6 +103,8 @@ recvfd (int sock, int flags) } /* send at least one char */ + memset(&msg, 0, sizeof(msg)); + memset(&iov, 0, sizeof(struct iovec)); iov[0].iov_base = &recv; iov[0].iov_len = 1; msg.msg_iov = iov; @@ -168,6 +172,12 @@ recvfd (int sock, int flags) msg.msg_accrightslen = sizeof (fd); if (recvmsg (sock, &msg, 0) < 0) return -1; + /* be paranoiac */ + if(msg.msg_accrightslen != sizeof (fd)) + { + errno = EIO; + return -1; + } /* set close-on-exec flag */ if (flags & O_CLOEXEC)