M_TEMP seems unreasonable for interface groups data allocations.
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, \