svn commit: r280955 - in head/sys: modules/notrandom dev/notrandom
Julian Elischer
julian at freebsd.org
Wed Apr 1 15:07:35 UTC 2015
On 4/1/15 8:31 PM, Andrew Turner wrote:
> On Wed, 1 Apr 2015 13:36:28 +0200
> Mateusz Guzik <mjg at 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;
>
>
>
More information about the svn-src-head
mailing list