Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 26 Aug 2018 12:51:47 +0000 (UTC)
From:      Mark Murray <markm@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r338324 - in head: . share/man/man4 share/man/man9 sys/arm/amlogic/aml8726 sys/arm/broadcom/bcm2835 sys/conf sys/dev/glxsb sys/dev/hifn sys/dev/random sys/dev/rndtest sys/dev/safe sys/d...
Message-ID:  <201808261251.w7QCplZb032438@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markm
Date: Sun Aug 26 12:51:46 2018
New Revision: 338324
URL: https://svnweb.freebsd.org/changeset/base/338324

Log:
  Remove the Yarrow PRNG algorithm option in accordance with due notice
  given in random(4).
  
  This includes updating of the relevant man pages, and no-longer-used
  harvesting parameters.
  
  Ensure that the pseudo-unit-test still does something useful, now also
  with the "other" algorithm instead of Yarrow.
  
  PR:		230870
  Reviewed by:	cem
  Approved by:	so(delphij,gtetlow)
  Approved by:	re(marius)
  Differential Revision:	https://reviews.freebsd.org/D16898

Deleted:
  head/sys/dev/random/yarrow.c
  head/sys/dev/random/yarrow.h
  head/sys/modules/random_yarrow/Makefile
Modified:
  head/UPDATING
  head/share/man/man4/random.4
  head/share/man/man9/random_harvest.9
  head/sys/arm/amlogic/aml8726/aml8726_rng.c
  head/sys/arm/broadcom/bcm2835/bcm2835_rng.c
  head/sys/conf/NOTES
  head/sys/conf/files
  head/sys/conf/options
  head/sys/dev/glxsb/glxsb.c
  head/sys/dev/hifn/hifn7751.c
  head/sys/dev/random/build.sh
  head/sys/dev/random/fortuna.c
  head/sys/dev/random/other_algorithm.c
  head/sys/dev/random/other_algorithm.h
  head/sys/dev/random/random_harvestq.c
  head/sys/dev/random/random_harvestq.h
  head/sys/dev/random/randomdev.c
  head/sys/dev/random/unit_test.c
  head/sys/dev/random/unit_test.h
  head/sys/dev/rndtest/rndtest.c
  head/sys/dev/safe/safe.c
  head/sys/dev/syscons/scmouse.c
  head/sys/dev/syscons/syscons.c
  head/sys/dev/ubsec/ubsec.c
  head/sys/dev/virtio/random/virtio_random.c
  head/sys/dev/vt/vt_core.c
  head/sys/dev/vt/vt_sysmouse.c
  head/sys/fs/tmpfs/tmpfs_subr.c
  head/sys/kern/kern_intr.c
  head/sys/kern/subr_bus.c
  head/sys/mips/cavium/octeon_rnd.c
  head/sys/modules/Makefile
  head/sys/net/if_ethersubr.c
  head/sys/net/if_tun.c
  head/sys/netgraph/ng_iface.c
  head/sys/sys/random.h
  head/sys/ufs/ffs/ffs_inode.c
  head/sys/vm/uma_core.c
  head/tools/tools/sysdoc/tunables.mdoc

Modified: head/UPDATING
==============================================================================
--- head/UPDATING	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/UPDATING	Sun Aug 26 12:51:46 2018	(r338324)
@@ -31,6 +31,11 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 12.x IS SLOW:
 	disable the most expensive debugging functionality run
 	"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
 
+20180826:
+	The Yarrow CSPRNG has been removed from the kernel as it has not been
+	supported by its designers since at least 2003. Fortuna has been the
+	default since FreeBSD-11.
+
 20170822:
 	devctl freeze/that have gone into the tree, the rc scripts have been
 	updated to use them and devmatch has been changed.  You should update

Modified: head/share/man/man4/random.4
==============================================================================
--- head/share/man/man4/random.4	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/share/man/man4/random.4	Sun Aug 26 12:51:46 2018	(r338324)
@@ -23,7 +23,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd August 17, 2015
+.Dd August 26, 2018
 .Dt RANDOM 4
 .Os
 .Sh NAME
@@ -153,26 +153,15 @@ the
 device is not created
 until an "algorithm module"
 is loaded.
-Two of these modules
-are built by default,
-.Em random_fortuna
-and
-.Em random_yarrow .
+The only module built by default is
+.Em random_fortuna .
 The
 .Em random_yarrow
-module is deprecated,
-and will be removed in
-.Fx 12.
-Use of the Yarrow algorithm
-is not encouraged,
-but while still present
-in the kernel source,
-it can be selected with the
-.Cd "options RANDOM_YARROW"
-kernel option.
-Note that these loadable modules
-are slightly less efficient
-than their compiled-in equivalents.
+module was removed in
+.Fx 12 .
+Note that this loadable module
+is slightly less efficient
+than its compiled-in equivalent.
 This is because some functions
 must be locked against
 load and unload events,
@@ -351,4 +340,4 @@ introduced in
 The Yarrow algorithm
 is no longer supported
 by its authors,
-and is therefore deprecated.
+and is therefore no longer available.

Modified: head/share/man/man9/random_harvest.9
==============================================================================
--- head/share/man/man9/random_harvest.9	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/share/man/man9/random_harvest.9	Sun Aug 26 12:51:46 2018	(r338324)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd July 13, 2015
+.Dd August 26, 2018
 .Dt RANDOM_HARVEST 9
 .Os
 .Sh NAME
@@ -38,21 +38,18 @@
 .Fo random_harvest_direct
 .Fa "void *entropy"
 .Fa "u_int size"
-.Fa "u_int bits"
 .Fa "enum esource source"
 .Fc
 .Ft void
 .Fo random_harvest_fast
 .Fa "void *entropy"
 .Fa "u_int size"
-.Fa "u_int bits"
 .Fa "enum esource source"
 .Fc
 .Ft void
 .Fo random_harvest_queue
 .Fa "void *entropy"
 .Fa "u_int size"
-.Fa "u_int bits"
 .Fa "enum esource source"
 .Fc
 .Sh DESCRIPTION
@@ -107,18 +104,6 @@ and is the default
 choice for most entropy sources
 such as interrupts
 or console events.
-.Pp
-The
-.Fa bits
-argument is only used
-by the deprecated Yarrow algorithm.
-For compatibility,
-the caller should
-.Em "very conservatively"
-estimate the number of random bits
-in the sample,
-and pass this in
-.Fa bits .
 .Pp
 Interrupt harvesting has been
 in part simplified

Modified: head/sys/arm/amlogic/aml8726/aml8726_rng.c
==============================================================================
--- head/sys/arm/amlogic/aml8726/aml8726_rng.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/arm/amlogic/aml8726/aml8726_rng.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -75,8 +75,7 @@ aml8726_rng_harvest(void *arg)
 	rn[0] = CSR_READ_4(sc, AML_RNG_0_REG);
 	rn[1] = CSR_READ_4(sc, AML_RNG_1_REG);
 
-	random_harvest(rn, sizeof(rn), sizeof(rn) * NBBY / 2,
-	    RANDOM_PURE_AML8726);
+	random_harvest(rn, sizeof(rn), RANDOM_PURE_AML8726);
 
 	callout_reset(&sc->co, sc->ticks, aml8726_rng_harvest, sc);
 }

Modified: head/sys/arm/broadcom/bcm2835/bcm2835_rng.c
==============================================================================
--- head/sys/arm/broadcom/bcm2835/bcm2835_rng.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/arm/broadcom/bcm2835/bcm2835_rng.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -289,8 +289,7 @@ bcm2835_rng_harvest(void *arg)
 
 	cnt = nread * sizeof(uint32_t);
 	if (cnt > 0)
-		random_harvest_queue(sc->sc_buf, cnt, cnt * NBBY / 2,
-		    RANDOM_PURE_BROADCOM);
+		random_harvest_queue(sc->sc_buf, cnt, RANDOM_PURE_BROADCOM);
 
 	callout_reset(&sc->sc_rngto, RNG_CALLOUT_TICKS, bcm2835_rng_harvest, sc);
 }

Modified: head/sys/conf/NOTES
==============================================================================
--- head/sys/conf/NOTES	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/conf/NOTES	Sun Aug 26 12:51:46 2018	(r338324)
@@ -3008,11 +3008,8 @@ options 	BROOKTREE_ALLOC_PAGES=(217*4+1)
 options 	MAXFILES=999
 
 # Random number generator
-# Only ONE of the below two may be used; they are mutually exclusive.
-# If neither is present, then the Fortuna algorithm is selected.
-#options 	RANDOM_YARROW	# Yarrow CSPRNG (old default)
-#options 	RANDOM_LOADABLE	# Allow the algorithm to be loaded as
-				# a module.
+# Allow the CSPRNG algorithm to be loaded as a module.
+#options 	RANDOM_LOADABLE
 # Select this to allow high-rate but potentially expensive
 # harvesting of Slab-Allocator entropy. In very high-rate
 # situations the value of doing this is dubious at best.

Modified: head/sys/conf/files
==============================================================================
--- head/sys/conf/files	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/conf/files	Sun Aug 26 12:51:46 2018	(r338324)
@@ -2821,12 +2821,9 @@ rt2860.fw			optional rt2860fw | ralfw		\
 	clean		"rt2860.fw"
 dev/random/random_infra.c	optional random
 dev/random/random_harvestq.c	optional random
-dev/random/randomdev.c		optional random random_yarrow | \
-					 random !random_yarrow !random_loadable
-dev/random/yarrow.c		optional random random_yarrow
-dev/random/fortuna.c		optional random !random_yarrow !random_loadable
-dev/random/hash.c		optional random random_yarrow | \
-					 random !random_yarrow !random_loadable
+dev/random/randomdev.c		optional random
+dev/random/fortuna.c		optional random !random_loadable
+dev/random/hash.c		optional random
 dev/rc/rc.c			optional rc
 dev/rccgpio/rccgpio.c		optional rccgpio gpio
 dev/re/if_re.c			optional re

Modified: head/sys/conf/options
==============================================================================
--- head/sys/conf/options	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/conf/options	Sun Aug 26 12:51:46 2018	(r338324)
@@ -983,9 +983,6 @@ RACCT_DEFAULT_TO_DISABLED	opt_global.h
 RCTL		opt_global.h
 
 # Random number generator(s)
-# Which CSPRNG hash we get.
-# If Yarrow is not chosen, Fortuna is selected.
-RANDOM_YARROW	opt_global.h
 # With this, no entropy processor is loaded, but the entropy
 # harvesting infrastructure is present. This means an entropy
 # processor may be loaded as a module.

Modified: head/sys/dev/glxsb/glxsb.c
==============================================================================
--- head/sys/dev/glxsb/glxsb.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/glxsb/glxsb.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -457,7 +457,7 @@ glxsb_rnd(void *v)
 		value = bus_read_4(sc->sc_sr, SB_RANDOM_NUM);
 		/* feed with one uint32 */
 		/* MarkM: FIX!! Check that this does not swamp the harvester! */
-		random_harvest_queue(&value, sizeof(value), 32/2, RANDOM_PURE_GLXSB);
+		random_harvest_queue(&value, sizeof(value), RANDOM_PURE_GLXSB);
 	}
 
 	callout_reset(&sc->sc_rngco, sc->sc_rnghz, glxsb_rnd, sc);

Modified: head/sys/dev/hifn/hifn7751.c
==============================================================================
--- head/sys/dev/hifn/hifn7751.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/hifn/hifn7751.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -259,7 +259,7 @@ static void
 default_harvest(struct rndtest_state *rsp, void *buf, u_int count)
 {
 	/* MarkM: FIX!! Check that this does not swamp the harvester! */
-	random_harvest_queue(buf, count, count*NBBY/2, RANDOM_PURE_HIFN);
+	random_harvest_queue(buf, count, RANDOM_PURE_HIFN);
 }
 
 static u_int

Modified: head/sys/dev/random/build.sh
==============================================================================
--- head/sys/dev/random/build.sh	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/build.sh	Sun Aug 26 12:51:46 2018	(r338324)
@@ -28,23 +28,23 @@
 #
 # Basic script to build crude unit tests.
 #
-# Diff-reduction checking between Yarrow and fortuna is done like so:
+# Diff-reduction checking between fortuna and the other algorithm is done like so:
 #
-# $ diff -u -B <(sed -e 's/yarrow/wombat/g' \
-#                    -e 's/YARROW/WOMBAT/g' yarrow.c) \
-#              <(sed -e 's/fortuna/wombat/g' \
-#                    -e 's/FORTUNA/WOMBAT/g' fortuna.c) | less
+# $ diff -u -B <(sed -e 's/random_other/random_wombat/g' \
+#                    -e 's/RANDOM_OTHER/RANDOM_WOMBAT/g' other_algorithm.c) \
+#              <(sed -e 's/random_fortuna/random_wombat/g' \
+#                    -e 's/RANDOM_FORTUNA/RANDOM_WOMBAT/g' fortuna.c) | less
 #
 cc -g -O0 -pthread \
 	-I../.. -lstdthreads -Wall \
 	unit_test.c \
-	yarrow.c \
+	other_algorithm.c \
 	hash.c \
 	../../crypto/rijndael/rijndael-api-fst.c \
 	../../crypto/rijndael/rijndael-alg-fst.c \
 	../../crypto/sha2/sha256c.c \
 	-lz \
-	-o yunit_test
+	-o other_unit_test
 cc -g -O0 -pthread \
 	-I../.. -lstdthreads -Wall \
 	unit_test.c \
@@ -54,4 +54,4 @@ cc -g -O0 -pthread \
 	../../crypto/rijndael/rijndael-alg-fst.c \
 	../../crypto/sha2/sha256c.c \
 	-lz \
-	-o funit_test
+	-o fortuna_unit_test

Modified: head/sys/dev/random/fortuna.c
==============================================================================
--- head/sys/dev/random/fortuna.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/fortuna.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -59,6 +59,7 @@ __FBSDID("$FreeBSD$");
 #include <dev/random/uint128.h>
 #include <dev/random/fortuna.h>
 #else /* !_KERNEL */
+#include <sys/param.h>
 #include <inttypes.h>
 #include <stdbool.h>
 #include <stdio.h>
@@ -97,9 +98,11 @@ CTASSERT(RANDOM_BLOCKSIZE == sizeof(uint128_t));
 CTASSERT(RANDOM_KEYSIZE == 2*RANDOM_BLOCKSIZE);
 
 /* Probes for dtrace(1) */
+#ifdef _KERNEL
 SDT_PROVIDER_DECLARE(random);
 SDT_PROVIDER_DEFINE(random);
 SDT_PROBE_DEFINE2(random, fortuna, event_processor, debug, "u_int", "struct fs_pool *");
+#endif /* _KERNEL */
 
 /*
  * This is the beastie that needs protecting. It contains all of the
@@ -398,7 +401,9 @@ random_fortuna_pre_read(void)
 			} else
 				break;
 		}
+#ifdef _KERNEL
 		SDT_PROBE2(random, fortuna, event_processor, debug, fortuna_state.fs_reseedcount, fortuna_state.fs_pool);
+#endif
 		/* FS&K */
 		random_fortuna_reseed_internal(s, i < RANDOM_FORTUNA_NPOOLS ? i + 1 : RANDOM_FORTUNA_NPOOLS);
 		/* Clean up and secure */

Modified: head/sys/dev/random/other_algorithm.c
==============================================================================
--- head/sys/dev/random/other_algorithm.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/other_algorithm.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -1,5 +1,5 @@
 /*-
- * Copyright (c) 2015 Mark R V Murray
+ * Copyright (c) 2015-2018 Mark R V Murray
  * All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
@@ -30,19 +30,21 @@
  * containing an alternative entropy-processing algorithm for random(4).
  *
  * The functions below should be completed with the appropriate code,
- * and the nearby yarrow.c and fortuna.c may be consulted for examples
- * of working code.
+ * and the nearby fortuna.c may be consulted for examples of working code.
  *
  * The author is willing to provide reasonable help to those wishing to
  * write such a module for themselves. Please use the markm@ FreeBSD
  * email address, and ensure that you are developing this on a suitably
- * supported branch (This is currently 11-CURRENT, and will be no
- * older than 11-STABLE in the future).
+ * supported branch (This is currently 12-CURRENT, and may be no
+ * older than 12-STABLE in the future).
  */
 
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include <sys/limits.h>
+
+#ifdef _KERNEL
 #include <sys/param.h>
 #include <sys/kernel.h>
 #include <sys/lock.h>
@@ -62,7 +64,25 @@ __FBSDID("$FreeBSD$");
 #include <dev/random/random_harvestq.h>
 #include <dev/random/uint128.h>
 #include <dev/random/other_algorithm.h>
+#else /* !_KERNEL */
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <threads.h>
 
+#include "unit_test.h"
+
+#include <crypto/rijndael/rijndael-api-fst.h>
+#include <crypto/sha2/sha256.h>
+
+#include <dev/random/hash.h>
+#include <dev/random/randomdev.h>
+#include <dev/random/uint128.h>
+#include <dev/random/other_algorithm.h>
+#endif /* _KERNEL */
+
 static void random_other_pre_read(void);
 static void random_other_read(uint8_t *, u_int);
 static bool random_other_seeded(void);
@@ -73,9 +93,7 @@ static void random_other_deinit_alg(void *);
 /*
  * RANDOM_OTHER_NPOOLS is used when reading hardware random
  * number sources to ensure that each pool gets one read sample
- * per loop iteration. Yarrow has 2 such pools (FAST and SLOW),
- * and fortuna has 32 (0-31). The RNG used prior to Yarrow and
- * ported from Linux had just 1 pool.
+ * per loop iteration. Fortuna has 32 (0-31).
  */
 #define RANDOM_OTHER_NPOOLS 1
 

Modified: head/sys/dev/random/other_algorithm.h
==============================================================================
--- head/sys/dev/random/other_algorithm.h	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/other_algorithm.h	Sun Aug 26 12:51:46 2018	(r338324)
@@ -31,14 +31,13 @@
  * containing an alternative entropy-processing algorithm for random(4).
  *
  * The functions below should be completed with the appropriate code,
- * and the nearby yarrow.c and fortuna.c may be consulted for examples
- * of working code.
+ * and the nearby fortuna.c may be consulted for examples of working code.
  *
  * The author is willing to provide reasonable help to those wishing to
  * write such a module for themselves. Please use the markm@ FreeBSD
  * email address, and ensure that you are developing this on a suitably
- * supported branch (This is currently 11-CURRENT, and will be no
- * older than 11-STABLE in the future).
+ * supported branch (This is currently 12-CURRENT, and may be no
+ * older than 12-STABLE in the future).
  */
 
 #ifndef SYS_DEV_RANDOM_OTHER_H_INCLUDED

Modified: head/sys/dev/random/random_harvestq.c
==============================================================================
--- head/sys/dev/random/random_harvestq.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/random_harvestq.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -140,7 +140,7 @@ static struct kproc_desc random_proc_kp = {
 	&harvest_context.hc_kthread_proc,
 };
 
-/* Pass the given event straight through to Fortuna/Yarrow/Whatever. */
+/* Pass the given event straight through to Fortuna/Whatever. */
 static __inline void
 random_harvestq_fast_process_event(struct harvest_event *event)
 {
@@ -178,7 +178,7 @@ random_kthread(void)
 		/* XXX: FIX!! Increase the high-performance data rate? Need some measurements first. */
 		for (i = 0; i < RANDOM_ACCUM_MAX; i++) {
 			if (harvest_context.hc_entropy_fast_accumulator.buf[i]) {
-				random_harvest_direct(harvest_context.hc_entropy_fast_accumulator.buf + i, sizeof(harvest_context.hc_entropy_fast_accumulator.buf[0]), 4, RANDOM_UMA);
+				random_harvest_direct(harvest_context.hc_entropy_fast_accumulator.buf + i, sizeof(harvest_context.hc_entropy_fast_accumulator.buf[0]), RANDOM_UMA);
 				harvest_context.hc_entropy_fast_accumulator.buf[i] = 0;
 			}
 		}
@@ -197,8 +197,7 @@ SYSINIT(random_device_h_proc, SI_SUB_KICK_SCHEDULER, S
 /*
  * Run through all fast sources reading entropy for the given
  * number of rounds, which should be a multiple of the number
- * of entropy accumulation pools in use; 2 for Yarrow and 32
- * for Fortuna.
+ * of entropy accumulation pools in use; it is 32 for Fortuna.
  */
 static void
 random_sources_feed(void)
@@ -234,7 +233,7 @@ random_sources_feed(void)
 				printf("%s: rs_read for hardware device '%s' returned no entropy.\n", __func__, rrs->rrs_source->rs_ident);
 				continue;
 			}
-			random_harvest_direct(entropy, n, (n*8)/2, rrs->rrs_source->rs_source);
+			random_harvest_direct(entropy, n, rrs->rrs_source->rs_source);
 		}
 	}
 	explicit_bzero(entropy, sizeof(entropy));
@@ -380,7 +379,7 @@ SYSINIT(random_device_h_init, SI_SUB_RANDOM, SI_ORDER_
 /*
  * This is used to prime the RNG by grabbing any early random stuff
  * known to the kernel, and inserting it directly into the hashing
- * module, e.g. Fortuna or Yarrow.
+ * module, currently Fortuna.
  */
 /* ARGSUSED */
 static void
@@ -414,7 +413,6 @@ random_harvestq_prime(void *unused __unused)
 				count = sizeof(event.he_entropy);
 				event.he_somecounter = (uint32_t)get_cyclecount();
 				event.he_size = count;
-				event.he_bits = count/4; /* Underestimate the size for Yarrow */
 				event.he_source = RANDOM_CACHED;
 				event.he_destination = harvest_context.hc_destination[0]++;
 				memcpy(event.he_entropy, data + i, sizeof(event.he_entropy));
@@ -459,8 +457,7 @@ SYSUNINIT(random_device_h_init, SI_SUB_RANDOM, SI_ORDE
  * read which can be quite expensive.
  */
 void
-random_harvest_queue_(const void *entropy, u_int size, u_int bits,
-	enum random_entropy_source origin)
+random_harvest_queue_(const void *entropy, u_int size, enum random_entropy_source origin)
 {
 	struct harvest_event *event;
 	u_int ring_in;
@@ -474,7 +471,6 @@ random_harvest_queue_(const void *entropy, u_int size,
 		event->he_somecounter = (uint32_t)get_cyclecount();
 		event->he_source = origin;
 		event->he_destination = harvest_context.hc_destination[origin]++;
-		event->he_bits = bits;
 		if (size <= sizeof(event->he_entropy)) {
 			event->he_size = size;
 			memcpy(event->he_entropy, entropy, size);
@@ -496,7 +492,7 @@ random_harvest_queue_(const void *entropy, u_int size,
  * This is the right place for high-rate harvested data.
  */
 void
-random_harvest_fast_(const void *entropy, u_int size, u_int bits)
+random_harvest_fast_(const void *entropy, u_int size)
 {
 	u_int pos;
 
@@ -512,7 +508,7 @@ random_harvest_fast_(const void *entropy, u_int size, 
  * (e.g.) booting when initial entropy is being gathered.
  */
 void
-random_harvest_direct_(const void *entropy, u_int size, u_int bits, enum random_entropy_source origin)
+random_harvest_direct_(const void *entropy, u_int size, enum random_entropy_source origin)
 {
 	struct harvest_event event;
 
@@ -520,7 +516,6 @@ random_harvest_direct_(const void *entropy, u_int size
 	size = MIN(size, sizeof(event.he_entropy));
 	event.he_somecounter = (uint32_t)get_cyclecount();
 	event.he_size = size;
-	event.he_bits = bits;
 	event.he_source = origin;
 	event.he_destination = harvest_context.hc_destination[origin]++;
 	memcpy(event.he_entropy, entropy, size);

Modified: head/sys/dev/random/random_harvestq.h
==============================================================================
--- head/sys/dev/random/random_harvestq.h	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/random_harvestq.h	Sun Aug 26 12:51:46 2018	(r338324)
@@ -38,10 +38,9 @@ struct harvest_event {
 	uint32_t	he_somecounter;		/* fast counter for clock jitter */
 	uint32_t	he_entropy[HARVESTSIZE];/* some harvested entropy */
 	uint8_t		he_size;		/* harvested entropy byte count */
-	uint8_t		he_bits;		/* stats about the entropy */
 	uint8_t		he_destination;		/* destination pool of this entropy */
 	uint8_t		he_source;		/* origin of the entropy */
-} __packed;
+};
 
 void read_rate_increment(u_int);
 

Modified: head/sys/dev/random/randomdev.c
==============================================================================
--- head/sys/dev/random/randomdev.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/randomdev.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -166,7 +166,7 @@ READ_RANDOM_UIO(struct uio *uio, bool nonblock)
 			 * Belt-and-braces.
 			 * Round up the read length to a crypto block size multiple,
 			 * which is what the underlying generator is expecting.
-			 * See the random_buf size requirements in the Yarrow/Fortuna code.
+			 * See the random_buf size requirements in the Fortuna code.
 			 */
 			read_len = roundup(read_len, RANDOM_BLOCKSIZE);
 			/* Work in chunks page-sized or less */
@@ -250,7 +250,6 @@ randomdev_accumulate(uint8_t *buf, u_int count)
 	for (i = 0; i < RANDOM_KEYSIZE_WORDS; i += sizeof(event.he_entropy)/sizeof(event.he_entropy[0])) {
 		event.he_somecounter = (uint32_t)get_cyclecount();
 		event.he_size = sizeof(event.he_entropy);
-		event.he_bits = event.he_size/8;
 		event.he_source = RANDOM_CACHED;
 		event.he_destination = destination++; /* Harmless cheating */
 		memcpy(event.he_entropy, entropy_data + i, sizeof(event.he_entropy));

Modified: head/sys/dev/random/unit_test.c
==============================================================================
--- head/sys/dev/random/unit_test.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/unit_test.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -31,7 +31,6 @@
 
 cc -g -O0 -pthread -DRANDOM_<alg> -I../.. -lstdthreads -Wall \
 	unit_test.c \
-	yarrow.c \
 	fortuna.c \
 	hash.c \
 	../../crypto/rijndael/rijndael-api-fst.c \
@@ -41,7 +40,9 @@ cc -g -O0 -pthread -DRANDOM_<alg> -I../.. -lstdthreads
 	-o unit_test
 ./unit_test
 
-Where <alg> is YARROW or FORTUNA.
+Where <alg> is FORTUNA. The parameterisation is a leftover from
+when Yarrow was an option, and remains to enable the testing of
+possible future algorithms.
 */
 
 #include <sys/types.h>
@@ -157,7 +158,6 @@ RunHarvester(void *arg __unused)
 		e.he_somecounter = i;
 		*((uint64_t *)e.he_entropy) = random();
 		e.he_size = 8;
-		e.he_bits = random()%4;
 		e.he_destination = i;
 		e.he_source = (i + 3)%7;
 		e.he_next = NULL;

Modified: head/sys/dev/random/unit_test.h
==============================================================================
--- head/sys/dev/random/unit_test.h	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/random/unit_test.h	Sun Aug 26 12:51:46 2018	(r338324)
@@ -74,9 +74,8 @@ enum random_entropy_source {
 struct harvest_event {
 	uintmax_t			he_somecounter;		/* fast counter for clock jitter */
 	uint32_t			he_entropy[HARVESTSIZE];/* some harvested entropy */
-	u_int				he_size;		/* harvested entropy byte count */
-	u_int				he_bits;		/* stats about the entropy */
-	u_int				he_destination;		/* destination pool of this entropy */
+	uint8_t				he_size;		/* harvested entropy byte count */
+	uint8_t				he_destination;		/* destination pool of this entropy */
 	enum random_entropy_source	he_source;		/* origin of the entropy */
 	void *				he_next;		/* next item on the list */
 };

Modified: head/sys/dev/rndtest/rndtest.c
==============================================================================
--- head/sys/dev/rndtest/rndtest.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/rndtest/rndtest.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -149,7 +149,7 @@ rndtest_harvest(struct rndtest_state *rsp, void *buf, 
 		rndstats.rst_discard += len;
 	else
 	/* MarkM: FIX!! Check that this does not swamp the harvester! */
-	random_harvest_queue(buf, len, len*NBBY/2, RANDOM_PURE_RNDTEST);
+	random_harvest_queue(buf, len, RANDOM_PURE_RNDTEST);
 }
 
 static void

Modified: head/sys/dev/safe/safe.c
==============================================================================
--- head/sys/dev/safe/safe.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/safe/safe.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -212,7 +212,7 @@ static void
 default_harvest(struct rndtest_state *rsp, void *buf, u_int count)
 {
 	/* MarkM: FIX!! Check that this does not swamp the harvester! */
-	random_harvest_queue(buf, count, count*NBBY/2, RANDOM_PURE_SAFE);
+	random_harvest_queue(buf, count, RANDOM_PURE_SAFE);
 }
 #endif /* SAFE_NO_RNG */
 

Modified: head/sys/dev/syscons/scmouse.c
==============================================================================
--- head/sys/dev/syscons/scmouse.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/syscons/scmouse.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -669,7 +669,7 @@ sc_mouse_ioctl(struct tty *tp, u_long cmd, caddr_t dat
 
 	mouse = (mouse_info_t*)data;
 
-	random_harvest_queue(mouse, sizeof(mouse_info_t), 2, RANDOM_MOUSE);
+	random_harvest_queue(mouse, sizeof(mouse_info_t), RANDOM_MOUSE);
 
 	if (cmd == OLD_CONS_MOUSECTL) {
 	    static u_char swapb[] = { 0, 4, 2, 6, 1, 5, 3, 7 };

Modified: head/sys/dev/syscons/syscons.c
==============================================================================
--- head/sys/dev/syscons/syscons.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/syscons/syscons.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -3734,7 +3734,7 @@ next_code:
 	sc_touch_scrn_saver();
 
     if (!(flags & SCGETC_CN))
-	random_harvest_queue(&c, sizeof(c), 1, RANDOM_KEYBOARD);
+	random_harvest_queue(&c, sizeof(c), RANDOM_KEYBOARD);
 
     if (sc->kbd_open_level == 0 && scp->kbd_mode != K_XLATE)
 	return KEYCHAR(c);

Modified: head/sys/dev/ubsec/ubsec.c
==============================================================================
--- head/sys/dev/ubsec/ubsec.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/ubsec/ubsec.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -260,7 +260,7 @@ static void
 default_harvest(struct rndtest_state *rsp, void *buf, u_int count)
 {
 	/* MarkM: FIX!! Check that this does not swamp the harvester! */
-	random_harvest_queue(buf, count, count*NBBY/2, RANDOM_PURE_UBSEC);
+	random_harvest_queue(buf, count, RANDOM_PURE_UBSEC);
 }
 
 static int

Modified: head/sys/dev/virtio/random/virtio_random.c
==============================================================================
--- head/sys/dev/virtio/random/virtio_random.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/virtio/random/virtio_random.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -217,8 +217,7 @@ vtrnd_harvest(struct vtrnd_softc *sc)
 	virtqueue_notify(vq);
 	virtqueue_poll(vq, NULL);
 
-	random_harvest_queue(&value, sizeof(value), sizeof(value) * NBBY / 2,
-	    RANDOM_PURE_VIRTIO);
+	random_harvest_queue(&value, sizeof(value), RANDOM_PURE_VIRTIO);
 }
 
 static void

Modified: head/sys/dev/vt/vt_core.c
==============================================================================
--- head/sys/dev/vt/vt_core.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/vt/vt_core.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -815,7 +815,7 @@ vt_processkey(keyboard_t *kbd, struct vt_device *vd, i
 {
 	struct vt_window *vw = vd->vd_curwindow;
 
-	random_harvest_queue(&c, sizeof(c), 1, RANDOM_KEYBOARD);
+	random_harvest_queue(&c, sizeof(c), RANDOM_KEYBOARD);
 #if VT_ALT_TO_ESC_HACK
 	if (c & RELKEY) {
 		switch (c & ~RELKEY) {

Modified: head/sys/dev/vt/vt_sysmouse.c
==============================================================================
--- head/sys/dev/vt/vt_sysmouse.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/dev/vt/vt_sysmouse.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -214,7 +214,7 @@ sysmouse_process_event(mouse_info_t *mi)
 	unsigned char buf[MOUSE_SYS_PACKETSIZE];
 	int x, y, iy, z;
 
-	random_harvest_queue(mi, sizeof *mi, 2, RANDOM_MOUSE);
+	random_harvest_queue(mi, sizeof *mi, RANDOM_MOUSE);
 
 	mtx_lock(&sysmouse_lock);
 	switch (mi->operation) {

Modified: head/sys/fs/tmpfs/tmpfs_subr.c
==============================================================================
--- head/sys/fs/tmpfs/tmpfs_subr.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/fs/tmpfs/tmpfs_subr.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -1823,7 +1823,7 @@ tmpfs_itimes(struct vnode *vp, const struct timespec *
 	TMPFS_NODE_UNLOCK(node);
 
 	/* XXX: FIX? The entropy here is desirable, but the harvesting may be expensive */
-	random_harvest_queue(node, sizeof(*node), 1, RANDOM_FS_ATIME);
+	random_harvest_queue(node, sizeof(*node), RANDOM_FS_ATIME);
 }
 
 void

Modified: head/sys/kern/kern_intr.c
==============================================================================
--- head/sys/kern/kern_intr.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/kern/kern_intr.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -868,7 +868,7 @@ intr_event_schedule_thread(struct intr_event *ie)
 	if (ie->ie_flags & IE_ENTROPY) {
 		entropy.event = (uintptr_t)ie;
 		entropy.td = ctd;
-		random_harvest_queue(&entropy, sizeof(entropy), 2, RANDOM_INTERRUPT);
+		random_harvest_queue(&entropy, sizeof(entropy), RANDOM_INTERRUPT);
 	}
 
 	KASSERT(td->td_proc != NULL, ("ithread %s has no process", ie->ie_name));
@@ -958,7 +958,7 @@ swi_sched(void *cookie, int flags)
 
 	entropy.event = (uintptr_t)ih;
 	entropy.td = curthread;
-	random_harvest_queue(&entropy, sizeof(entropy), 1, RANDOM_SWI);
+	random_harvest_queue(&entropy, sizeof(entropy), RANDOM_SWI);
 
 	/*
 	 * Set ih_need for this handler so that if the ithread is already

Modified: head/sys/kern/subr_bus.c
==============================================================================
--- head/sys/kern/subr_bus.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/kern/subr_bus.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -2925,6 +2925,7 @@ int
 device_attach(device_t dev)
 {
 	uint64_t attachtime;
+	uint16_t attachentropy;
 	int error;
 
 	if (resource_disabled(dev->driver->name, dev->unit)) {
@@ -2951,19 +2952,11 @@ device_attach(device_t dev)
 		return (error);
 	}
 	dev->flags |= DF_ATTACHED_ONCE;
-	attachtime = get_cyclecount() - attachtime;
-	/*
-	 * 4 bits per device is a reasonable value for desktop and server
-	 * hardware with good get_cyclecount() implementations, but WILL
-	 * need to be adjusted on other platforms.
+	/* We only need the low bits of this time, but ranges from tens to thousands
+	 * have been seen, so keep 2 bytes' worth.
 	 */
-#define	RANDOM_PROBE_BIT_GUESS	4
-	if (bootverbose)
-		printf("random: harvesting attach, %zu bytes (%d bits) from %s%d\n",
-		    sizeof(attachtime), RANDOM_PROBE_BIT_GUESS,
-		    dev->driver->name, dev->unit);
-	random_harvest_direct(&attachtime, sizeof(attachtime),
-	    RANDOM_PROBE_BIT_GUESS, RANDOM_ATTACH);
+	attachentropy = (uint16_t)(get_cyclecount() - attachtime);
+	random_harvest_direct(&attachentropy, sizeof(attachentropy), RANDOM_ATTACH);
 	device_sysctl_update(dev);
 	if (dev->busy)
 		dev->state = DS_BUSY;

Modified: head/sys/mips/cavium/octeon_rnd.c
==============================================================================
--- head/sys/mips/cavium/octeon_rnd.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/mips/cavium/octeon_rnd.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -128,8 +128,7 @@ octeon_rnd_harvest(void *arg)
 	for (i = 0; i < OCTEON_RND_WORDS; i++)
 		sc->sc_entropy[i] = cvmx_rng_get_random64();
 	/* MarkM: FIX!! Check that this does not swamp the harvester! */
-	random_harvest_queue(sc->sc_entropy, sizeof sc->sc_entropy,
-		       (sizeof(sc->sc_entropy)*8)/2, RANDOM_PURE_OCTEON);
+	random_harvest_queue(sc->sc_entropy, sizeof sc->sc_entropy, RANDOM_PURE_OCTEON);
 
 	callout_reset(&sc->sc_callout, hz * 5, octeon_rnd_harvest, sc);
 }

Modified: head/sys/modules/Makefile
==============================================================================
--- head/sys/modules/Makefile	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/modules/Makefile	Sun Aug 26 12:51:46 2018	(r338324)
@@ -321,7 +321,6 @@ SUBDIR=	\
 	ral \
 	${_ralfw} \
 	${_random_fortuna} \
-	${_random_yarrow} \
 	${_random_other} \
 	rc4 \
 	${_rdma} \
@@ -435,7 +434,6 @@ SUBDIR+=	opensolaris
 _crypto=	crypto
 _cryptodev=	cryptodev
 _random_fortuna=random_fortuna
-_random_yarrow=	random_yarrow
 _random_other=	random_other
 .endif
 .endif

Modified: head/sys/net/if_ethersubr.c
==============================================================================
--- head/sys/net/if_ethersubr.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/net/if_ethersubr.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -514,7 +514,7 @@ ether_input_internal(struct ifnet *ifp, struct mbuf *m
 	}
 	eh = mtod(m, struct ether_header *);
 	etype = ntohs(eh->ether_type);
-	random_harvest_queue_ether(m, sizeof(*m), 2);
+	random_harvest_queue_ether(m, sizeof(*m));
 
 	CURVNET_SET_QUIET(ifp->if_vnet);
 

Modified: head/sys/net/if_tun.c
==============================================================================
--- head/sys/net/if_tun.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/net/if_tun.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -910,7 +910,7 @@ tunwrite(struct cdev *dev, struct uio *uio, int flag)
 		m_freem(m);
 		return (EAFNOSUPPORT);
 	}
-	random_harvest_queue(m, sizeof(*m), 2, RANDOM_NET_TUN);
+	random_harvest_queue(m, sizeof(*m), RANDOM_NET_TUN);
 	if_inc_counter(ifp, IFCOUNTER_IBYTES, m->m_pkthdr.len);
 	if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
 	CURVNET_SET(ifp->if_vnet);

Modified: head/sys/netgraph/ng_iface.c
==============================================================================
--- head/sys/netgraph/ng_iface.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/netgraph/ng_iface.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -720,7 +720,7 @@ ng_iface_rcvdata(hook_p hook, item_p item)
 		m_freem(m);
 		return (EAFNOSUPPORT);
 	}
-	random_harvest_queue(m, sizeof(*m), 2, RANDOM_NET_NG);
+	random_harvest_queue(m, sizeof(*m), RANDOM_NET_NG);
 	M_SETFIB(m, ifp->if_fib);
 	netisr_dispatch(isr, m);
 	return (0);

Modified: head/sys/sys/random.h
==============================================================================
--- head/sys/sys/random.h	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/sys/random.h	Sun Aug 26 12:51:46 2018	(r338324)
@@ -35,12 +35,6 @@
 
 #ifdef _KERNEL
 
-#if !defined(KLD_MODULE)
-#if defined(RANDOM_LOADABLE) && defined(RANDOM_YARROW)
-#error "Cannot define both RANDOM_LOADABLE and RANDOM_YARROW"
-#endif
-#endif
-
 struct uio;
 
 #if defined(DEV_RANDOM)
@@ -108,57 +102,54 @@ enum random_entropy_source {
 
 #if defined(DEV_RANDOM)
 extern u_int hc_source_mask;
-void random_harvest_queue_(const void *, u_int, u_int, enum random_entropy_source);
-void random_harvest_fast_(const void *, u_int, u_int);
-void random_harvest_direct_(const void *, u_int, u_int, enum random_entropy_source);
+void random_harvest_queue_(const void *, u_int, enum random_entropy_source);
+void random_harvest_fast_(const void *, u_int);
+void random_harvest_direct_(const void *, u_int, enum random_entropy_source);
 
 static __inline void
-random_harvest_queue(const void *entropy, u_int size, u_int bits,
-	enum random_entropy_source origin)
+random_harvest_queue(const void *entropy, u_int size, enum random_entropy_source origin)
 {
 
 	if (hc_source_mask & (1 << origin))
-		random_harvest_queue_(entropy, size, bits, origin);
+		random_harvest_queue_(entropy, size, origin);
 }
 
 static __inline void
-random_harvest_fast(const void *entropy, u_int size, u_int bits,
-	enum random_entropy_source origin)
+random_harvest_fast(const void *entropy, u_int size, enum random_entropy_source origin)
 {
 
 	if (hc_source_mask & (1 << origin))
-		random_harvest_fast_(entropy, size, bits);
+		random_harvest_fast_(entropy, size);
 }
 
 static __inline void
-random_harvest_direct(const void *entropy, u_int size, u_int bits,
-	enum random_entropy_source origin)
+random_harvest_direct(const void *entropy, u_int size, enum random_entropy_source origin)
 {
 
 	if (hc_source_mask & (1 << origin))
-		random_harvest_direct_(entropy, size, bits, origin);
+		random_harvest_direct_(entropy, size, origin);
 }
 
 void random_harvest_register_source(enum random_entropy_source);
 void random_harvest_deregister_source(enum random_entropy_source);
 #else
-#define random_harvest_queue(a, b, c, d) do {} while (0)
-#define random_harvest_fast(a, b, c, d) do {} while (0)
-#define random_harvest_direct(a, b, c, d) do {} while (0)
+#define random_harvest_queue(a, b, c) do {} while (0)
+#define random_harvest_fast(a, b, c) do {} while (0)
+#define random_harvest_direct(a, b, c) do {} while (0)
 #define random_harvest_register_source(a) do {} while (0)
 #define random_harvest_deregister_source(a) do {} while (0)
 #endif
 
 #if defined(RANDOM_ENABLE_UMA)
-#define random_harvest_fast_uma(a, b, c, d)	random_harvest_fast(a, b, c, d)
+#define random_harvest_fast_uma(a, b, c)	random_harvest_fast(a, b, c)
 #else /* !defined(RANDOM_ENABLE_UMA) */
-#define random_harvest_fast_uma(a, b, c, d)	do {} while (0)
+#define random_harvest_fast_uma(a, b, c)	do {} while (0)
 #endif /* defined(RANDOM_ENABLE_UMA) */
 
 #if defined(RANDOM_ENABLE_ETHER)
-#define random_harvest_queue_ether(a, b, c)	random_harvest_queue(a, b, c, RANDOM_NET_ETHER)
+#define random_harvest_queue_ether(a, b)	random_harvest_queue(a, b, RANDOM_NET_ETHER)
 #else /* !defined(RANDOM_ENABLE_ETHER) */
-#define random_harvest_queue_ether(a, b, c)	do {} while (0)
+#define random_harvest_queue_ether(a, b)	do {} while (0)
 #endif /* defined(RANDOM_ENABLE_ETHER) */
 
 

Modified: head/sys/ufs/ffs/ffs_inode.c
==============================================================================
--- head/sys/ufs/ffs/ffs_inode.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/ufs/ffs/ffs_inode.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -149,12 +149,12 @@ loop:
 		*((struct ufs1_dinode *)bp->b_data +
 		    ino_to_fsbo(fs, ip->i_number)) = *ip->i_din1;
 		/* XXX: FIX? The entropy here is desirable, but the harvesting may be expensive */
-		random_harvest_queue(&(ip->i_din1), sizeof(ip->i_din1), 1, RANDOM_FS_ATIME);
+		random_harvest_queue(&(ip->i_din1), sizeof(ip->i_din1), RANDOM_FS_ATIME);
 	} else {
 		*((struct ufs2_dinode *)bp->b_data +
 		    ino_to_fsbo(fs, ip->i_number)) = *ip->i_din2;
 		/* XXX: FIX? The entropy here is desirable, but the harvesting may be expensive */
-		random_harvest_queue(&(ip->i_din2), sizeof(ip->i_din2), 1, RANDOM_FS_ATIME);
+		random_harvest_queue(&(ip->i_din2), sizeof(ip->i_din2), RANDOM_FS_ATIME);
 	}
 	if (waitfor)
 		error = bwrite(bp);

Modified: head/sys/vm/uma_core.c
==============================================================================
--- head/sys/vm/uma_core.c	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/sys/vm/uma_core.c	Sun Aug 26 12:51:46 2018	(r338324)
@@ -2363,7 +2363,7 @@ uma_zalloc_arg(uma_zone_t zone, void *udata, int flags
 #endif
 
 	/* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */
-	random_harvest_fast_uma(&zone, sizeof(zone), 1, RANDOM_UMA);
+	random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA);
 
 	/* This is the fast path allocation */
 	CTR4(KTR_UMA, "uma_zalloc_arg thread %x zone %s(%p) flags %d",
@@ -2572,7 +2572,7 @@ uma_zalloc_domain(uma_zone_t zone, void *udata, int do
 {
 
 	/* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */
-	random_harvest_fast_uma(&zone, sizeof(zone), 1, RANDOM_UMA);
+	random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA);
 
 	/* This is the fast path allocation */
 	CTR5(KTR_UMA,
@@ -3032,7 +3032,7 @@ uma_zfree_arg(uma_zone_t zone, void *item, void *udata
 #endif
 
 	/* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */
-	random_harvest_fast_uma(&zone, sizeof(zone), 1, RANDOM_UMA);
+	random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA);
 
 	CTR2(KTR_UMA, "uma_zfree_arg thread %x zone %s", curthread,
 	    zone->uz_name);
@@ -3208,7 +3208,7 @@ uma_zfree_domain(uma_zone_t zone, void *item, void *ud
 {
 
 	/* Enable entropy collection for RANDOM_ENABLE_UMA kernel option */
-	random_harvest_fast_uma(&zone, sizeof(zone), 1, RANDOM_UMA);
+	random_harvest_fast_uma(&zone, sizeof(zone), RANDOM_UMA);
 
 	CTR2(KTR_UMA, "uma_zfree_domain thread %x zone %s", curthread,
 	    zone->uz_name);

Modified: head/tools/tools/sysdoc/tunables.mdoc
==============================================================================
--- head/tools/tools/sysdoc/tunables.mdoc	Sun Aug 26 05:28:17 2018	(r338323)
+++ head/tools/tools/sysdoc/tunables.mdoc	Sun Aug 26 12:51:46 2018	(r338324)
@@ -1122,21 +1122,6 @@ kern.random.sys.harvest.swi
 kern.random.sys.seeded
 
 ---
-kern.random.yarrow.bins
-
----
-kern.random.yarrow.fastthresh
-
----
-kern.random.yarrow.gengateinterval
-
----
-kern.random.yarrow.slowoverthresh
-
----
-kern.random.yarrow.slowthresh
-
----
 kern.randompid
 
 ---



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