Add free(9) sizes and use mallocaray(9) where applicable for multicast
data structures.

Ok?

Index: net/if_pfsync.c
===================================================================
RCS file: /cvs/src/sys/net/if_pfsync.c,v
retrieving revision 1.263
diff -u -p -r1.263 if_pfsync.c
--- net/if_pfsync.c     4 Jun 2019 23:00:43 -0000       1.263
+++ net/if_pfsync.c     9 Jun 2019 17:27:31 -0000
@@ -328,9 +328,8 @@ pfsync_clone_create(struct if_clone *ifc
        sc->sc_len = PFSYNC_MINPKT;
        sc->sc_maxupdates = 128;
 
-       sc->sc_imo.imo_membership = (struct in_multi **)malloc(
-           (sizeof(struct in_multi *) * IP_MIN_MEMBERSHIPS), M_IPMOPTS,
-           M_WAITOK | M_ZERO);
+       sc->sc_imo.imo_membership = mallocarray(IP_MIN_MEMBERSHIPS,
+           sizeof(struct in_multi *), M_IPMOPTS, M_WAITOK|M_ZERO);
        sc->sc_imo.imo_max_memberships = IP_MIN_MEMBERSHIPS;
 
        ifp = &sc->sc_if;
@@ -407,7 +406,8 @@ pfsync_clone_destroy(struct ifnet *ifp)
        NET_UNLOCK();
 
        pool_destroy(&sc->sc_pool);
-       free(sc->sc_imo.imo_membership, M_IPMOPTS, 0);
+       free(sc->sc_imo.imo_membership, M_IPMOPTS,
+           sc->sc_imo.imo_max_memberships * sizeof(struct in_multi *));
        free(sc, M_DEVBUF, sizeof(*sc));
 
        return (0);
Index: net/if_vxlan.c
===================================================================
RCS file: /cvs/src/sys/net/if_vxlan.c,v
retrieving revision 1.72
diff -u -p -r1.72 if_vxlan.c
--- net/if_vxlan.c      28 Apr 2019 22:15:58 -0000      1.72
+++ net/if_vxlan.c      9 Jun 2019 17:27:38 -0000
@@ -131,9 +131,8 @@ vxlan_clone_create(struct if_clone *ifc,
        struct vxlan_softc      *sc;
 
        sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK|M_ZERO);
-       sc->sc_imo.imo_membership = malloc(
-           (sizeof(struct in_multi *) * IP_MIN_MEMBERSHIPS), M_IPMOPTS,
-           M_WAITOK|M_ZERO);
+       sc->sc_imo.imo_membership = mallocarray(IP_MIN_MEMBERSHIPS,
+           sizeof(struct in_multi *), M_IPMOPTS, M_WAITOK|M_ZERO);
        sc->sc_imo.imo_max_memberships = IP_MIN_MEMBERSHIPS;
        sc->sc_dstport = htons(VXLAN_PORT);
        sc->sc_vnetid = VXLAN_VNI_UNSET;
@@ -199,7 +198,8 @@ vxlan_clone_destroy(struct ifnet *ifp)
        if (!task_del(net_tq(ifp->if_index), &sc->sc_sendtask))
                taskq_barrier(net_tq(ifp->if_index));
 
-       free(sc->sc_imo.imo_membership, M_IPMOPTS, 0);
+       free(sc->sc_imo.imo_membership, M_IPMOPTS,
+           sc->sc_imo.imo_max_memberships * sizeof(struct in_multi *));
        free(sc, M_DEVBUF, sizeof(*sc));
 
        return (0);
Index: netinet/ip_carp.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_carp.c,v
retrieving revision 1.337
diff -u -p -r1.337 ip_carp.c
--- netinet/ip_carp.c   23 Apr 2019 10:53:45 -0000      1.337
+++ netinet/ip_carp.c   9 Jun 2019 17:27:45 -0000
@@ -814,9 +814,8 @@ carp_clone_create(struct if_clone *ifc, 
 #ifdef INET6
        sc->sc_im6o.im6o_hlim = CARP_DFLTTL;
 #endif /* INET6 */
-       sc->sc_imo.imo_membership = (struct in_multi **)malloc(
-           (sizeof(struct in_multi *) * IP_MIN_MEMBERSHIPS), M_IPMOPTS,
-           M_WAITOK|M_ZERO);
+       sc->sc_imo.imo_membership = mallocarray(IP_MIN_MEMBERSHIPS,
+           sizeof(struct in_multi *), M_IPMOPTS, M_WAITOK|M_ZERO);
        sc->sc_imo.imo_max_memberships = IP_MIN_MEMBERSHIPS;
 
        LIST_INIT(&sc->carp_mc_listhead);
@@ -901,7 +900,8 @@ carp_clone_destroy(struct ifnet *ifp)
        if_detach(ifp);
        carp_destroy_vhosts(ifp->if_softc);
        refcnt_finalize(&sc->sc_refcnt, "carpdtor");
-       free(sc->sc_imo.imo_membership, M_IPMOPTS, 0);
+       free(sc->sc_imo.imo_membership, M_IPMOPTS,
+           sc->sc_imo.imo_max_memberships * sizeof(struct in_multi *));
        free(sc, M_DEVBUF, sizeof(*sc));
        return (0);
 }
Index: netinet/ip_output.c
===================================================================
RCS file: /cvs/src/sys/netinet/ip_output.c,v
retrieving revision 1.354
diff -u -p -r1.354 ip_output.c
--- netinet/ip_output.c 28 Apr 2019 22:15:58 -0000      1.354
+++ netinet/ip_output.c 9 Jun 2019 17:28:23 -0000
@@ -1362,8 +1362,7 @@ ip_setmoptions(int optname, struct ip_mo
                 * allocate one and initialize to default values.
                 */
                imo = malloc(sizeof(*imo), M_IPMOPTS, M_WAITOK|M_ZERO);
-               immp = (struct in_multi **)malloc(
-                   (sizeof(*immp) * IP_MIN_MEMBERSHIPS), M_IPMOPTS,
+               immp = mallocarray(IP_MIN_MEMBERSHIPS, sizeof(*immp), M_IPMOPTS,
                    M_WAITOK|M_ZERO);
                *imop = imo;
                imo->imo_ifidx = 0;
@@ -1517,9 +1516,8 @@ ip_setmoptions(int optname, struct ip_mo
                        omships = imo->imo_membership;
                        newmax = ((imo->imo_max_memberships + 1) * 2) - 1;
                        if (newmax <= IP_MAX_MEMBERSHIPS) {
-                               nmships = (struct in_multi **)mallocarray(
-                                   newmax, sizeof(*nmships), M_IPMOPTS,
-                                   M_NOWAIT|M_ZERO);
+                               nmships = mallocarray(newmax, sizeof(*nmships),
+                                   M_IPMOPTS, M_NOWAIT|M_ZERO);
                                if (nmships != NULL) {
                                        memcpy(nmships, omships,
                                            sizeof(*omships) *
@@ -1623,7 +1621,8 @@ ip_setmoptions(int optname, struct ip_mo
            imo->imo_ttl == IP_DEFAULT_MULTICAST_TTL &&
            imo->imo_loop == IP_DEFAULT_MULTICAST_LOOP &&
            imo->imo_num_memberships == 0) {
-               free(imo->imo_membership , M_IPMOPTS, 0);
+               free(imo->imo_membership , M_IPMOPTS,
+                   imo->imo_max_memberships * sizeof(struct in_multi *));
                free(*imop, M_IPMOPTS, sizeof(**imop));
                *imop = NULL;
        }
@@ -1688,7 +1687,8 @@ ip_freemoptions(struct ip_moptions *imo)
        if (imo != NULL) {
                for (i = 0; i < imo->imo_num_memberships; ++i)
                        in_delmulti(imo->imo_membership[i]);
-               free(imo->imo_membership, M_IPMOPTS, 0);
+               free(imo->imo_membership, M_IPMOPTS,
+                   imo->imo_max_memberships * sizeof(struct in_multi *));
                free(imo, M_IPMOPTS, sizeof(*imo));
        }
 }
Index: netinet6/ip6_output.c
===================================================================
RCS file: /cvs/src/sys/netinet6/ip6_output.c,v
retrieving revision 1.243
diff -u -p -r1.243 ip6_output.c
--- netinet6/ip6_output.c       28 Apr 2019 22:15:58 -0000      1.243
+++ netinet6/ip6_output.c       9 Jun 2019 17:35:15 -0000
@@ -1882,9 +1882,7 @@ ip6_setmoptions(int optname, struct ip6_
                 * No multicast option buffer attached to the pcb;
                 * allocate one and initialize to default values.
                 */
-               im6o = (struct ip6_moptions *)
-                       malloc(sizeof(*im6o), M_IPMOPTS, M_WAITOK);
-
+               im6o = malloc(sizeof(*im6o), M_IPMOPTS, M_WAITOK);
                if (im6o == NULL)
                        return (ENOBUFS);
                *im6op = im6o;
@@ -2138,7 +2136,7 @@ ip6_setmoptions(int optname, struct ip6_
            im6o->im6o_hlim == ip6_defmcasthlim &&
            im6o->im6o_loop == IPV6_DEFAULT_MULTICAST_LOOP &&
            LIST_EMPTY(&im6o->im6o_memberships)) {
-               free(*im6op, M_IPMOPTS, 0);
+               free(*im6op, M_IPMOPTS, sizeof(*im6o));
                *im6op = NULL;
        }
 
@@ -2202,7 +2200,7 @@ ip6_freemoptions(struct ip6_moptions *im
                LIST_REMOVE(imm, i6mm_chain);
                in6_leavegroup(imm);
        }
-       free(im6o, M_IPMOPTS, 0);
+       free(im6o, M_IPMOPTS, sizeof(*im6o));
 }
 
 /*

Reply via email to