From owner-svn-src-all@FreeBSD.ORG Wed Apr 1 12:31:22 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 013E5461; Wed, 1 Apr 2015 12:31:21 +0000 (UTC) Received: from kif.fubar.geek.nz (kif.fubar.geek.nz [178.62.119.249]) by mx1.freebsd.org (Postfix) with ESMTP id 9E7BB763; Wed, 1 Apr 2015 12:31:21 +0000 (UTC) Received: from bender (c101.sec.cl.cam.ac.uk [128.232.18.101]) by kif.fubar.geek.nz (Postfix) with ESMTPSA id 8578DD7A0D; Wed, 1 Apr 2015 12:31:14 +0000 (UTC) Date: Wed, 1 Apr 2015 13:31:14 +0100 From: Andrew Turner To: Mateusz Guzik Subject: Re: svn commit: r280955 - in head/sys: modules/notrandom dev/notrandom Message-ID: <20150401133114.16e7d7ba@bender> In-Reply-To: <20150401113628.GA16649@dft-labs.eu> References: <20150401113628.GA16649@dft-labs.eu> X-Mailer: Claws Mail 3.11.1 (GTK+ 2.24.25; amd64-portbld-freebsd10.0) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 01 Apr 2015 12:31:22 -0000 On Wed, 1 Apr 2015 13:36:28 +0200 Mateusz Guzik 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. > > 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;