From: Eric Blake Date: Wed, 30 Mar 2011 20:46:02 +0000 (-0600) Subject: passfd: fix incorrect sendmsg arguments X-Git-Tag: v0.1~3015 X-Git-Url: http://erislabs.org.uk/gitweb/?a=commitdiff_plain;h=f607f2cd9dfb5f1d0d48c1ec14fff9677065efbf;p=gnulib.git passfd: fix incorrect sendmsg arguments The unit test hung on NetBSD, which pointed out a couple of bugs. * lib/passfd.c (sendfd): Avoid uninitialized msg_flags field, and incorrect msg_controllen value. * modules/passfd-tests (Depends-on): Check for alarm. * tests/test-passfd.c (main) [HAVE_DECL_ALARM]: Avoid hanging test. Reported by Bastien ROUCARIES. Signed-off-by: Eric Blake --- diff --git a/ChangeLog b/ChangeLog index 27f309f26..0b7596d72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2011-03-30 Eric Blake + + passfd: fix incorrect sendmsg arguments + * lib/passfd.c (sendfd): Avoid uninitialized msg_flags field, and + incorrect msg_controllen value. + * modules/passfd-tests (Depends-on): Check for alarm. + * tests/test-passfd.c (main) [HAVE_DECL_ALARM]: Avoid hanging test. + Reported by Bastien ROUCARIES. + 2011-03-30 Bruno Haible c-strcasestr: Relicense under LGPLv2+. diff --git a/lib/passfd.c b/lib/passfd.c index 573b80e45..5bf400d3e 100644 --- a/lib/passfd.c +++ b/lib/passfd.c @@ -47,6 +47,7 @@ sendfd (int sock, int fd) struct msghdr msg; /* send at least one char */ + memset (&msg, 0, sizeof msg); iov[0].iov_base = &send; iov[0].iov_len = 1; msg.msg_iov = iov; @@ -67,7 +68,6 @@ sendfd (int sock, int fd) cmsg->cmsg_len = CMSG_LEN (sizeof (int)); /* Initialize the payload: */ memcpy (CMSG_DATA (cmsg), &fd, sizeof (fd)); - msg.msg_controllen = cmsg->cmsg_len; #elif HAVE_UNIXSOCKET_SCM_RIGHTS_BSD43_WAY msg.msg_accrights = &fd; msg.msg_accrightslen = sizeof (fd); diff --git a/modules/passfd-tests b/modules/passfd-tests index 132679c17..477754b2b 100644 --- a/modules/passfd-tests +++ b/modules/passfd-tests @@ -5,6 +5,7 @@ tests/macros.h Depends-on: configure.ac: +AC_CHECK_DECLS_ONCE([alarm]) Makefile.am: TESTS += test-passfd diff --git a/tests/test-passfd.c b/tests/test-passfd.c index 20489348b..d657ad9d6 100644 --- a/tests/test-passfd.c +++ b/tests/test-passfd.c @@ -19,6 +19,7 @@ #include "passfd.h" #include +#include #include #include #include @@ -40,6 +41,12 @@ main () int fd; struct stat st; +#if HAVE_DECL_ALARM + /* Avoid hanging on failure. */ + signal (SIGALRM, SIG_DFL); + alarm (5); +#endif + fdnull = open ("/dev/null", O_RDWR); if (fdnull < 0) {