All of lore.kernel.org
 help / color / mirror / Atom feed
From: Herbert Xu <herbert@gondor.apana.org.au>
To: Stephan Mueller <smueller@chronox.de>
Cc: pebolle@tiscali.nl, andreas.steffen@strongswan.org,
	tytso@mit.edu, sandyinchina@gmail.com,
	linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: random: Wake up all getrandom(2) callers when pool is ready
Date: Thu, 21 May 2015 16:19:54 +0800	[thread overview]
Message-ID: <20150521081953.GA22301@gondor.apana.org.au> (raw)
In-Reply-To: <9182932.rX0DhQWPrJ@tachyon.chronox.de>

On Thu, May 21, 2015 at 09:55:17AM +0200, Stephan Mueller wrote:
>
> So, I will create a 2nd wait queue in random.c for uninterruptible waits, 
> change the get_blocking_random_bytes back to void and use wait_event to wait 
> for the initialization.

Hold your horses.  You don't need a second queue, you just need to
change wake_up_interruptible to wake_up.

Hmm, in fact shouldn't this be wake_up_all? Otherwise what are the
other getrandom(2) callers going to do? Ted?

---8<---
If more than one application invokes getrandom(2) before the pool
is ready, then all bar one will be stuck forever because we use
wake_up_interruptible which wakes up a single task.

This patch replaces it with wake_up_all.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>

diff --git a/drivers/char/random.c b/drivers/char/random.c
index 9cd6968..8b8c46b 100644
--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -660,7 +660,7 @@ retry:
 		r->entropy_total = 0;
 		if (r == &nonblocking_pool) {
 			prandom_reseed_late();
-			wake_up_interruptible(&urandom_init_wait);
+			wake_up_all(&urandom_init_wait);
 			pr_notice("random: %s pool is initialized\n", r->name);
 		}
 	}

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

  reply	other threads:[~2015-05-21  8:19 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-20 20:02 [PATCH v9 0/5] Seeding DRBG with more entropy Stephan Mueller
2015-05-20 20:02 ` [PATCH v9 1/5] random: Blocking API for accessing nonblocking_pool Stephan Mueller
2015-05-20 20:03 ` [PATCH v9 2/5] crypto: drbg - prepare for async seeding Stephan Mueller
2015-05-20 20:03 ` [PATCH v9 3/5] crypto: drbg - add async seeding operation Stephan Mueller
2015-05-20 21:44   ` Herbert Xu
2015-05-21  6:10     ` Stephan Mueller
2015-05-21  6:36       ` Herbert Xu
2015-05-21  6:53         ` Stephan Mueller
2015-05-21  6:56           ` Herbert Xu
2015-05-21  7:55     ` Stephan Mueller
2015-05-21  8:19       ` Herbert Xu [this message]
2015-05-21  8:36         ` random: Wake up all getrandom(2) callers when pool is ready Stephan Mueller
2015-05-21 19:17         ` Theodore Ts'o
2015-05-22  0:23           ` Herbert Xu
2015-05-20 20:04 ` [PATCH v9 4/5] crypto: drbg - use Jitter RNG to obtain seed Stephan Mueller
2015-05-20 20:04 ` [PATCH v9 5/5] crypto: add jitterentropy RNG Stephan Mueller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150521081953.GA22301@gondor.apana.org.au \
    --to=herbert@gondor.apana.org.au \
    --cc=andreas.steffen@strongswan.org \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pebolle@tiscali.nl \
    --cc=sandyinchina@gmail.com \
    --cc=smueller@chronox.de \
    --cc=tytso@mit.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.