summaryrefslogtreecommitdiffstats
path: root/freebsd/sys/libkern
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-06 16:20:21 +0100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2013-11-11 10:08:08 +0100
commit66659ff1ad6831b0ea7425fa6ecd8a8687523658 (patch)
tree48e22b475fa8854128e0861a33fed6f78c8094b5 /freebsd/sys/libkern
parentDefine __GLOBL1() and __GLOBL() (diff)
downloadrtems-libbsd-66659ff1ad6831b0ea7425fa6ecd8a8687523658.tar.bz2
Update to FreeBSD 9.2
Diffstat (limited to 'freebsd/sys/libkern')
-rw-r--r--freebsd/sys/libkern/arc4random.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/freebsd/sys/libkern/arc4random.c b/freebsd/sys/libkern/arc4random.c
index ab6357f7..32ca0157 100644
--- a/freebsd/sys/libkern/arc4random.c
+++ b/freebsd/sys/libkern/arc4random.c
@@ -26,6 +26,8 @@ __FBSDID("$FreeBSD$");
#define ARC4_RESEED_SECONDS 300
#define ARC4_KEYBYTES (256 / 8)
+int arc4rand_iniseed_state = ARC4_ENTR_NONE;
+
static u_int8_t arc4_i, arc4_j;
static int arc4_numruns = 0;
static u_int8_t arc4_sbox[256];
@@ -132,7 +134,8 @@ arc4rand(void *ptr, u_int len, int reseed)
struct timeval tv;
getmicrouptime(&tv);
- if (reseed ||
+ if (atomic_cmpset_int(&arc4rand_iniseed_state, ARC4_ENTR_HAVE,
+ ARC4_ENTR_SEED) || reseed ||
(arc4_numruns > ARC4_RESEED_BYTES) ||
(tv.tv_sec > arc4_t_reseed))
arc4_randomstir();