From owner-svn-src-user@FreeBSD.ORG Wed Dec 10 03:30:38 2008 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 6C04B1065672; Wed, 10 Dec 2008 03:30:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 576D98FC08; Wed, 10 Dec 2008 03:30:38 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id mBA3UcSu012266; Wed, 10 Dec 2008 03:30:38 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id mBA3UcpB012261; Wed, 10 Dec 2008 03:30:38 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200812100330.mBA3UcpB012261@svn.freebsd.org> From: Kip Macy Date: Wed, 10 Dec 2008 03:30:38 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r185831 - user/kmacy/head_arpv2/sys/netinet6 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 10 Dec 2008 03:30:38 -0000 Author: kmacy Date: Wed Dec 10 03:30:37 2008 New Revision: 185831 URL: http://svn.freebsd.org/changeset/base/185831 Log: fix IF_AFDATA_LOCK recursion in nd6_cache_lladdr Modified: user/kmacy/head_arpv2/sys/netinet6/icmp6.c user/kmacy/head_arpv2/sys/netinet6/ip6_output.c user/kmacy/head_arpv2/sys/netinet6/nd6.c user/kmacy/head_arpv2/sys/netinet6/nd6_nbr.c user/kmacy/head_arpv2/sys/netinet6/nd6_rtr.c Modified: user/kmacy/head_arpv2/sys/netinet6/icmp6.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet6/icmp6.c Wed Dec 10 03:17:27 2008 (r185830) +++ user/kmacy/head_arpv2/sys/netinet6/icmp6.c Wed Dec 10 03:30:37 2008 (r185831) @@ -2397,10 +2397,8 @@ icmp6_redirect_input(struct mbuf *m, int } /* RFC 2461 8.3 */ - IF_AFDATA_LOCK(ifp); nd6_cache_lladdr(ifp, &redtgt6, lladdr, lladdrlen, ND_REDIRECT, is_onlink ? ND_REDIRECT_ONLINK : ND_REDIRECT_ROUTER); - IF_AFDATA_UNLOCK(ifp); if (!is_onlink) { /* better router case. perform rtredirect. */ /* perform rtredirect */ Modified: user/kmacy/head_arpv2/sys/netinet6/ip6_output.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet6/ip6_output.c Wed Dec 10 03:17:27 2008 (r185830) +++ user/kmacy/head_arpv2/sys/netinet6/ip6_output.c Wed Dec 10 03:30:37 2008 (r185831) @@ -1088,9 +1088,7 @@ sendorfree: ia->ia_ifa.if_opackets++; ia->ia_ifa.if_obytes += m->m_pkthdr.len; } - IF_AFDATA_LOCK(ifp); error = nd6_output(ifp, origifp, m, dst, ro->ro_rt); - IF_AFDATA_UNLOCK(ifp); } else m_freem(m); } Modified: user/kmacy/head_arpv2/sys/netinet6/nd6.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet6/nd6.c Wed Dec 10 03:17:27 2008 (r185830) +++ user/kmacy/head_arpv2/sys/netinet6/nd6.c Wed Dec 10 03:30:37 2008 (r185831) @@ -1400,7 +1400,7 @@ nd6_cache_lladdr(struct ifnet *ifp, stru int flags = 0; int newstate = 0; - IF_AFDATA_LOCK_ASSERT(ifp); + IF_AFDATA_UNLOCK_ASSERT(ifp); if (ifp == NULL) panic("ifp == NULL in nd6_cache_lladdr"); @@ -1421,9 +1421,13 @@ nd6_cache_lladdr(struct ifnet *ifp, stru * description on it in NS section (RFC 2461 7.2.3). */ flags |= lladdr ? ND6_EXCLUSIVE : 0; + IF_AFDATA_LOCK(ifp); ln = nd6_lookup(from, flags, ifp); + if (ln) + IF_AFDATA_UNLOCK(ifp); if (ln == NULL) { ln = nd6_lookup(from, flags |ND6_CREATE, ifp); + IF_AFDATA_UNLOCK(ifp); is_newentry = 1; } else { /* do nothing if static ndp is set */ Modified: user/kmacy/head_arpv2/sys/netinet6/nd6_nbr.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet6/nd6_nbr.c Wed Dec 10 03:17:27 2008 (r185830) +++ user/kmacy/head_arpv2/sys/netinet6/nd6_nbr.c Wed Dec 10 03:30:37 2008 (r185831) @@ -346,10 +346,8 @@ nd6_ns_input(struct mbuf *m, int off, in goto freeit; } - IF_AFDATA_LOCK(ifp); nd6_cache_lladdr(ifp, &saddr6, lladdr, lladdrlen, ND_NEIGHBOR_SOLICIT, 0); - IF_AFDATA_UNLOCK(ifp); nd6_na_output(ifp, &saddr6, &taddr6, ((anycast || proxy || !tlladdr) ? 0 : ND_NA_FLAG_OVERRIDE) | Modified: user/kmacy/head_arpv2/sys/netinet6/nd6_rtr.c ============================================================================== --- user/kmacy/head_arpv2/sys/netinet6/nd6_rtr.c Wed Dec 10 03:17:27 2008 (r185830) +++ user/kmacy/head_arpv2/sys/netinet6/nd6_rtr.c Wed Dec 10 03:30:37 2008 (r185831) @@ -184,9 +184,7 @@ nd6_rs_input(struct mbuf *m, int off, in goto bad; } - IF_AFDATA_LOCK(ifp); nd6_cache_lladdr(ifp, &saddr6, lladdr, lladdrlen, ND_ROUTER_SOLICIT, 0); - IF_AFDATA_UNLOCK(ifp); freeit: m_freem(m); @@ -409,10 +407,8 @@ nd6_ra_input(struct mbuf *m, int off, in goto bad; } - IF_AFDATA_LOCK(ifp); nd6_cache_lladdr(ifp, &saddr6, lladdr, lladdrlen, ND_ROUTER_ADVERT, 0); - IF_AFDATA_UNLOCK(ifp); /* * Installing a link-layer address might change the state of the