On Sun, Jun 09, 2019 at 02:37:51PM -0300, Martin Pieuchot wrote:
> Add free(9) sizes and use mallocaray(9) where applicable for multicast
> data structures.
> 
> Ok?

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

-- 
Sebastien Marie

Reply via email to