svn commit: r333462 - head/sys/netinet6
Andrew Gallatin
gallatin at FreeBSD.org
Thu May 10 16:19:42 UTC 2018
Author: gallatin
Date: Thu May 10 16:19:41 2018
New Revision: 333462
URL: https://svnweb.freebsd.org/changeset/base/333462
Log:
Fix a panic in the IPv6 multicast code.
Use LIST_FOREACH_SAFE in in6m_disconnect() since we're
deleting and freeing item from the membership list
while traversing the list.
Reviewed by: mmacy
Sponsored by: Netflix
Modified:
head/sys/netinet6/in6_mcast.c
Modified: head/sys/netinet6/in6_mcast.c
==============================================================================
--- head/sys/netinet6/in6_mcast.c Thu May 10 15:01:43 2018 (r333461)
+++ head/sys/netinet6/in6_mcast.c Thu May 10 16:19:41 2018 (r333462)
@@ -581,7 +581,7 @@ in6m_disconnect(struct in6_multi *inm)
struct ifnet *ifp;
struct ifaddr *ifa;
struct in6_ifaddr *ifa6;
- struct in6_multi_mship *imm;
+ struct in6_multi_mship *imm, *imm_tmp;
struct ifmultiaddr *ifma, *ll_ifma;
ifp = inm->in6m_ifp;
@@ -607,7 +607,8 @@ in6m_disconnect(struct in6_multi *inm)
if (ifa->ifa_addr->sa_family != AF_INET6)
continue;
ifa6 = (void *)ifa;
- LIST_FOREACH(imm, &ifa6->ia6_memberships, i6mm_chain) {
+ LIST_FOREACH_SAFE(imm, &ifa6->ia6_memberships,
+ i6mm_chain, imm_tmp) {
if (inm == imm->i6mm_maddr) {
LIST_REMOVE(imm, i6mm_chain);
free(imm, M_IP6MADDR);
More information about the svn-src-head
mailing list