Author: markj
Date: Thu Apr 25 03:46:54 2019
New Revision: 346658
URL: https://svnweb.freebsd.org/changeset/base/346658

Log:
  MFC r346118:
  Reinitialize multicast source filter structures after invalidation.

Modified:
  stable/12/sys/netinet/in_mcast.c
  stable/12/sys/netinet6/in6_mcast.c
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/sys/netinet/in_mcast.c
==============================================================================
--- stable/12/sys/netinet/in_mcast.c    Thu Apr 25 02:16:48 2019        
(r346657)
+++ stable/12/sys/netinet/in_mcast.c    Thu Apr 25 03:46:54 2019        
(r346658)
@@ -2544,10 +2544,14 @@ out_in_multi_locked:
 
        if (is_final) {
                /* Remove the gap in the membership and filter array. */
+               KASSERT(RB_EMPTY(&imf->imf_sources),
+                   ("%s: imf_sources not empty", __func__));
                for (++idx; idx < imo->imo_num_memberships; ++idx) {
-                       imo->imo_membership[idx-1] = imo->imo_membership[idx];
-                       imo->imo_mfilters[idx-1] = imo->imo_mfilters[idx];
+                       imo->imo_membership[idx - 1] = imo->imo_membership[idx];
+                       imo->imo_mfilters[idx - 1] = imo->imo_mfilters[idx];
                }
+               imf_init(&imo->imo_mfilters[idx - 1], MCAST_UNDEFINED,
+                   MCAST_EXCLUDE);
                imo->imo_num_memberships--;
        }
 

Modified: stable/12/sys/netinet6/in6_mcast.c
==============================================================================
--- stable/12/sys/netinet6/in6_mcast.c  Thu Apr 25 02:16:48 2019        
(r346657)
+++ stable/12/sys/netinet6/in6_mcast.c  Thu Apr 25 03:46:54 2019        
(r346658)
@@ -2470,10 +2470,14 @@ in6p_leave_group(struct inpcb *inp, struct sockopt *so
 
        if (is_final) {
                /* Remove the gap in the membership array. */
+               KASSERT(RB_EMPTY(&imf->im6f_sources),
+                   ("%s: im6f_sources not empty", __func__));
                for (++idx; idx < imo->im6o_num_memberships; ++idx) {
-                       imo->im6o_membership[idx-1] = imo->im6o_membership[idx];
-                       imo->im6o_mfilters[idx-1] = imo->im6o_mfilters[idx];
+                       imo->im6o_membership[idx - 1] = 
imo->im6o_membership[idx];
+                       imo->im6o_mfilters[idx - 1] = imo->im6o_mfilters[idx];
                }
+               im6f_init(&imo->im6o_mfilters[idx - 1], MCAST_UNDEFINED,
+                   MCAST_EXCLUDE);
                imo->im6o_num_memberships--;
        }
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to