On 4/1/15 8:31 PM, Andrew Turner wrote:
On Wed, 1 Apr 2015 13:36:28 +0200
Mateusz Guzik <m...@freebsd.org> wrote:
Author: mjg
Date: Wed Apr 1 13:37:00 2015
New Revision: 280955
URL: https://svnweb.freebsd.org/changeset/base/280955
Log:
Add /dev/notrandom
notrandom provides fast and reliable not random numbers.
This was added in an effort to increase feature-compatiblity with
Solaris 10.
See http://www.brendangregg.com/Specials/notrandom.c for Solaris
implementation.
the not-random write- side code should have a sysctl that decides
whether it rejects data that is too random.
Reviewed-by: Bruce Schneier (ok, not really)
MFC after: 1 week
I've been thinking about adding something similar for some time. I do
have one question, should it accept data for the notrandom number
generator? It would only need to accept up until the first notrandom
number. I was thinking something like the following patch (untested).
Andrew
diff --git a/sys/dev/notrandom/notrandom.c
b/sys/dev/notrandom/notrandom.c index c09eaf3..9e5f523 100644
--- a/sys/dev/notrandom/notrandom.c
+++ b/sys/dev/notrandom/notrandom.c
@@ -41,10 +41,12 @@ static struct cdev *notrandom_dev;
static d_ioctl_t notrandom_ioctl;
static d_read_t notrandom_read;
+static d_read_t notrandom_write;
static struct cdevsw notrandom_cdevsw = {
.d_version = D_VERSION,
.d_read = notrandom_read,
+ .d_write = notrandom_write,
.d_ioctl = notrandom_ioctl,
.d_name = "notrandom",
.d_flags = D_MMAP_ANON,
@@ -91,6 +93,30 @@ notrandom_read(struct cdev *dev __unused, struct uio
*uio, int flags __unused)
/* ARGSUSED */
static int
+notrandom_write(struct cdev *dev __unused, struct uio *uio, int flags
__unused)
+{
+ size_t pos;
+ ssize_t len;
+ int error = 0;
+ char buf;
+
+ pos = 0;
+ while (uio->uio_resid > 0) {
+ len = uio->uio_resid;
+ error = uiomove(&buf, 1, uio);
+ if (error != 0)
+ break;
+ if (buf != 7)
+ return (EIO);
+ notrandom_buf[pos++] = buf;
+ pos %= sizeof(notrandom_buf);
+ }
+
+ return (error);
+}
+
+/* ARGSUSED */
+static int
notrandom_modevent(module_t mod __unused, int type, void *data
__unused) {
int error = 0;
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"