From 2519091f9983706958b56a46f3bcf97f36a01c98 Mon Sep 17 00:00:00 2001
From: John Denker <jsd@av8n.com>
Date: Thu, 17 Oct 2013 06:35:43 -0700
Subject: clean up /proc names; document /proc interface; conditionalize
 kludgey zero-byte read

---
 drivers/char/random.c | 62 +++++++++++++++++++++++++++++++++++++--------------
 1 file changed, 45 insertions(+), 17 deletions(-)

(limited to 'drivers')

diff --git a/drivers/char/random.c b/drivers/char/random.c
index b423214..5dc7ad8 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -192,14 +192,30 @@
  * Exported interfaces ---- sysctl
  * ===============================
 
- * /proc/sys/kernel/random/poolsize (read only) reports the size of
- * the input pool.  Since 2.6.12 this is measured in bits.  Previously
- * it was measured in bytes.  Note that the blocking pool and the
- * nonblocking pool are 4x smaller than the input pool.
+ * files in /proc/sys/kernel/random :
 
- * /proc/sys/kernel/random/entropy_avail (read only) reports the total
- * amount of stored entropy, measured in bits.  This includes entropy
- * stored in both the input pool and the blocking pool.
+ * .../poolsize (read only) -- reports the size of the input pool.  Since
+ * 2.6.12 this is measured in bits.  Previously it was measured in
+ * bytes.  Note that the blocking pool and the nonblocking pool are 4x
+ * smaller than the input pool.
+
+ * .../entropy_avail (read only) -- reports the total amount of stored
+ * entropy, measured in bits.  This includes entropy stored in both
+ * the input pool and the blocking pool.
+
+ * .../entropy_avail_input .../entropy_avail_random
+ * .../entropy_avail_urandom (r/w) -- same as above, but report the
+ * content of each pool separately
+
+ * .../extracted_total_input .../extracted_total_random
+ * .../extracted_total_urandom (r/w) -- report the total number of
+ * bits of randomness extracted from the pool since the start of
+ * operation.
+
+ * .../extracted_subttl_input .../extracted_subttl_random
+ * .../extracted_subttl_urandom (r/w) -- report the number of bits of
+ * randomness extracted from the pool since the last time it was
+ * reseeded.  This is particularly significant for /dev/urandom
 
  * Exported interfaces ---- ioctl
  * ===============================
@@ -1381,11 +1397,17 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
 {
 	ssize_t n, retval = 0, count = 0;
 
+	if (nbytes == 0){
+#ifdef OVERCOMPLICATED
 /*
  * Kludge: zero-byte read:  Fill the pool from upstream sources.
+ * Problem: this doesn't happen often enough.
+ * You can make it happen from userland, but that's a kludge,
+ * suitable for testing ideas, but not a long-term solution.
  */
-	if (nbytes == 0){
+
                 fill_pool(&devrand_pool, 0);
+#endif
 		return 0;
         }
 
@@ -1669,63 +1691,69 @@ struct ctl_table random_table[] = {
 		.data		= &total_entropy_count,
 	},
 	{
-		.procname	= "entropy_avail_inp",
+		.procname	= "entropy_avail_input",
 		.maxlen		= sizeof(int),
 		.mode		= 0444,
 		.proc_handler	= proc_dointvec,
 		.data		= &input_pool.entropy_count,
 	},
+#ifdef OVERCOMPLICATED
 	{
-		.procname	= "entropy_avail_r",
+		.procname	= "entropy_avail_random",
 		.maxlen		= sizeof(int),
 		.mode		= 0444,
 		.proc_handler	= proc_dointvec,
 		.data		= &devrand_pool.entropy_count,
 	},
+#endif
 	{
-		.procname	= "entropy_avail_ur",
+		.procname	= "entropy_avail_urandom",
 		.maxlen		= sizeof(int),
 		.mode		= 0444,
 		.proc_handler	= proc_dointvec,
 		.data		= &prng_pool.entropy_count,
 	},
 	{
-		.procname	= "extracted_total_inp",
+		.procname	= "extracted_total_input",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
 		.data		= &input_pool.extracted_total,
 	},
+#ifdef OVERCOMPLICATED
 	{
-		.procname	= "extracted_total_r",
+		.procname	= "extracted_total_random",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
 		.data		= &devrand_pool.extracted_total,
 	},
+#endif
 	{
-		.procname	= "extracted_total_ur",
+		.procname	= "extracted_total_urandom",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
 		.data		= &prng_pool.extracted_total,
 	},
 	{
-		.procname	= "extracted_subttl_inp",
+		.procname	= "extracted_subttl_input",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
 		.data		= &input_pool.extracted_subttl,
 	},
+#ifdef OVERCOMPLICATED
 	{
-		.procname	= "extracted_subttl_r",
+		.procname	= "extracted_subttl_random",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
 		.data		= &devrand_pool.extracted_subttl,
 	},
+#endif
 	{
-		.procname	= "extracted_subttl_ur",
+		.procname	= "extracted_subttl_urandom",
 		.maxlen		= sizeof(ulonglong),
 		.mode		= 0644,
 		.proc_handler	= proc_doulonglongvec_minmax,
-- 
cgit v1.2.3