svn commit: r339487 - head/sys/sys
Conrad Meyer
cem at FreeBSD.org
Sat Oct 20 20:49:38 UTC 2018
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))
More information about the svn-src-all
mailing list