Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b4d0087 authored by Theodore Ts'o's avatar Theodore Ts'o
Browse files

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: default avatarTheodore Ts'o <tytso@mit.edu>
parent 3371f3da
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -1458,12 +1458,16 @@ random_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
static ssize_t
static ssize_t
urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
urandom_read(struct file *file, char __user *buf, size_t nbytes, loff_t *ppos)
{
{
	static int maxwarn = 10;
	int ret;
	int ret;


	if (unlikely(nonblocking_pool.initialized == 0))
	if (unlikely(nonblocking_pool.initialized == 0) &&
		printk_once(KERN_NOTICE "random: %s urandom read "
	    maxwarn > 0) {
			    "with %d bits of entropy available\n",
		maxwarn--;
			    current->comm, nonblocking_pool.entropy_total);
		printk(KERN_NOTICE "random: %s: uninitialized urandom read "
		       "(%zd bytes read, %d bits of entropy available)\n",
		       current->comm, nbytes, nonblocking_pool.entropy_total);
	}


	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
	nbytes = min_t(size_t, nbytes, INT_MAX >> (ENTROPY_SHIFT + 3));
	ret = extract_entropy_user(&nonblocking_pool, buf, nbytes);
	ret = extract_entropy_user(&nonblocking_pool, buf, nbytes);