On Tue, Jun 27, 2023 at 01:32:37PM +0300, Vitaliy Makkoveev wrote:
> M_TEMP seems unreasonable for interface groups data allocations.
After claudio pointed out the wrong type, I thought of the same name,
no other malloc(9) type fits.
FWIW OK kn, but please wait for other to chime in.
>
> Don't forget to recompile systat(1) and vmstat(8) with new sys/malloc.h.
>
> Index: sys/net/if.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if.c,v
> retrieving revision 1.700
> diff -u -p -r1.700 if.c
> --- sys/net/if.c 12 Jun 2023 21:19:54 -0000 1.700
> +++ sys/net/if.c 27 Jun 2023 10:15:12 -0000
> @@ -2784,7 +2784,7 @@ if_creategroup(const char *groupname)
> {
> struct ifg_group *ifg;
>
> - if ((ifg = malloc(sizeof(*ifg), M_TEMP, M_NOWAIT)) == NULL)
> + if ((ifg = malloc(sizeof(*ifg), M_IFGROUP, M_NOWAIT)) == NULL)
> return (NULL);
>
> strlcpy(ifg->ifg_group, groupname, sizeof(ifg->ifg_group));
> @@ -2819,11 +2819,11 @@ if_addgroup(struct ifnet *ifp, const cha
> if (!strcmp(ifgl->ifgl_group->ifg_group, groupname))
> return (EEXIST);
>
> - if ((ifgl = malloc(sizeof(*ifgl), M_TEMP, M_NOWAIT)) == NULL)
> + if ((ifgl = malloc(sizeof(*ifgl), M_IFGROUP, M_NOWAIT)) == NULL)
> return (ENOMEM);
>
> - if ((ifgm = malloc(sizeof(*ifgm), M_TEMP, M_NOWAIT)) == NULL) {
> - free(ifgl, M_TEMP, sizeof(*ifgl));
> + if ((ifgm = malloc(sizeof(*ifgm), M_IFGROUP, M_NOWAIT)) == NULL) {
> + free(ifgl, M_IFGROUP, sizeof(*ifgl));
> return (ENOMEM);
> }
>
> @@ -2834,8 +2834,8 @@ if_addgroup(struct ifnet *ifp, const cha
> if (ifg == NULL) {
> ifg = if_creategroup(groupname);
> if (ifg == NULL) {
> - free(ifgl, M_TEMP, sizeof(*ifgl));
> - free(ifgm, M_TEMP, sizeof(*ifgm));
> + free(ifgl, M_IFGROUP, sizeof(*ifgl));
> + free(ifgm, M_IFGROUP, sizeof(*ifgm));
> return (ENOMEM);
> }
> } else
> @@ -2878,7 +2878,7 @@ if_delgroup(struct ifnet *ifp, const cha
>
> if (ifgm != NULL) {
> TAILQ_REMOVE(&ifgl->ifgl_group->ifg_members, ifgm, ifgm_next);
> - free(ifgm, M_TEMP, sizeof(*ifgm));
> + free(ifgm, M_IFGROUP, sizeof(*ifgm));
> }
>
> #if NPF > 0
> @@ -2891,10 +2891,10 @@ if_delgroup(struct ifnet *ifp, const cha
> #if NPF > 0
> pfi_detach_ifgroup(ifgl->ifgl_group);
> #endif
> - free(ifgl->ifgl_group, M_TEMP, sizeof(*ifgl->ifgl_group));
> + free(ifgl->ifgl_group, M_IFGROUP, sizeof(*ifgl->ifgl_group));
> }
>
> - free(ifgl, M_TEMP, sizeof(*ifgl));
> + free(ifgl, M_IFGROUP, sizeof(*ifgl));
>
> return (0);
> }
> Index: sys/sys/malloc.h
> ===================================================================
> RCS file: /cvs/src/sys/sys/malloc.h,v
> retrieving revision 1.122
> diff -u -p -r1.122 malloc.h
> --- sys/sys/malloc.h 3 Feb 2022 17:18:22 -0000 1.122
> +++ sys/sys/malloc.h 27 Jun 2023 10:15:13 -0000
> @@ -72,7 +72,7 @@
> /* 7 - free */
> /* 8 - free */
> #define M_IFADDR 9 /* interface address */
> -/* 10 - free */
> +#define M_IFGROUP 10 /* interface group */
> #define M_SYSCTL 11 /* sysctl buffers (persistent storage)
> */
> #define M_COUNTERS 12 /* per CPU counters */
> /* 13 - free */
> @@ -190,7 +190,7 @@
> NULL, \
> NULL, \
> "ifaddr", /* 9 M_IFADDR */ \
> - NULL, \
> + "ifgroup", /* 10 M_IFGROUP */ \
> "sysctl", /* 11 M_SYSCTL */ \
> "counters", /* 12 M_COUNTERS */ \
> NULL, \
>