|
Message-ID: <20120626160106.GJ544@brightrain.aerifal.cx> Date: Tue, 26 Jun 2012 12:01:06 -0400 From: Rich Felker <dalias@...ifal.cx> To: musl@...ts.openwall.com Subject: Re: openssh and sendmsg() problem On Tue, Jun 26, 2012 at 02:00:17PM +0200, Szabolcs Nagy wrote: > * orc <orc@...server.ru> [2012-06-26 19:01:46 +0800]: > > strace shows that sendmsg system call returns EINVAL: > > > > sendmsg(5, {msg_name(0)=NULL, msg_iov(1)=[{"\0", 1}], msg_controllen=24, {cmsg_len=20, cmsg_level=SOL_SOCKET, cmsg_ > > type=SCM_RIGHTS, {4, 385875968}}, msg_flags=0}, 0) = -1 EINVAL (Invalid argument) > > > > src/network/sendmsg.c has an ifdef for long>int case > > i don't know what it's supposed to do It's there because the kernel expects certain fields to be long but POSIX requires them to be int. Thus the syscall wrapper has to copy the userspace struct (with int and padding) to a kernel-format struct (with the padding filled with 0's so it's a valid long). > you may want to change the struct msghdr definition > in arch/*/bits/socket.h > (eg to the one in your /usr/include/bits/socket.h) > and remove the ifdef from sendmsg.c Nope, this is not valid. See above. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.