aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2016-06-13 10:10:51 -0400
committerTheodore Ts'o <tytso@mit.edu>2016-06-13 11:54:26 -0400
commit9b4d008787f864f17d008c9c15bbe8a0f7e2fc24 (patch)
tree95ed8d9865986a90511e583f7f163434e09860d2 /drivers
parent3371f3da08cff4b75c1f2dce742d460539d6566d (diff)
random: print a warning for the first ten uninitialized random users
Since systemd is consistently using /dev/urandom before it is initialized, we can't see the other potentially dangerous users of /dev/urandom immediately after boot. So print the first ten such complaints instead. Cc: stable@kernel.org Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/char/random.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/char/random.c b/drivers/char/random.c
index 4e2627a8d226..d057438266bb 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -1458,12 +1458,16 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1458static ssize_t 1458static ssize_t
1459urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos) 1459urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
1460{ 1460{
1461 static int maxwarn = 10;
1461 int ret; 1462 int ret;
1462 1463
1463 if (unlikely(nonblocking_pool.initialized == 0)) 1464 if (unlikely(nonblocking_pool.initialized == 0) &&
1464 printk_once(KERN_NOTICE "random: %s urandom read " 1465 maxwarn > 0) {
1465 "with %d bits of entropy available\n", 1466 maxwarn--;
1466 current->comm, nonblocking_pool.entropy_total); 1467 printk(KERN_NOTICE "random: %s: uninitialized urandom read "
1468 "(%zd bytes read, %d bits of entropy available)\n",
1469 current->comm, nbytes, nonblocking_pool.entropy_total);
1470 }
1467 1471
1468 nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3)); 1472 nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
1469 ret = extract_entropy_user(&nonblocking_pool, buf, nbytes); 1473 ret = extract_entropy_user(&nonblocking_pool, buf, nbytes);