From owner-svn-src-user@FreeBSD.ORG Mon Dec 2 05:57:10 2013 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4663BC90; Mon, 2 Dec 2013 05:57:10 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 32B571328; Mon, 2 Dec 2013 05:57:10 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id rB25vAga056924; Mon, 2 Dec 2013 05:57:10 GMT (envelope-from ae@svn.freebsd.org) Received: (from ae@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id rB25v9C6056916; Mon, 2 Dec 2013 05:57:09 GMT (envelope-from ae@svn.freebsd.org) Message-Id: <201312020557.rB25v9C6056916@svn.freebsd.org> From: "Andrey V. Elsukov" Date: Mon, 2 Dec 2013 05:57:09 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r258834 - user/ae/inet6/sys/netinet6 X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Dec 2013 05:57:10 -0000 Author: ae Date: Mon Dec 2 05:57:09 2013 New Revision: 258834 URL: http://svnweb.freebsd.org/changeset/base/258834 Log: Use sa6_checkzone_pcb() function when inpcb is known. Modified: user/ae/inet6/sys/netinet6/in6_pcb.c user/ae/inet6/sys/netinet6/raw_ip6.c user/ae/inet6/sys/netinet6/scope6.c user/ae/inet6/sys/netinet6/udp6_usrreq.c Modified: user/ae/inet6/sys/netinet6/in6_pcb.c ============================================================================== --- user/ae/inet6/sys/netinet6/in6_pcb.c Mon Dec 2 05:45:11 2013 (r258833) +++ user/ae/inet6/sys/netinet6/in6_pcb.c Mon Dec 2 05:57:09 2013 (r258834) @@ -138,7 +138,7 @@ in6_pcbbind(struct inpcb *inp, struct so if (nam->sa_family != AF_INET6) return (EAFNOSUPPORT); /* Check sin6_scope_id. The caller must set it properly. */ - if ((error = sa6_checkzone(sin6)) != 0) + if ((error = sa6_checkzone_pcb(inp, sin6)) != 0) return (error); if ((error = prison_local_ip6(cred, &sin6->sin6_addr, @@ -323,7 +323,7 @@ in6_pcbconnect_mbuf(register struct inpc /* * Check sin6_scope_id and automatically fill it, if possible. */ - error = sa6_checkzone(sin6); + error = sa6_checkzone_pcb(inp, sin6); if (error != 0) return (error); if ((error = prison_remote_ip6(inp->inp_cred, &sin6->sin6_addr)) != 0) Modified: user/ae/inet6/sys/netinet6/raw_ip6.c ============================================================================== --- user/ae/inet6/sys/netinet6/raw_ip6.c Mon Dec 2 05:45:11 2013 (r258833) +++ user/ae/inet6/sys/netinet6/raw_ip6.c Mon Dec 2 05:57:09 2013 (r258834) @@ -734,7 +734,10 @@ rip6_bind(struct socket *so, struct sock return (error); if (TAILQ_EMPTY(&V_ifnet) || addr->sin6_family != AF_INET6) return (EADDRNOTAVAIL); - if ((error = sa6_checkzone(addr)) != 0) + INP_RLOCK(inp); + error = sa6_checkzone_pcb(inp, addr); + INP_RUNLOCK(inp); + if (error != 0) return (error); if (!IN6_IS_ADDR_UNSPECIFIED(&addr->sin6_addr)) { ifa = in6ifa_ifwithaddr(&addr->sin6_addr, addr->sin6_scope_id); @@ -775,7 +778,9 @@ rip6_connect(struct socket *so, struct s return (EADDRNOTAVAIL); if (addr->sin6_family != AF_INET6) return (EAFNOSUPPORT); - error = sa6_checkzone(addr); + INP_RLOCK(inp); + error = sa6_checkzone_pcb(inp, addr); + INP_RUNLOCK(inp); if (error != 0) return (error); @@ -873,7 +878,9 @@ rip6_send(struct socket *so, int flags, * Application must provide a proper zone ID or the use of * default zone IDs should be enabled. */ - ret = sa6_checkzone(dst); + INP_RLOCK(inp); + ret = sa6_checkzone_pcb(inp, dst); + INP_RUNLOCK(inp); if (ret != 0) { m_freem(m); return (ret); Modified: user/ae/inet6/sys/netinet6/scope6.c ============================================================================== --- user/ae/inet6/sys/netinet6/scope6.c Mon Dec 2 05:45:11 2013 (r258833) +++ user/ae/inet6/sys/netinet6/scope6.c Mon Dec 2 05:57:09 2013 (r258834) @@ -45,7 +45,7 @@ __FBSDID("$FreeBSD$"); #include #include - +#include #include #include #include Modified: user/ae/inet6/sys/netinet6/udp6_usrreq.c ============================================================================== --- user/ae/inet6/sys/netinet6/udp6_usrreq.c Mon Dec 2 05:45:11 2013 (r258833) +++ user/ae/inet6/sys/netinet6/udp6_usrreq.c Mon Dec 2 05:57:09 2013 (r258834) @@ -1073,6 +1073,7 @@ static int udp6_send(struct socket *so, int flags, struct mbuf *m, struct sockaddr *addr, struct mbuf *control, struct thread *td) { + struct sockaddr_in6 tmp; struct inpcb *inp; int error = 0; @@ -1093,7 +1094,9 @@ udp6_send(struct socket *so, int flags, * Application must provide a proper zone ID or the use of * default zone IDs should be enabled. */ - error = sa6_checkzone((struct sockaddr_in6*)addr); + tmp = *(struct sockaddr_in6 *)addr; + addr = (struct sockaddr *)&tmp; + error = sa6_checkzone_pcb(inp, &tmp); if (error != 0) goto bad; }