svn commit: r355396 - head/sys/kern
Ryan Libby
rlibby at FreeBSD.org
Wed Dec 4 18:21:29 UTC 2019
Author: rlibby
Date: Wed Dec 4 18:21:29 2019
New Revision: 355396
URL: https://svnweb.freebsd.org/changeset/base/355396
Log:
mbuf zones: take out the trash
The mbuf zones were explicitly specifying the uma trash procedures on
zcreate, conditionally on INVARIANTS, because that used to be necessary
in order to get use-after-free checking for uma zones with non-empty
constructors or destructors. After r355137 uma automatically invokes
the trash constructor and destructor as long as no init and fini are
specified. This now allows the mbuf zones to pass their constructors
and destructors without needing to add on the uma trash procedures
conditionally.
Reviewed by: cem, jhb, markj
Sponsored by: Dell EMC Isilon
Differential Revision: https://reviews.freebsd.org/D22583
Modified:
head/sys/kern/kern_mbuf.c
Modified: head/sys/kern/kern_mbuf.c
==============================================================================
--- head/sys/kern/kern_mbuf.c Wed Dec 4 17:45:34 2019 (r355395)
+++ head/sys/kern/kern_mbuf.c Wed Dec 4 18:21:29 2019 (r355396)
@@ -322,12 +322,7 @@ mbuf_init(void *dummy)
* Configure UMA zones for Mbufs, Clusters, and Packets.
*/
zone_mbuf = uma_zcreate(MBUF_MEM_NAME, MSIZE,
- mb_ctor_mbuf, mb_dtor_mbuf,
-#ifdef INVARIANTS
- trash_init, trash_fini,
-#else
- NULL, NULL,
-#endif
+ mb_ctor_mbuf, mb_dtor_mbuf, NULL, NULL,
MSIZE - 1, UMA_ZONE_MAXBUCKET);
if (nmbufs > 0)
nmbufs = uma_zone_set_max(zone_mbuf, nmbufs);
@@ -335,12 +330,7 @@ mbuf_init(void *dummy)
uma_zone_set_maxaction(zone_mbuf, mb_reclaim);
zone_clust = uma_zcreate(MBUF_CLUSTER_MEM_NAME, MCLBYTES,
- mb_ctor_clust,
-#ifdef INVARIANTS
- trash_dtor, trash_init, trash_fini,
-#else
- NULL, NULL, NULL,
-#endif
+ mb_ctor_clust, NULL, NULL, NULL,
UMA_ALIGN_PTR, 0);
if (nmbclusters > 0)
nmbclusters = uma_zone_set_max(zone_clust, nmbclusters);
@@ -352,12 +342,7 @@ mbuf_init(void *dummy)
/* Make jumbo frame zone too. Page size, 9k and 16k. */
zone_jumbop = uma_zcreate(MBUF_JUMBOP_MEM_NAME, MJUMPAGESIZE,
- mb_ctor_clust,
-#ifdef INVARIANTS
- trash_dtor, trash_init, trash_fini,
-#else
- NULL, NULL, NULL,
-#endif
+ mb_ctor_clust, NULL, NULL, NULL,
UMA_ALIGN_PTR, 0);
if (nmbjumbop > 0)
nmbjumbop = uma_zone_set_max(zone_jumbop, nmbjumbop);
@@ -365,12 +350,7 @@ mbuf_init(void *dummy)
uma_zone_set_maxaction(zone_jumbop, mb_reclaim);
zone_jumbo9 = uma_zcreate(MBUF_JUMBO9_MEM_NAME, MJUM9BYTES,
- mb_ctor_clust,
-#ifdef INVARIANTS
- trash_dtor, trash_init, trash_fini,
-#else
- NULL, NULL, NULL,
-#endif
+ mb_ctor_clust, NULL, NULL, NULL,
UMA_ALIGN_PTR, 0);
uma_zone_set_allocf(zone_jumbo9, mbuf_jumbo_alloc);
if (nmbjumbo9 > 0)
@@ -379,12 +359,7 @@ mbuf_init(void *dummy)
uma_zone_set_maxaction(zone_jumbo9, mb_reclaim);
zone_jumbo16 = uma_zcreate(MBUF_JUMBO16_MEM_NAME, MJUM16BYTES,
- mb_ctor_clust,
-#ifdef INVARIANTS
- trash_dtor, trash_init, trash_fini,
-#else
- NULL, NULL, NULL,
-#endif
+ mb_ctor_clust, NULL, NULL, NULL,
UMA_ALIGN_PTR, 0);
uma_zone_set_allocf(zone_jumbo16, mbuf_jumbo_alloc);
if (nmbjumbo16 > 0)
@@ -394,11 +369,7 @@ mbuf_init(void *dummy)
zone_extpgs = uma_zcreate(MBUF_EXTPGS_MEM_NAME,
sizeof(struct mbuf_ext_pgs),
-#ifdef INVARIANTS
- trash_ctor, trash_dtor, trash_init, trash_fini,
-#else
NULL, NULL, NULL, NULL,
-#endif
UMA_ALIGN_CACHE, 0);
/*
@@ -618,22 +589,12 @@ debugnet_mbuf_reinit(int nmbuf, int nclust, int clsize
dn_clsize = clsize;
dn_zone_mbuf = uma_zcache_create("debugnet_" MBUF_MEM_NAME,
- MSIZE, mb_ctor_mbuf, mb_dtor_mbuf,
-#ifdef INVARIANTS
- trash_init, trash_fini,
-#else
- NULL, NULL,
-#endif
+ MSIZE, mb_ctor_mbuf, mb_dtor_mbuf, NULL, NULL,
dn_buf_import, dn_buf_release,
&dn_mbufq, UMA_ZONE_NOBUCKET);
dn_zone_clust = uma_zcache_create("debugnet_" MBUF_CLUSTER_MEM_NAME,
- clsize, mb_ctor_clust,
-#ifdef INVARIANTS
- trash_dtor, trash_init, trash_fini,
-#else
- NULL, NULL, NULL,
-#endif
+ clsize, mb_ctor_clust, NULL, NULL, NULL,
dn_buf_import, dn_buf_release,
&dn_clustq, UMA_ZONE_NOBUCKET);
@@ -687,9 +648,6 @@ mb_ctor_mbuf(void *mem, int size, void *arg, int how)
int flags;
short type;
-#ifdef INVARIANTS
- trash_ctor(mem, size, arg, how);
-#endif
args = (struct mb_args *)arg;
type = args->type;
@@ -724,9 +682,6 @@ mb_dtor_mbuf(void *mem, int size, void *arg)
KASSERT((m->m_flags & M_NOFREE) == 0, ("%s: M_NOFREE set", __func__));
if (!(flags & MB_DTOR_SKIP) && (m->m_flags & M_PKTHDR) && !SLIST_EMPTY(&m->m_pkthdr.tags))
m_tag_delete_chain(m, NULL);
-#ifdef INVARIANTS
- trash_dtor(mem, size, arg);
-#endif
}
/*
@@ -777,9 +732,6 @@ mb_ctor_clust(void *mem, int size, void *arg, int how)
{
struct mbuf *m;
-#ifdef INVARIANTS
- trash_ctor(mem, size, arg, how);
-#endif
m = (struct mbuf *)arg;
if (m != NULL) {
m->m_ext.ext_buf = (char *)mem;
More information about the svn-src-head
mailing list