diff --git a/sys/netinet6/icmp6.c b/sys/netinet6/icmp6.c index 7039edd94f5a..d3c83158ae1f 100644 --- a/sys/netinet6/icmp6.c +++ b/sys/netinet6/icmp6.c @@ -1891,10 +1891,10 @@ icmp6_rip6_input(struct mbuf **mp, int off) INP_INFO_RLOCK(&ripcbinfo); LIST_FOREACH(in6p, &ripcb, inp_list) { - INP_WLOCK(in6p); + INP_RLOCK(in6p); if ((in6p->inp_vflag & INP_IPV6) == 0) { docontinue: - INP_WUNLOCK(in6p); + INP_RUNLOCK(in6p); continue; } if (in6p->in6p_ip6_nxt != IPPROTO_ICMPV6) @@ -1965,7 +1965,7 @@ icmp6_rip6_input(struct mbuf **mp, int off) sorwakeup_locked(last->in6p_socket); opts = NULL; } - INP_WUNLOCK(last); + INP_RUNLOCK(last); } last = in6p; } @@ -2003,7 +2003,7 @@ icmp6_rip6_input(struct mbuf **mp, int off) SOCKBUF_UNLOCK(&last->in6p_socket->so_rcv); } else sorwakeup_locked(last->in6p_socket); - INP_WUNLOCK(last); + INP_RUNLOCK(last); } else { m_freem(m); ip6stat.ip6s_delivered--;