Module Name: src Committed By: rtr Date: Sat May 2 20:10:26 UTC 2015
Modified Files: src/sys/kern: uipc_socket.c Log Message: make soconnect() fail with EAFNOSUPPORT if the domain of the socket does not match family received in the sockaddr. * connect() now fails as documented in connect(2). * atf test t_connect:connect_foreign_family now passes. To generate a diff of this commit: cvs rdiff -u -r1.240 -r1.241 src/sys/kern/uipc_socket.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/kern/uipc_socket.c diff -u src/sys/kern/uipc_socket.c:1.240 src/sys/kern/uipc_socket.c:1.241 --- src/sys/kern/uipc_socket.c:1.240 Sat May 2 17:18:03 2015 +++ src/sys/kern/uipc_socket.c Sat May 2 20:10:26 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: uipc_socket.c,v 1.240 2015/05/02 17:18:03 rtr Exp $ */ +/* $NetBSD: uipc_socket.c,v 1.241 2015/05/02 20:10:26 rtr Exp $ */ /*- * Copyright (c) 2002, 2007, 2008, 2009 The NetBSD Foundation, Inc. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.240 2015/05/02 17:18:03 rtr Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uipc_socket.c,v 1.241 2015/05/02 20:10:26 rtr Exp $"); #include "opt_compat_netbsd.h" #include "opt_sock_counters.h" @@ -827,10 +827,15 @@ soconnect(struct socket *so, struct sock */ if (so->so_state & (SS_ISCONNECTED|SS_ISCONNECTING) && ((so->so_proto->pr_flags & PR_CONNREQUIRED) || - (error = sodisconnect(so)))) + (error = sodisconnect(so)))) { error = EISCONN; - else + } else { + if (NULL != nam && + nam->sa_family != so->so_proto->pr_domain->dom_family) { + return EAFNOSUPPORT; + } error = (*so->so_proto->pr_usrreqs->pr_connect)(so, nam, l); + } return error; }