diff options
author | bz <bz@FreeBSD.org> | 2010-08-14 14:13:44 +0000 |
---|---|---|
committer | bz <bz@FreeBSD.org> | 2010-08-14 14:13:44 +0000 |
commit | 007e782fcef3f0a3a67151610da08ca7865826a1 (patch) | |
tree | 95c8934247666f5fdafb60a8500dbf69dbd18175 /sys/netinet6 | |
parent | 92d8dcb652c835f688f4650a15bb50f22806b513 (diff) | |
download | FreeBSD-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.c | 1 |
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; } } |