diff options
| author | Alexander Motin <mav@FreeBSD.org> | 2008-08-25 22:12:38 +0000 |
|---|---|---|
| committer | Alexander Motin <mav@FreeBSD.org> | 2008-08-25 22:12:38 +0000 |
| commit | 761a99c91b4005db3c1b6258b1b06402ab4ec461 (patch) | |
| tree | 351c89da3d65fd53edb50ba8f4ac53394d570029 /sys | |
| parent | ff778c677c414c5d3a537b24d36eeb1fae891636 (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/netinet6/icmp6.c | 21 | ||||
| -rw-r--r-- | sys/netinet6/raw_ip6.c | 18 |
2 files changed, 18 insertions, 21 deletions
diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c index a108a1d086a3..e752c3093d1a 100644 --- a/sys/netinet6/icmp6.c +++ b/sys/netinet6/icmp6.c @@ -1889,24 +1889,23 @@ icmp6_rip6_input(struct mbuf **mp, int off) INP_INFO_RLOCK(&ripcbinfo); LIST_FOREACH(in6p, &ripcb, inp_list) { - INP_RLOCK(in6p); - if ((in6p->inp_vflag & INP_IPV6) == 0) { - docontinue: - INP_RUNLOCK(in6p); + if ((in6p->inp_vflag & INP_IPV6) == 0) continue; - } if (in6p->in6p_ip6_nxt != IPPROTO_ICMPV6) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) - goto docontinue; + continue; + INP_RLOCK(in6p); if (in6p->in6p_icmp6filt && ICMP6_FILTER_WILLBLOCK(icmp6->icmp6_type, - in6p->in6p_icmp6filt)) - goto docontinue; + in6p->in6p_icmp6filt)) { + INP_RUNLOCK(in6p); + continue; + } if (last) { struct mbuf *n = NULL; @@ -1967,6 +1966,7 @@ icmp6_rip6_input(struct mbuf **mp, int off) } last = in6p; } + INP_INFO_RUNLOCK(&ripcbinfo); if (last) { if (last->in6p_flags & IN6P_CONTROLOPTS) ip6_savecontrol(last, m, &opts); @@ -2006,7 +2006,6 @@ icmp6_rip6_input(struct mbuf **mp, int off) m_freem(m); ip6stat.ip6s_delivered--; } - INP_INFO_RUNLOCK(&ripcbinfo); return IPPROTO_DONE; } diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index d5483af0007d..237aa18b214f 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -153,27 +153,25 @@ rip6_input(struct mbuf **mp, int *offp, int proto) INP_INFO_RLOCK(&ripcbinfo); LIST_FOREACH(in6p, &ripcb, inp_list) { - INP_RLOCK(in6p); - if ((in6p->in6p_vflag & INP_IPV6) == 0) { -docontinue: - INP_RUNLOCK(in6p); + if ((in6p->in6p_vflag & INP_IPV6) == 0) continue; - } if (in6p->in6p_ip6_nxt && in6p->in6p_ip6_nxt != proto) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_laddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_laddr, &ip6->ip6_dst)) - goto docontinue; + continue; if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) && !IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src)) - goto docontinue; + continue; + INP_RLOCK(in6p); if (in6p->in6p_cksum != -1) { rip6stat.rip6s_isum++; if (in6_cksum(m, proto, *offp, m->m_pkthdr.len - *offp)) { + INP_RUNLOCK(in6p); rip6stat.rip6s_badsum++; - goto docontinue; + continue; } } if (last) { @@ -210,6 +208,7 @@ docontinue: } last = in6p; } + INP_INFO_RUNLOCK(&ripcbinfo); #ifdef IPSEC /* * Check AH/ESP integrity. @@ -251,7 +250,6 @@ docontinue: } ip6stat.ip6s_delivered--; } - INP_INFO_RUNLOCK(&ripcbinfo); return (IPPROTO_DONE); } |
