From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/1238 Path: news.gmane.org!not-for-mail From: Rich Felker Newsgroups: gmane.linux.lib.musl.general Subject: Re: openssh and sendmsg() problem Date: Tue, 26 Jun 2012 12:01:06 -0400 Message-ID: <20120626160106.GJ544@brightrain.aerifal.cx> References: <20120626190146.1c086ed2@sibserver.ru> <20120626120017.GZ17860@port70.net> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: dough.gmane.org 1340726615 18541 80.91.229.3 (26 Jun 2012 16:03:35 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 26 Jun 2012 16:03:35 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-1239-gllmg-musl=m.gmane.org@lists.openwall.com Tue Jun 26 18:03:35 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1SjYEn-0004Hk-1e for gllmg-musl@plane.gmane.org; Tue, 26 Jun 2012 18:03:33 +0200 Original-Received: (qmail 30595 invoked by uid 550); 26 Jun 2012 16:03:33 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 30553 invoked from network); 26 Jun 2012 16:03:14 -0000 Content-Disposition: inline In-Reply-To: <20120626120017.GZ17860@port70.net> User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:1238 Archived-At: On Tue, Jun 26, 2012 at 02:00:17PM +0200, Szabolcs Nagy wrote: > * orc [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