From: Sebastian Andrzej Siewior <sebastian@breakpoint.cc>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: Theodore Ts'o <tytso@mit.edu>,
Linux Crypto Mailing List <linux-crypto@vger.kernel.org>,
LKML <linux-kernel@vger.kernel.org>,
kernel-hardening@lists.openwall.com,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Eric Biggers <ebiggers3@gmail.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
David Miller <davem@davemloft.net>,
tglx@linutronix.de
Subject: Re: [PATCH v5 01/13] random: invalidate batched entropy after crng init
Date: Fri, 16 Jun 2017 10:31:12 +0200 [thread overview]
Message-ID: <20170616083111.5cwwkzyauocxafou@breakpoint.cc> (raw)
In-Reply-To: <CAHmME9oRG4Oe4zNN4D8Nc9+A51uXPC0y3m3+ws_QK2aq=K=zwA@mail.gmail.com>
On 2017-06-15 00:33:12 [+0200], Jason A. Donenfeld wrote:
> There's a potential race that I fixed in my v5 of that patch set, but
> Ted only took v4, and for whatever reason has been to busy to submit
> the additional patch I already posted showing the diff between v4&v5.
> Hopefully he actually gets around to it and sends this for the next
> rc. Here it is:
>
> https://patchwork.kernel.org/patch/9774563/
So you replace "crng_init < 2" with use_lock instead. That is not what I
am talking about. Again:
add_interrupt_randomness()
-> crng_fast_load() spin_trylock_irqsave(&primary_crng.lock, )
-> invalidate_batched_entropy() write_lock_irqsave(&batched_entropy_reset_lock, );
in that order while the code path
get_random_uXX() read_lock_irqsave(&batched_entropy_reset_lock, );
-> extract_crng()
-> _extract_crng() spin_lock_irqsave(&crng->lock, );
which allocates the same lock in opposite order.
That means
T1 T2
crng_fast_load() get_random_u64()
extract_crng()
*dead lock*
invalidate_batched_entropy()
_extract_crng()
So T1 waits for batched_entropy_reset_lock holding primary_crng.lock and
T2 waits for primary_crng.lock holding batched_entropy_reset_lock.
Sebastian
next prev parent reply other threads:[~2017-06-16 8:31 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-07 23:25 [PATCH v5 00/13] Unseeded In-Kernel Randomness Fixes Jason A. Donenfeld
2017-06-07 23:25 ` [PATCH v5 01/13] random: invalidate batched entropy after crng init Jason A. Donenfeld
2017-06-14 19:28 ` Sebastian Andrzej Siewior
2017-06-14 22:33 ` Jason A. Donenfeld
2017-06-16 8:31 ` Sebastian Andrzej Siewior [this message]
2017-06-16 12:12 ` Jason A. Donenfeld
2017-06-16 14:36 ` Sebastian Andrzej Siewior
2017-06-14 22:45 ` [PATCH] random: silence compiler warnings and fix race Jason A. Donenfeld
2017-06-16 14:35 ` Sebastian Andrzej Siewior
2017-06-17 0:39 ` Jason A. Donenfeld
2017-06-19 7:45 ` Sebastian Andrzej Siewior
2017-06-19 20:55 ` Jason A. Donenfeld
2017-06-20 6:44 ` Sebastian Andrzej Siewior
2017-06-19 20:57 ` Jason A. Donenfeld
2017-06-20 6:03 ` Theodore Ts'o
2017-06-20 6:27 ` [kernel-hardening] " Joel Stanley
2017-06-20 6:59 ` Michael Ellerman
2017-06-20 8:14 ` Jason A. Donenfeld
2017-06-20 8:33 ` Jeffrey Walton
2017-06-20 8:53 ` Jason A. Donenfeld
2017-06-20 9:36 ` Theodore Ts'o
2017-06-20 9:49 ` Jeffrey Walton
2017-06-20 17:50 ` [kernel-hardening] " Sandy Harris
2017-06-20 18:14 ` Kees Cook
2017-06-20 20:09 ` Jason A. Donenfeld
2017-06-20 9:49 ` Jason A. Donenfeld
2017-06-20 23:38 ` Theodore Ts'o
2017-06-20 23:54 ` Jason A. Donenfeld
2017-06-21 0:03 ` [PATCH] random: warn when kernel uses unseeded randomness Jason A. Donenfeld
2017-06-21 0:12 ` Kees Cook
2017-06-21 6:06 ` Michael Ellerman
2017-06-21 20:38 ` [kernel-hardening] " Theodore Ts'o
2017-06-22 0:04 ` Jason A. Donenfeld
2017-06-21 23:50 ` [PATCH] random: silence compiler warnings and fix race Jeffrey Walton
2017-06-07 23:25 ` [PATCH v5 02/13] random: add synchronous API for the urandom pool Jason A. Donenfeld
2017-06-07 23:25 ` [PATCH v5 03/13] random: add get_random_{bytes,u32,u64,int,long,once}_wait family Jason A. Donenfeld
2017-06-07 23:25 ` [PATCH v5 04/13] security/keys: ensure RNG is seeded before use Jason A. Donenfeld
2017-06-07 23:25 ` [PATCH v5 05/13] crypto/rng: ensure that the RNG is ready before using Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 06/13] iscsi: ensure RNG is seeded before use Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 07/13] ceph: ensure RNG is seeded before using Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 08/13] cifs: use get_random_u32 for 32-bit lock random Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 09/13] rhashtable: use get_random_u32 for hash_rnd Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 10/13] net/neighbor: use get_random_u32 for 32-bit hash random Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 11/13] net/route: use get_random_int for random counter Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 12/13] bluetooth/smp: ensure RNG is properly seeded before ECDH use Jason A. Donenfeld
2017-06-07 23:26 ` [PATCH v5 13/13] random: warn when kernel uses unseeded randomness Jason A. Donenfeld
-- strict thread matches above, loose matches on Subject: below --
2017-06-07 23:21 [PATCH v5 00/13] Unseeded In-Kernel Randomness Fixes Jason A. Donenfeld
2017-06-07 23:21 ` [PATCH v5 01/13] random: invalidate batched entropy after crng init Jason A. Donenfeld
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=20170616083111.5cwwkzyauocxafou@breakpoint.cc \
--to=sebastian@breakpoint.cc \
--cc=Jason@zx2c4.com \
--cc=davem@davemloft.net \
--cc=ebiggers3@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox