git: 8bd9a9e9e4cb - main - random: CTASSERT check sizeof random_source_descr[]

From: David E. O'Brien <obrien_at_FreeBSD.org>
Date: Fri, 31 Oct 2025 18:01:49 UTC
The branch main has been updated by obrien:

URL: https://cgit.FreeBSD.org/src/commit/?id=8bd9a9e9e4cb3e293c1639319692ce201eb8fc53

commit 8bd9a9e9e4cb3e293c1639319692ce201eb8fc53
Author:     David E. O'Brien <obrien@FreeBSD.org>
AuthorDate: 2025-10-22 07:19:20 +0000
Commit:     David E. O'Brien <obrien@FreeBSD.org>
CommitDate: 2025-10-31 18:01:45 +0000

    random: CTASSERT check sizeof random_source_descr[]
    
    Ensure that the number of elements of random_source_descr[]
    and fxrng_ent_char[] matches that of enum random_entropy_source.
    
    Reviewed by:    cem
    Differential Revision: https://reviews.freebsd.org/D53255
---
 sys/dev/random/fenestrasX/fx_pool.c | 3 ++-
 sys/dev/random/random_harvestq.c    | 6 ++++--
 2 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/sys/dev/random/fenestrasX/fx_pool.c b/sys/dev/random/fenestrasX/fx_pool.c
index 8e63b345a1bd..b6ffc202769e 100644
--- a/sys/dev/random/fenestrasX/fx_pool.c
+++ b/sys/dev/random/fenestrasX/fx_pool.c
@@ -127,7 +127,7 @@ static const struct fxrng_ent_cls fxrng_garbage = {
  */
 static const struct fxrng_ent_char {
 	const struct fxrng_ent_cls	*entc_cls;
-} fxrng_ent_char[ENTROPYSOURCE] = {
+} fxrng_ent_char[/*ENTROPYSOURCE*/] = {
 	[RANDOM_CACHED] = {
 		.entc_cls = &fxrng_hi_push,
 	},
@@ -213,6 +213,7 @@ static const struct fxrng_ent_char {
 		.entc_cls = &fxrng_hi_pull,
 	},
 };
+CTASSERT(nitems(fxrng_ent_char) == ENTROPYSOURCE);
 
 /* Useful for single-bit-per-source state. */
 BITSET_DEFINE(fxrng_bits, ENTROPYSOURCE);
diff --git a/sys/dev/random/random_harvestq.c b/sys/dev/random/random_harvestq.c
index 643dbac1fc8b..b591ffd3b544 100644
--- a/sys/dev/random/random_harvestq.c
+++ b/sys/dev/random/random_harvestq.c
@@ -88,7 +88,7 @@ static void random_sources_feed(void);
 static __read_mostly bool epoch_inited;
 static __read_mostly epoch_t rs_epoch;
 
-static const char *random_source_descr[ENTROPYSOURCE];
+static const char *random_source_descr[];
 
 /*
  * How many events to queue up. We create this many items in
@@ -109,6 +109,7 @@ volatile int random_kthread_control;
  * Updates are synchronized by the harvest mutex.
  */
 __read_frequently u_int hc_source_mask;
+CTASSERT(ENTROPYSOURCE <= sizeof(hc_source_mask) * NBBY);
 
 struct random_sources {
 	CK_LIST_ENTRY(random_sources)	 rrs_entries;
@@ -647,7 +648,7 @@ SYSCTL_PROC(_kern_random_harvest, OID_AUTO, mask_bin,
     random_print_harvestmask, "A",
     "Entropy harvesting mask (printable)");
 
-static const char *random_source_descr[ENTROPYSOURCE] = {
+static const char *random_source_descr[/*ENTROPYSOURCE*/] = {
 	[RANDOM_CACHED] = "CACHED",
 	[RANDOM_ATTACH] = "ATTACH",
 	[RANDOM_KEYBOARD] = "KEYBOARD",
@@ -678,6 +679,7 @@ static const char *random_source_descr[ENTROPYSOURCE] = {
 	[RANDOM_PURE_ARM_TRNG] = "PURE_ARM_TRNG",
 	/* "ENTROPYSOURCE" */
 };
+CTASSERT(nitems(random_source_descr) == ENTROPYSOURCE);
 
 static int
 random_print_harvestmask_symbolic(SYSCTL_HANDLER_ARGS)