From 2dba2288aa364c36c756770ac77590816b15d954 Mon Sep 17 00:00:00 2001 From: Mark Johnston Date: Wed, 19 Oct 2022 14:27:49 -0400 Subject: [PATCH] uma: Never pass cache zones to memguard Items allocated from cache zones cannot usefully be protected by memguard. PR: 267151 Reported and tested by: pho MFC after: 1 week --- sys/vm/uma_core.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/vm/uma_core.c b/sys/vm/uma_core.c index daa14cc3e3b3..ae34d8bf0997 100644 --- a/sys/vm/uma_core.c +++ b/sys/vm/uma_core.c @@ -3561,7 +3561,8 @@ uma_zalloc_debug(uma_zone_t zone, void **itemp, void *udata, int flags) #endif #ifdef DEBUG_MEMGUARD - if ((zone->uz_flags & UMA_ZONE_SMR) == 0 && memguard_cmp_zone(zone)) { + if ((zone->uz_flags & (UMA_ZONE_SMR | UMA_ZFLAG_CACHE)) == 0 && + memguard_cmp_zone(zone)) { void *item; item = memguard_alloc(zone->uz_size, flags); if (item != NULL) { @@ -3596,7 +3597,8 @@ uma_zfree_debug(uma_zone_t zone, void *item, void *udata) ("uma_zfree_debug: called with spinlock or critical section held")); #ifdef DEBUG_MEMGUARD - if ((zone->uz_flags & UMA_ZONE_SMR) == 0 && is_memguard_addr(item)) { + if ((zone->uz_flags & (UMA_ZONE_SMR | UMA_ZFLAG_CACHE)) == 0 && + is_memguard_addr(item)) { if (zone->uz_dtor != NULL) zone->uz_dtor(item, zone->uz_size, udata); if (zone->uz_fini != NULL)