in6_joingroup_locked: need if_addr_lock around in6m_disconnect_locked

It looks like the call that requires the lock was introduced in r337866.

Reviewed by:	hselasky
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D20739
This commit is contained in:
Ryan Libby 2019-11-25 22:25:10 +00:00
parent 985d08fe52
commit 6afe56f9c3
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=355102

View File

@ -1267,6 +1267,7 @@ in6_joingroup_locked(struct ifnet *ifp, const struct in6_addr *mcaddr,
struct epoch_tracker et;
CTR2(KTR_MLD, "%s: dropping ref on %p", __func__, inm);
IF_ADDR_WLOCK(ifp);
NET_EPOCH_ENTER(et);
CK_STAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
if (ifma->ifma_protospec == inm) {
@ -1277,6 +1278,7 @@ in6_joingroup_locked(struct ifnet *ifp, const struct in6_addr *mcaddr,
in6m_disconnect_locked(&inmh, inm);
in6m_rele_locked(&inmh, inm);
NET_EPOCH_EXIT(et);
IF_ADDR_WUNLOCK(ifp);
} else {
*pinm = inm;
}