aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/random
diff options
context:
space:
mode:
authorConrad Meyer <cem@FreeBSD.org>2018-10-27 15:09:35 +0000
committerConrad Meyer <cem@FreeBSD.org>2018-10-27 15:09:35 +0000
commit37136b849f71d99bc28b5c04d21794b3291936f1 (patch)
treeedd94d329930b1eb186d69c3c5b40fb1521c66b5 /sys/dev/random
parent59c38254d706034e44eb2d32874fe9b94778e912 (diff)
Notes
Diffstat (limited to 'sys/dev/random')
-rw-r--r--sys/dev/random/random_harvestq.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/sys/dev/random/random_harvestq.c b/sys/dev/random/random_harvestq.c
index 6699d06156ea..6c6adb0120e8 100644
--- a/sys/dev/random/random_harvestq.c
+++ b/sys/dev/random/random_harvestq.c
@@ -64,6 +64,17 @@ __FBSDID("$FreeBSD$");
#include <dev/random/randomdev.h>
#include <dev/random/random_harvestq.h>
+#if defined(RANDOM_ENABLE_ETHER)
+#define _RANDOM_HARVEST_ETHER_OFF 0
+#else
+#define _RANDOM_HARVEST_ETHER_OFF (1u << RANDOM_NET_ETHER)
+#endif
+#if defined(RANDOM_ENABLE_UMA)
+#define _RANDOM_HARVEST_UMA_OFF 0
+#else
+#define _RANDOM_HARVEST_UMA_OFF (1u << RANDOM_UMA)
+#endif
+
static void random_kthread(void);
static void random_sources_feed(void);
@@ -254,6 +265,10 @@ read_rate_increment(u_int chunk)
static int
random_check_uint_harvestmask(SYSCTL_HANDLER_ARGS)
{
+ static const u_int user_immutable_mask =
+ (((1 << ENTROPYSOURCE) - 1) & (-1UL << RANDOM_PURE_START)) |
+ _RANDOM_HARVEST_ETHER_OFF | _RANDOM_HARVEST_UMA_OFF;
+
int error;
u_int value, orig_value;
@@ -268,8 +283,8 @@ random_check_uint_harvestmask(SYSCTL_HANDLER_ARGS)
/*
* Disallow userspace modification of pure entropy sources.
*/
- hc_source_mask = (value & ~RANDOM_HARVEST_PURE_MASK) |
- (orig_value & RANDOM_HARVEST_PURE_MASK);
+ hc_source_mask = (value & ~user_immutable_mask) |
+ (orig_value & user_immutable_mask);
return (0);
}
@@ -351,13 +366,17 @@ random_print_harvestmask_symbolic(SYSCTL_HANDLER_ARGS)
static void
random_harvestq_init(void *unused __unused)
{
+ static const u_int almost_everything_mask =
+ (((1 << (RANDOM_ENVIRONMENTAL_END + 1)) - 1) &
+ ~_RANDOM_HARVEST_ETHER_OFF & ~_RANDOM_HARVEST_UMA_OFF);
+
struct sysctl_oid *random_sys_o;
random_sys_o = SYSCTL_ADD_NODE(&random_clist,
SYSCTL_STATIC_CHILDREN(_kern_random),
OID_AUTO, "harvest", CTLFLAG_RW, 0,
"Entropy Device Parameters");
- hc_source_mask = RANDOM_HARVEST_EVERYTHING_MASK;
+ hc_source_mask = almost_everything_mask;
SYSCTL_ADD_PROC(&random_clist,
SYSCTL_CHILDREN(random_sys_o),
OID_AUTO, "mask", CTLTYPE_UINT | CTLFLAG_RW,