Date: Fri, 21 Dec 2012 04:37:22 -0800 From: Garrett Cooper <yanegomi@gmail.com> To: Kevin Lo <kevlo@freebsd.org> Cc: src-committers@freebsd.org, freebsd-net@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org, Rick Macklem <rmacklem@uoguelph.ca> Subject: Re: Broken error handling with AF_* and socket(2) [was Re: svn commit: r243965 - in head/sys: kern sys] Message-ID: <CAGH67wSZ-BqwS7KotqhynUKWvjkGHUGUswkDcxvF0H_UhM2Jhw@mail.gmail.com> In-Reply-To: <CAGH67wStS8qx_wB2HMNhqQZ2VSBjddx=COav%2BCKHi-xFBn%2BdMg@mail.gmail.com> References: <CAGH67wQhapDDqGjKGgdBwNR7GsJBwTk7Fh7tCuCV4zh7B-Yduw@mail.gmail.com> <CAGH67wStS8qx_wB2HMNhqQZ2VSBjddx=COav%2BCKHi-xFBn%2BdMg@mail.gmail.com>
next in thread | previous in thread | raw e-mail | index | archive | help
(Don't know why I hit reply instead of reply-all, but oh well... I had one more reply anyhow) On Fri, Dec 21, 2012 at 4:28 AM, Garrett Cooper <yanegomi@gmail.com> wrote: > On Fri, Dec 21, 2012 at 4:11 AM, Garrett Cooper <yanegomi@gmail.com> wrote: >> On Thu, Dec 6, 2012 at 6:22 PM, Kevin Lo <kevlo@freebsd.org> wrote: >>> Author: kevlo >>> Date: Fri Dec 7 02:22:48 2012 >>> New Revision: 243965 >>> URL: http://svnweb.freebsd.org/changeset/base/243965 >>> >>> Log: >>> - according to POSIX, make socket(2) return EAFNOSUPPORT rather than >>> EPROTONOSUPPORT if the address family is not supported. >>> - introduce pffinddomain() to find a domain by family and use it as >>> appropriate. >>> >>> Reviewed by: glebius >> >> This commit broke netgraph (and potentially more things). I fixed >> netgraph locally like so: >> >> $ git diff lib/libnetgraph/ >> diff --git a/lib/libnetgraph/sock.c b/lib/libnetgraph/sock.c >> index fca3900..5f9f563 100644 >> --- a/lib/libnetgraph/sock.c >> +++ b/lib/libnetgraph/sock.c >> @@ -71,10 +71,10 @@ NgMkSockNode(const char *name, int *csp, int *dsp) >> name = NULL; >> >> /* Create control socket; this also creates the netgraph node. >> - If we get an EPROTONOSUPPORT then the socket node type is >> + If we get an EAFNOSUPPORT then the socket node type is >> not loaded, so load it and try again. */ >> if ((cs = socket(AF_NETGRAPH, SOCK_DGRAM, NG_CONTROL)) < 0) { >> - if (errno == EPROTONOSUPPORT) { >> + if (errno == EAFNOSUPPORT) { >> if (kldload(NG_SOCKET_KLD) < 0) { >> errnosv = errno; >> if (_gNgDebugLevel >= 1) >> >> Reproing the issue was trivial using the ether.bridge example >> script setup with appropriate interfaces. >> I have the patch with the netgraph fix attached, along with other >> potential fixes that needs to be more properly tested. > > usr.sbin/mountd/mountd.c > usr.sbin/rpcbind/rpcbind.c > usr.sbin/ypserv/yp_main.c > > might be broken as well because they're calling __rpc_nconf2fd, > which just wraps socket(2) underneath it all. > At this point it might be wise to consider doing something about > the ABI because the contract has been grossly changed enough that > things that tried to make sense of sockets with EPROTONOSUPPORT are > going to have issues now on FreeBSD [potentially] in either positive > or negative cases. My fix wasn't necessarily the right answer for netgraph, et al. It was just what I needed in order to get it to function with the new socket(2) API. Thanks, -Garrett
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGH67wSZ-BqwS7KotqhynUKWvjkGHUGUswkDcxvF0H_UhM2Jhw>