Date: Wed, 10 Dec 2008 03:30:38 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185831 - user/kmacy/head_arpv2/sys/netinet6 Message-ID: <200812100330.mBA3UcpB012261@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812100330.mBA3UcpB012261>