diff options
author | ed <ed@FreeBSD.org> | 2015-07-14 18:45:15 +0000 |
---|---|---|
committer | ed <ed@FreeBSD.org> | 2015-07-14 18:45:15 +0000 |
commit | 4f8313adcd77ccc0953275aa06bb5181e4f85954 (patch) | |
tree | e31443362ff95281e596323578398cada5e3d232 /share | |
parent | 0f95984131a638e861338eaae0614aa09b18e35d (diff) | |
download | FreeBSD-src-4f8313adcd77ccc0953275aa06bb5181e4f85954.zip FreeBSD-src-4f8313adcd77ccc0953275aa06bb5181e4f85954.tar.gz |
Implement the CloudABI random_get() system call.
The random_get() system call works similar to getentropy()/getrandom()
on OpenBSD/Linux. It fills a buffer with random data.
This change introduces a new function, read_random_uio(), that is used
to implement read() on the random devices. We can call into this
function from within the CloudABI compatibility layer.
Approved by: secteam
Reviewed by: jmg, markm, wblock
Obtained from: https://github.com/NuxiNL/freebsd
Differential Revision: https://reviews.freebsd.org/D3053
Diffstat (limited to 'share')
-rw-r--r-- | share/man/man9/Makefile | 1 | ||||
-rw-r--r-- | share/man/man9/random.9 | 41 |
2 files changed, 39 insertions, 3 deletions
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile index 2154190..695fa23 100644 --- a/share/man/man9/Makefile +++ b/share/man/man9/Makefile @@ -1281,6 +1281,7 @@ MLINKS+=psignal.9 gsignal.9 \ MLINKS+=random.9 arc4rand.9 \ random.9 arc4random.9 \ random.9 read_random.9 \ + random.9 read_random_uio.9 \ random.9 srandom.9 MLINKS+=refcount.9 refcount_acquire.9 \ refcount.9 refcount_init.9 \ diff --git a/share/man/man9/random.9 b/share/man/man9/random.9 index 906b5e5..275359a 100644 --- a/share/man/man9/random.9 +++ b/share/man/man9/random.9 @@ -26,7 +26,7 @@ .\" .\" $FreeBSD$ .\" " -.Dd June 30, 2015 +.Dd July 14, 2015 .Dt RANDOM 9 .Os .Sh NAME @@ -34,6 +34,7 @@ .Nm arc4random , .Nm random , .Nm read_random , +.Nm read_random_uio , .Nm srandom .Nd supply pseudo-random numbers .Sh SYNOPSIS @@ -50,6 +51,8 @@ .In sys/random.h .Ft int .Fn read_random "void *buffer" "int count" +.Ft int +.Fn read_random_uio "struct uio *uio" "bool nonblock" .Sh DESCRIPTION The .Fn random @@ -117,11 +120,27 @@ necessary to know that no entropy has been returned. .Pp +The +.Fn read_random_uio +function behaves identically to +.Xr read 2 +on +.Pa /dev/random . +The +.Fa uio +argument points to a buffer where random data should be stored. +This function only returns data if the the random device is seeded. +It blocks if unseeded, +except when the +.Fa nonblock +argument is true. +.Pp All the bits returned by .Fn random , -.Fn arc4rand +.Fn arc4rand , +.Fn read_random , and -.Fn read_random +.Fn read_random_uio are usable. For example, .Sq Li random()&01 @@ -168,6 +187,22 @@ The function returns the number of bytes placed in .Fa buffer . +.Pp +.Fn read_random_uio +returns zero when successful, +otherwise an error code is returned. +.Sh ERRORS +.Fn read_random_uio +may fail if: +.Bl -tag -width Er +.It Bq Er EFAULT +.Fa uio +points to an invalid memory region. +.It Bq Er EWOULDBLOCK +The random device is unseeded and +.Fa nonblock +is true. +.El .Sh AUTHORS .An Dan Moschuk wrote |