From: Daniel Micay <danielmicay@gmail.com>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>,
Stephan Mueller <smueller@chronox.de>,
"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
Subject: Re: [kernel-hardening] Re: get_random_bytes returns bad randomness before seeding is complete
Date: Fri, 02 Jun 2017 13:41:11 -0400 [thread overview]
Message-ID: <1496425271.1989.1.camel@gmail.com> (raw)
In-Reply-To: <CAHmME9omJTaP1C=yUh3913Cv1gF1pBtpy9cmEMyJG4yw_dnZWQ@mail.gmail.com>
On Fri, 2017-06-02 at 17:53 +0200, Jason A. Donenfeld wrote:
> (Meanwhile...)
>
> In my own code, I'm currently playing with a workaround that looks
> like this:
>
> --- a/src/main.c
> +++ b/src/main.c
>
> +#include <linux/completion.h>
> +#include <linux/random.h>
>
> +struct rng_initializer {
> + struct completion done;
> + struct random_ready_callback cb;
> +};
> +static void rng_initialized_callback(struct random_ready_callback
> *cb)
> +{
> + complete(&container_of(cb, struct rng_initializer, cb)->done);
> +}
> +
> static int __init mod_init(void)
> {
> int ret;
> + struct rng_initializer rng = {
> + .done = COMPLETION_INITIALIZER(rng.done),
> + .cb = { .owner = THIS_MODULE, .func =
> rng_initialized_callback }
> + };
> +
> + ret = add_random_ready_callback(&rng.cb);
> + if (!ret)
> + wait_for_completion(&rng.done);
> + else if (ret != -EALREADY)
> + return ret;
>
> do_things_with_get_random_bytes_maybe();
>
> Depending on the situation, however, I could imagine that
> wait_for_completion never returning, if its blocking activity that
> contributes to the seed actually being available, if this is called
> from a compiled-in module, so I find this a bit sub-optimal...
One of the early uses is initializing the stack canary value for SSP in
very early boot. If that blocks, it's going to be blocking nearly
anything else from happening.
On x86, that's only the initial canary since the per-task canaries end
up being used, but elsewhere at least without SMP disabled or changes to
GCC that's all there is so the entropy matters.
next prev parent reply other threads:[~2017-06-02 17:41 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-06-02 14:59 get_random_bytes returns bad randomness before seeding is complete Jason A. Donenfeld
2017-06-02 15:53 ` Jason A. Donenfeld
2017-06-02 16:48 ` Jason A. Donenfeld
2017-06-02 17:41 ` Daniel Micay [this message]
2017-06-02 17:46 ` [kernel-hardening] " Jason A. Donenfeld
2017-06-02 18:58 ` Kees Cook
2017-06-02 17:26 ` Theodore Ts'o
2017-06-02 17:44 ` Jason A. Donenfeld
2017-06-02 19:07 ` Theodore Ts'o
2017-06-02 23:58 ` Jason A. Donenfeld
2017-06-03 0:20 ` [kernel-hardening] " Sandy Harris
2017-06-03 2:32 ` [PATCH RFC 0/3] get_random_bytes seed blocking Jason A. Donenfeld
2017-06-03 2:32 ` [PATCH RFC 1/3] random: add synchronous API for the urandom pool Jason A. Donenfeld
2017-06-03 2:32 ` [PATCH RFC 2/3] random: add get_random_{bytes,u32,u64,int,long}_wait family Jason A. Donenfeld
2017-06-03 2:32 ` [PATCH RFC 3/3] random: warn when kernel uses unseeded randomness Jason A. Donenfeld
2017-06-03 5:04 ` get_random_bytes returns bad randomness before seeding is complete Theodore Ts'o
2017-06-03 12:30 ` Jason A. Donenfeld
2017-06-03 21:45 ` Sandy Harris
2017-06-03 22:54 ` Jeffrey Walton
2017-06-03 23:55 ` [kernel-hardening] " Daniel Micay
2017-06-04 5:55 ` Stephan Müller
2017-06-04 5:48 ` Stephan Müller
2017-06-04 5:54 ` Jeffrey Walton
2017-06-04 6:23 ` Stephan Müller
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=1496425271.1989.1.camel@gmail.com \
--to=danielmicay@gmail.com \
--cc=Jason@zx2c4.com \
--cc=kernel-hardening@lists.openwall.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).