summaryrefslogtreecommitdiffstats
path: root/sys/dev/random
diff options
context:
space:
mode:
authormarkm <markm@FreeBSD.org>2000-07-11 19:37:25 +0000
committermarkm <markm@FreeBSD.org>2000-07-11 19:37:25 +0000
commit5812cc4cc4dab735724c12750d5a6cec440726b9 (patch)
tree46f62a0bbade452e9b00d99478c1c251893260c0 /sys/dev/random
parentb2ed023a037c625a44f2fc5669c6e85d0df4c160 (diff)
downloadFreeBSD-src-5812cc4cc4dab735724c12750d5a6cec440726b9.zip
FreeBSD-src-5812cc4cc4dab735724c12750d5a6cec440726b9.tar.gz
Storing to a pointer is (effectively) atomic; no need to protect this
with splhigh(). However, the entropy-harvesting routine needs pretty serious irq-protection, as it is called out of irq handlers etc. Clues given by: bde
Diffstat (limited to 'sys/dev/random')
-rw-r--r--sys/dev/random/harvest.c8
-rw-r--r--sys/dev/random/yarrow.c4
2 files changed, 2 insertions, 10 deletions
diff --git a/sys/dev/random/harvest.c b/sys/dev/random/harvest.c
index ceb9f9f..591d0d0 100644
--- a/sys/dev/random/harvest.c
+++ b/sys/dev/random/harvest.c
@@ -47,22 +47,14 @@ static void (*reap)(struct timespec *, u_int64_t, u_int, u_int, u_int) = NULL;
void
random_init_harvester(void (*reaper)(struct timespec *, u_int64_t, u_int, u_int, u_int))
{
- intrmask_t mask;
-
- mask = splhigh();
reap = reaper;
- splx(mask);
}
/* Deinitialise the harvester at unload time */
void
random_deinit_harvester(void)
{
- intrmask_t mask;
-
- mask = splhigh();
reap = NULL;
- splx(mask);
}
/* Entropy harvesting routine. This is supposed to be fast; do */
diff --git a/sys/dev/random/yarrow.c b/sys/dev/random/yarrow.c
index 99453f6..c6ae448 100644
--- a/sys/dev/random/yarrow.c
+++ b/sys/dev/random/yarrow.c
@@ -320,8 +320,8 @@ random_harvest_internal(struct timespec *nanotime, u_int64_t entropy,
#endif
if (origin < ENTROPYSOURCE) {
- /* The reseed task must not be jumped on */
- mask = splsofttq();
+ /* Called inside irq handlers; protect from interference */
+ mask = splhigh();
which = random_state.which;
pool = &random_state.pool[which];
OpenPOWER on IntegriCloud