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));
}
/*