summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorbz <bz@FreeBSD.org>2010-08-14 14:13:44 +0000
committerbz <bz@FreeBSD.org>2010-08-14 14:13:44 +0000
commit007e782fcef3f0a3a67151610da08ca7865826a1 (patch)
tree95c8934247666f5fdafb60a8500dbf69dbd18175 /sys/netinet6
parent92d8dcb652c835f688f4650a15bb50f22806b513 (diff)
downloadFreeBSD-src-007e782fcef3f0a3a67151610da08ca7865826a1.zip
FreeBSD-src-007e782fcef3f0a3a67151610da08ca7865826a1.tar.gz
In rip6_input(), in case of multicast, we might skip the normal processing
and go to the next iteration early if multicast filtering would decide that this socket shall not receive the data. Unlock the pcb in that case or we leak the read lock and next time trying to get a write lock, would hang forever. PR: kern/149608 Submitted by: Chris Luke (chrisy flirble.org) MFC after: 3 days
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/raw_ip6.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c
index 939aa6a..0e18fb4 100644
--- a/sys/netinet6/raw_ip6.c
+++ b/sys/netinet6/raw_ip6.c
@@ -248,6 +248,7 @@ rip6_input(struct mbuf **mp, int *offp, int proto)
}
if (blocked != MCAST_PASS) {
IP6STAT_INC(ip6s_notmember);
+ INP_RUNLOCK(in6p);
continue;
}
}
OpenPOWER on IntegriCloud