Date: Sun, 3 May 2009 04:57:03 +0100 (BST) From: Robert Watson <rwatson@FreeBSD.org> To: Dmitry Chagin <dchagin@FreeBSD.org> Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org Subject: Re: svn commit: r191742 - head/sys/compat/linux Message-ID: <alpine.BSF.2.00.0905030442320.41143@fledge.watson.org> In-Reply-To: <200905021051.n42ApetI083033@svn.freebsd.org> References: <200905021051.n42ApetI083033@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Sat, 2 May 2009, Dmitry Chagin wrote: > Linux socketpair() call expects explicit specified protocol for > AF_LOCAL domain unlike FreeBSD which expects 0 in this case. ... > @@ -859,7 +859,10 @@ linux_socketpair(struct thread *td, stru > return (EINVAL); > > bsd_args.type = args->type; > - bsd_args.protocol = args->protocol; > + if (bsd_args.domain == AF_LOCAL && args->protocol == PF_UNIX) > + bsd_args.protocol = 0; > + else > + bsd_args.protocol = args->protocol; > bsd_args.rsv = (int *)PTRIN(args->rsv); > return (socketpair(td, &bsd_args)); > } I think I'd tweak this to be more like: if (bsd_args.domain == PF_LOCAL) { if (bsd_args.protocol == PF_UNIX) bsd_args.protocl = 0; else if (bsd_args.protocol != 0) return (EPROTONOSUPPORT); } Because (a) the domain argument takes a protocol family in FreeBSD and you're passing arguments into the BSD ABI without a mapping for that field, and (b) for the protocol family the use of PF_UNIX is weird but must be supported, so I'd consider it to be an entirely mapped namespace and avoid passing through values that aren't 0 to the BSD layer as it's not clear what that would mean. Robert N M Watson Computer Laboratory University of Cambridge
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?alpine.BSF.2.00.0905030442320.41143>