workaround another sendmsg kernel bug on 64-bit machines

the kernel wrongly expects the cmsg length field to be size_t instead
of socklen_t. in order to work around the issue, we have to impose a
length limit and copy to a local buffer. the length limit should be
more than sufficient for any real-world use; these headers are only
used for passing file descriptors and permissions between processes
over unix sockets.
This commit is contained in:
Rich Felker
2012-07-12 21:37:54 -04:00
parent 90e123f4a8
commit 96107564e2
6 changed files with 42 additions and 7 deletions

View File

@ -17,13 +17,6 @@ extern "C" {
#include <bits/socket.h>
struct cmsghdr
{
socklen_t cmsg_len;
int cmsg_level;
int cmsg_type;
};
struct ucred
{
pid_t pid;