]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
random: Make getrandom() ready earlier
authorBen Hutchings <ben@decadent.org.uk>
Wed, 13 Jun 2018 03:31:00 +0000 (04:31 +0100)
committerStefan Bader <stefan.bader@canonical.com>
Wed, 4 Jul 2018 15:53:10 +0000 (17:53 +0200)
This effectively reverts commit 725e828 "random: fix crng_ready()
test" which was commit 43838a23a05f upstream.  Unfortunately some
users of getrandom() don't expect it to block for long, and they need
to be fixed before we can allow this change into stable.

This doesn't directly revert that commit, but only weakens the ready
condition used by getrandom() when the GRND_RANDOM flag is not set.
Calls to getrandom() that return before the RNG is fully seeded will
generate warnings, just like reads from /dev/urandom.

BugLink: https://bugs.launchpad.net/bugs/1780062
BugLink: https://bugs.launchpad.net/bugs/1779827
(backported from ://salsa.debian.org/kernel-team/linux/raw/stretch/debian/patches/debian/random-make-getrandom-ready-earlier.patch)
[smb: open code waiting in getrandom directly]
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
Acked-by: Colin King <colin.king@canonical.com>
Acked-by: Khaled Elmously <khalid.elmously@canonical.com>
Acked-by: Marcelo Cerri <marcelo.cerri@canonical.com>
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
drivers/char/random.c

index d5f121140ec65ac6b6a9b69db69be2bf72c585f7..602140541400f0f0f63e384b3ef25ff5cc63f44b 100644 (file)
@@ -1976,10 +1976,10 @@ SYSCALL_DEFINE3(getrandom, char __user *, buf, size_t, count,
        if (flags & GRND_RANDOM)
                return _random_read(flags & GRND_NONBLOCK, buf, count);
 
-       if (!crng_ready()) {
+       if (crng_init == 0) {
                if (flags & GRND_NONBLOCK)
                        return -EAGAIN;
-               ret = wait_for_random_bytes();
+               ret = wait_event_interruptible(crng_init_wait, crng_init > 0);
                if (unlikely(ret))
                        return ret;
        }