Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 20 Oct 2018 20:49:37 +0000 (UTC)
From:      Conrad Meyer <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r339487 - head/sys/sys
Message-ID:  <201810202049.w9KKnbW9013918@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Sat Oct 20 20:49:37 2018
New Revision: 339487
URL: https://svnweb.freebsd.org/changeset/base/339487

Log:
  random(4): Translate a comment requirement into a compile-time invariant
  
  In various places, random represents the set of sources as a 32-bit word
  bitmask.  It assumes all sources fit within this, i.e., the maximum valid
  source number is 31.
  
  There was a comment specifying this limitation, but we can actually refuse
  to compile if our assumption is violated instead.  We still have a few spare
  random source slots, but sooner or later someone may need to convert the
  masks used from raw 32-bit words to bitset(9) APIs.
  
  This prevents some kinds of developer foot-shooting when adding new random
  sources.  No functional change.
  
  Reviewed by:	delphij, markm
  Approved by:	secteam (delphij)
  Sponsored by:	Dell EMC Isilon
  Differential Revision:	https://reviews.freebsd.org/D16982

Modified:
  head/sys/sys/random.h

Modified: head/sys/sys/random.h
==============================================================================
--- head/sys/sys/random.h	Sat Oct 20 20:45:49 2018	(r339486)
+++ head/sys/sys/random.h	Sat Oct 20 20:49:37 2018	(r339487)
@@ -57,9 +57,6 @@ read_random(void *a __unused, u_int b __unused)
  * Note: if you add or remove members of random_entropy_source, remember to
  * also update the strings in the static array random_source_descr[] in
  * random_harvestq.c.
- *
- * NOTE: complain loudly to markm@ or on the lists if this enum gets more than 32
- * distinct values (0-31)! ENTROPYSOURCE may be == 32, but not > 32.
  */
 enum random_entropy_source {
 	RANDOM_START = 0,
@@ -92,6 +89,8 @@ enum random_entropy_source {
 	RANDOM_PURE_DARN,
 	ENTROPYSOURCE
 };
+_Static_assert(ENTROPYSOURCE <= 32,
+    "hardcoded assumption that values fit in a typical word-sized bitset");
 
 #define RANDOM_HARVEST_EVERYTHING_MASK ((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1)
 #define RANDOM_HARVEST_PURE_MASK (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START))



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201810202049.w9KKnbW9013918>