[Bug 191586] FreeBSD doesn't validate negative edgecases in bind(2)/connect(2)/listen(2) like POSIX requires
bugzilla-noreply at freebsd.org
bugzilla-noreply at freebsd.org
Sat Jul 12 16:39:02 UTC 2014
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191586
--- Comment #9 from Kevin Lo <kevlo at FreeBSD.org> ---
Hi Terry,
As you suggested, I asked Vincent Lubet how Mac OS X validates EAFNOSUPPORT
in bind(2). Here is his response.
"xnu version of bind() does not check the address family for AF_INET sockets
for compatibility with older program -- that's a piece of code we inherited
from FreeBSD!
I do not have access to the POSIX test suite code but as Mac OS X was
granted conformance I have to assume the POSIX test suite for bind()
does not test for bogus address family for AF_INET sockets. May be they
only test for AF_UNIX."
Since Mac OS X was granted POSIX conformance, it makes more sense to me
to validate EAFNOSUPPORT in bind(2) for AF_UNIX only.
I think connect(2) should also return EAFNOSUPPORT for AF_UNIX on wrong
address family.
Here is the proposed patch, thanks
Index: sys/kern/uipc_usrreq.c
===================================================================
--- sys/kern/uipc_usrreq.c (revision 268570)
+++ sys/kern/uipc_usrreq.c (working copy)
@@ -467,6 +467,9 @@ uipc_bindat(int fd, struct socket *so, struct sock
cap_rights_t rights;
char *buf;
+ if (nam->sa_family != AF_UNIX)
+ return (EAFNOSUPPORT);
+
unp = sotounpcb(so);
KASSERT(unp != NULL, ("uipc_bind: unp == NULL"));
@@ -1278,6 +1281,9 @@ unp_connectat(int fd, struct socket *so, struct so
cap_rights_t rights;
int error, len;
+ if (nam->sa_family != AF_UNIX)
+ return (EAFNOSUPPORT);
+
UNP_LINK_WLOCK_ASSERT();
unp = sotounpcb(so);
--
You are receiving this mail because:
You are the assignee for the bug.
More information about the freebsd-standards
mailing list