summaryrefslogtreecommitdiffstats
path: root/sys/netinet6/raw_ip6.c
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2008-07-28 19:32:18 +0000
committermav <mav@FreeBSD.org>2008-07-28 19:32:18 +0000
commitc8ae327077d0d3c8aa97800e6353b1a9f93508fa (patch)
tree8d8455e18e2cab24492ae0c41a6bc001a1748bc5 /sys/netinet6/raw_ip6.c
parent3bc77fdd97f49077e9a19c9e4f98a4d4026e379a (diff)
downloadFreeBSD-src-c8ae327077d0d3c8aa97800e6353b1a9f93508fa.zip
FreeBSD-src-c8ae327077d0d3c8aa97800e6353b1a9f93508fa.tar.gz
Move inpcb lock higher to protect some nonbinding fields reading.
It fixes nothing at this time, but decided to be more correct.
Diffstat (limited to 'sys/netinet6/raw_ip6.c')
-rw-r--r--sys/netinet6/raw_ip6.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index 5e9ab49..a9f5bd2 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -165,10 +165,12 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
if (!IN6_IS_ADDR_UNSPECIFIED(&in6p->in6p_faddr) &&
!IN6_ARE_ADDR_EQUAL(&in6p->in6p_faddr, &ip6->ip6_src))
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++;
continue;
}
@@ -206,7 +208,6 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
INP_RUNLOCK(last);
}
last = in6p;
- INP_RLOCK(last);
}
INP_INFO_RUNLOCK(&ripcbinfo);
#ifdef IPSEC
OpenPOWER on IntegriCloud