diff options
author | 2008-10-10 20:13:11 +0000 | |
---|---|---|
committer | 2008-10-10 20:13:11 +0000 | |
commit | ea5ac52d415ec326ad6bc73f493a4a1a54679b90 (patch) | |
tree | 7420658e302facbb383678b8a4c58ebcebe22bdb | |
parent | back out previous change. Another panic, not as frequent, and (diff) | |
download | wireguard-openbsd-ea5ac52d415ec326ad6bc73f493a4a1a54679b90.tar.xz wireguard-openbsd-ea5ac52d415ec326ad6bc73f493a4a1a54679b90.zip |
minor 3 was /dev/prandom, which used random(). make that use the
arandom code, just like minor 4. in fact, make them act exactly
the same.
-rw-r--r-- | sys/dev/rnd.c | 16 | ||||
-rw-r--r-- | sys/dev/rndvar.h | 6 |
2 files changed, 9 insertions, 13 deletions
diff --git a/sys/dev/rnd.c b/sys/dev/rnd.c index 3cd0a96ec1c..d8d62fa92b7 100644 --- a/sys/dev/rnd.c +++ b/sys/dev/rnd.c @@ -1,4 +1,4 @@ -/* $OpenBSD: rnd.c,v 1.93 2008/09/10 14:01:23 blambert Exp $ */ +/* $OpenBSD: rnd.c,v 1.94 2008/10/10 20:13:11 deraadt Exp $ */ /* * rnd.c -- A strong random number generator @@ -966,7 +966,7 @@ arc4random_uniform(u_int32_t upper_bound) } /* - * random, srandom, urandom, prandom, arandom char devices + * random, srandom, urandom, arandom char devices * ------------------------------------------------------- */ @@ -1000,7 +1000,6 @@ int randomread(dev_t dev, struct uio *uio, int ioflag) { int ret = 0; - int i; u_int32_t *buf; if (uio->uio_resid == 0) @@ -1051,11 +1050,7 @@ randomread(dev_t dev, struct uio *uio, int ioflag) printf("rnd: %u bytes for output\n", n); #endif break; - case RND_PRND: - i = (n + 3) / 4; - while (i--) - buf[i] = random() << 16 | (random() & 0xFFFF); - break; + case RND_ARND_OLD: case RND_ARND: arc4random_buf(buf, n); break; @@ -1149,7 +1144,7 @@ randomwrite(dev_t dev, struct uio *uio, int flags) int ret = 0; u_int32_t *buf; - if (minor(dev) == RND_RND || minor(dev) == RND_PRND) + if (minor(dev) == RND_RND) return ENXIO; if (uio->uio_resid == 0) @@ -1168,7 +1163,8 @@ randomwrite(dev_t dev, struct uio *uio, int flags) } } - if (minor(dev) == RND_ARND && !ret) + if ((minor(dev) == RND_ARND || minor(dev) == RND_ARND_OLD) && + !ret) arc4random_initialized = 0; free(buf, M_TEMP); diff --git a/sys/dev/rndvar.h b/sys/dev/rndvar.h index 4e58b342736..a3ece9bca9d 100644 --- a/sys/dev/rndvar.h +++ b/sys/dev/rndvar.h @@ -1,4 +1,4 @@ -/* $OpenBSD: rndvar.h,v 1.21 2008/06/09 07:07:16 djm Exp $ */ +/* $OpenBSD: rndvar.h,v 1.22 2008/10/10 20:13:11 deraadt Exp $ */ /* * Copyright (c) 1996,2000 Michael Shalayeff. @@ -36,8 +36,8 @@ #define RND_RND 0 /* real randomness like nuclear chips */ #define RND_SRND 1 /* strong random source */ #define RND_URND 2 /* less strong random source */ -#define RND_PRND 3 /* pseudo random source */ -#define RND_ARND 4 /* aRC4 based random number generator */ +#define RND_ARND 3 /* aRC4 based random number generator */ +#define RND_ARND_OLD 4 /* old: delete when we reach OpenBSD 4.6 */ #define RND_NODEV 5 /* First invalid minor device number */ #define RND_SRC_TRUE 0 |