summaryrefslogtreecommitdiff
path: root/man4
diff options
context:
space:
mode:
authorElie De Brauwer <eliedebrauwer@gmail.com>2013-03-14 11:20:18 +0100
committerMichael Kerrisk <mtk.manpages@gmail.com>2013-03-14 11:24:00 +0100
commit5a933be0f4974a1b9fc221f72eb93cb2bda7b30d (patch)
treed8c2f45586a61047db020b0838b56851a9125155 /man4
parente525b89f7d6ccc5033d84b7df371d7521ce44495 (diff)
random.4: Document write and document the ioctl interface of /dev/random
The update consists out of two parts: - a minor thing which just documents what happens if a write to /dev/(u)random is performed, which is used in the example script but not explicitly mentioned. - the other (biggest) part is the documentation of the ioctl() interface which /dev/(u)random exposes. This ioctl() lives in drivers/char/random.c and the primitives can be found in include/linux/random.h One comment remains, there used to be an RNDGETPOOL ioctl() which disappeared in v2.6.9. I found two patches on the net: - http://www.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2.6.8.1/2.6.8.1-mm4/broken-out/dev-random-remove-rndgetpool-ioctl.patch - https://lkml.org/lkml/2004/3/25/168 But as far as I can tell the first one got applied but the 2nd one seems more correct. The result is that even today one can still find traces of the RNDGETPOOL ioctl() in the header files. Is this there for historical reasons or because it might break userspace, even though using it will just give an EINVAL. Signed-off-by: Michael Kerrisk <mtk.manpages@gmail.com>
Diffstat (limited to 'man4')
-rw-r--r--man4/random.463
1 files changed, 62 insertions, 1 deletions
diff --git a/man4/random.4 b/man4/random.4
index 9a13c89a..e835720d 100644
--- a/man4/random.4
+++ b/man4/random.4
@@ -16,9 +16,13 @@
.\" Add a Usage subsection that recommends most users to use
.\" /dev/urandom, and emphasizes parsimonious usage of /dev/random.
.\"
-.TH RANDOM 4 2010-08-29 "Linux" "Linux Programmer's Manual"
+.TH RANDOM 4 2013-02-17 "Linux" "Linux Programmer's Manual"
.SH NAME
random, urandom \- kernel random number source devices
+.SH SYNOPSIS
+#include <linux/random.h>
+.sp
+.BI "int ioctl(" fd ", RND" request ", " param ");"
.SH DESCRIPTION
The character special files \fI/dev/random\fP and
\fI/dev/urandom\fP (present since Linux 1.3.30)
@@ -51,6 +55,12 @@ literature, but it is theoretically possible that such an attack may
exist.
If this is a concern in your application, use \fI/dev/random\fP
instead.
+.LP
+Writing to \fI/dev/random\fP or \fI/dev/urandom\fP will update the
+entropy pool with the data written, but this will not result in a
+higher entropy count. This means that it will impact the contents
+read from both files but it will not make reads from
+\fI/dev/random\fP faster.
.SS Usage
If you are unsure about whether you should use
.IR /dev/random
@@ -208,6 +218,57 @@ and
contain random strings like 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9.
The former is generated afresh for each read, the latter was
generated once.
+.SS ioctl(2) interface
+The following
+.BR ioctl (2)
+requests are defined on file descriptors connected to either \fI/dev/random\fP
+or \fI/dev/urandom\fP. All requests performed will interact with the input
+entropy pool impacting both \fI/dev/random\fP and \fI/dev/urandom\fP.
+The
+.B CAP_SYS_ADMIN
+capability is required for all requests except
+.B RNDGETENTCNT.
+.TP
+.BR RNDGETENTCNT
+Retrieve the entropy count of the input pool, the contents will be the same
+as the
+.I entropy_avail
+file under proc.
+The result will be stored in the int pointed to by the argument.
+.TP
+.BR RNDADDTOENTCNT
+Increment or decrement the entropy count of the input pool by the value pointed
+to by the argument.
+.TP
+.BR RNDGETPOOL
+Removed in Linux 2.6.9.
+.TP
+.BR RNDADDENTROPY
+Add some additional entropy to the input pool, incrementing the entropy count.
+Unlike writing to \fI/dev/random\fP or \fI/dev/urandom\fP which only adds some
+data but does not increment the entropy count. The following structure is used:
+.IP
+.IN +4n
+.NF
+struct rand_pool_info {
+ int entropy_count;
+ int buf_size;
+ __u32 buf[0];
+};
+.FI
+.IN
+.IP
+Here
+.I entropy_count
+is the value added to (or subtracted from) from the entropy count. And
+.I buf
+is the buffer of size
+.I buf_size
+which gets added to the entropy pool.
+.TP
+.BR RNDZAPENTCNT ", " RNDCLEARPOOL
+Zero the entropy count of all pools and add some system data (such as
+wall clock) to the pools.
.SH FILES
/dev/random
.br