svn commit: r364933 - in head: lib/libmemstat sys/vm

Eric van Gyzen vangyzen at FreeBSD.org
Fri Aug 28 19:50:40 UTC 2020


Author: vangyzen
Date: Fri Aug 28 19:50:40 2020
New Revision: 364933
URL: https://svnweb.freebsd.org/changeset/base/364933

Log:
  memstat_kvm_uma: fix reading of uma_zone_domain structures
  
  Coverity flagged the scaling by sizeof(uzd).  That is the type
  of the pointer, so the scaling was already done by pointer arithmetic.
  However, this was also passing a stack frame pointer to kvm_read,
  so it was doubly wrong.
  
  Move ZDOM_GET into the !_KERNEL section and use it in libmemstat.
  
  Reported by:	Coverity
  Reviewed by:	markj
  MFC after:	2 weeks
  Sponsored by:	Dell EMC Isilon
  Differential Revision:	https://reviews.freebsd.org/D26213

Modified:
  head/lib/libmemstat/memstat_uma.c
  head/sys/vm/uma_int.h

Modified: head/lib/libmemstat/memstat_uma.c
==============================================================================
--- head/lib/libmemstat/memstat_uma.c	Fri Aug 28 19:21:11 2020	(r364932)
+++ head/lib/libmemstat/memstat_uma.c	Fri Aug 28 19:50:40 2020	(r364933)
@@ -455,9 +455,8 @@ skip_percpu:
 			mtp->mt_byteslimit = mtp->mt_countlimit * mtp->mt_size;
 			mtp->mt_count = mtp->mt_numallocs - mtp->mt_numfrees;
 			for (i = 0; i < ndomains; i++) {
-				ret = kread(kvm,
-				    &uz.uz_cpu[mp_maxid + 1] + i * sizeof(uzd),
-				    &uzd, sizeof(uzd), 0);
+				ret = kread(kvm, ZDOM_GET(uzp, i), &uzd,
+				    sizeof(uzd), 0);
 				if (ret != 0)
 					continue;
 				for (ubp =

Modified: head/sys/vm/uma_int.h
==============================================================================
--- head/sys/vm/uma_int.h	Fri Aug 28 19:21:11 2020	(r364932)
+++ head/sys/vm/uma_int.h	Fri Aug 28 19:50:40 2020	(r364933)
@@ -526,6 +526,10 @@ struct uma_zone {
 	KASSERT(uma_zone_get_allocs((z)) == 0,				\
 	    ("zone %s initialization after use.", (z)->uz_name))
 
+/* Domains are contiguous after the last CPU */
+#define	ZDOM_GET(z, n)							\
+	(&((uma_zone_domain_t)&(z)->uz_cpu[mp_maxid + 1])[n])
+
 #undef	UMA_ALIGN
 
 #ifdef _KERNEL
@@ -560,10 +564,6 @@ static __inline uma_slab_t hash_sfind(struct uma_hash 
 #define	KEG_ASSERT_COLD(k)						\
 	KASSERT(uma_keg_get_allocs((k)) == 0,				\
 	    ("keg %s initialization after use.", (k)->uk_name))
-
-/* Domains are contiguous after the last CPU */
-#define	ZDOM_GET(z, n)							\
-    (&((uma_zone_domain_t)&(z)->uz_cpu[mp_maxid + 1])[n])
 
 #define	ZDOM_LOCK_INIT(z, zdom, lc)					\
 	do {								\


More information about the svn-src-head mailing list