summaryrefslogtreecommitdiffstats
path: root/sys/netinet6
diff options
context:
space:
mode:
authorae <ae@FreeBSD.org>2014-11-06 09:16:52 +0000
committerae <ae@FreeBSD.org>2014-11-06 09:16:52 +0000
commitb0344a7d0fbd72f736ea5bf84483e29635af707b (patch)
treea5816fd7389d6cbcd2f9b89ffe398f90f878c007 /sys/netinet6
parent9bbd5a3136c6e4cdc1361c1a996483ca51962a65 (diff)
downloadFreeBSD-src-b0344a7d0fbd72f736ea5bf84483e29635af707b.zip
FreeBSD-src-b0344a7d0fbd72f736ea5bf84483e29635af707b.tar.gz
MFC r273855:
Fix mbuf leak in IPv6 multicast code. When multicast capable interface goes away, it leaves multicast groups, this leads to generate MLD reports, but MLD code does deffered send and MLD reports are queued in the in6_multi's in6m_scq ifq. The problem is that in6_multi structures are freed when interface leaves multicast groups and thread that does deffered send will not take these queued packets. PR: 194577 MFC r273857: Move ifq drain into in6m_purge(). Suggested by: bms Sponsored by: Yandex LLC
Diffstat (limited to 'sys/netinet6')
-rw-r--r--sys/netinet6/in6_mcast.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/netinet6/in6_mcast.c b/sys/netinet6/in6_mcast.c
index 39594e6..d3ad60f 100644
--- a/sys/netinet6/in6_mcast.c
+++ b/sys/netinet6/in6_mcast.c
@@ -1075,6 +1075,8 @@ in6m_purge(struct in6_multi *inm)
free(ims, M_IP6MSOURCE);
inm->in6m_nsrc--;
}
+ /* Free state-change requests that might be queued. */
+ _IF_DRAIN(&inm->in6m_scq);
}
/*
OpenPOWER on IntegriCloud