From: Theodore Ts'o <tytso-3s7WtUTddSA@public.gmane.org>
To: Bob Beck <beck-7YlrpqBBQ3VAfugRpC6u6w@public.gmane.org>
Cc: Christoph Hellwig <hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org>,
linux-api <linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
Zach Brown <zab-ugsP4Wv/S6ZeoWH0uzbU5w@public.gmane.org>
Subject: Re: [PATCH, RFC] random: introduce getrandom(2) system call
Date: Thu, 17 Jul 2014 16:43:40 -0400 [thread overview]
Message-ID: <20140717204340.GS1491@thunk.org> (raw)
In-Reply-To: <CAComcpObt4y--GEuAZgzkaDWnrJYBKhwsvqjOkdiXU_yGnV2Tg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
On Thu, Jul 17, 2014 at 11:50:58AM -0600, Bob Beck wrote:
> >
> > int getentropy(void *buf, size_t buflen)
> > {
> > int ret;
> >
> > ret = getentropy(buf, buflen, 0);
> > return (ret > 0) ? 0 : ret;
> > }
> >
> > The reason for the additional flags is that I'm trying to solve more
> > problems than just getentropy()'s raison d'etre. The discussion of
> > this is in the commit description; let me know if there bits that I
> > could make clearer.
>
> Ted is that the right flags with the new call so it doesn't block?
Yes, it's currently the correct flags. There are some people who are
arguing for GRND_NONBLOCK instead of GRND_BLOCK. The original idea
was that default should always be non-blocking, and you want 0 to be
the default.
On Thu, Jul 17, 2014 at 12:48:12PM -0700, Zach Brown wrote:
> Do we want it to block by default and have the flag be _NONBLOCK? Feels
> more.. familiar.
Yes, I'm starting to think so. In the default case where we are using
the urandom pool, we *do* want the default to block until the pool is
initialized. At least, the FreeBSD people have been whining forever
that Linux is horribly insecure because we don't block until we are
sure that we know that we have good entropy in the pool.
The git description explains why I haven't changed this to date; I
didn't want to break userspace. In addition, I've been working
awfully hard to make sure that least on x86 systems, that we gather
enough system noise that despite the fact that we are being very
conservative in our entropy estimation/accounting), the pool gets
initialized very quickly.
My goal was that on x86 laptops and severs, that the pool would be
fully initialized before the openssh scripts has a chance to run. We
have a printk that triggers if something tries to read from
/dev/urandom before it is fully initialized, and we seem to be doing
pretty well. Systemd seems to want to read from /dev/urandom in very
early boot:
Jul 11 21:14:10 closure kernel: [ 2.941902] random: systemd urandom read with 109 bits of entropy available
.... but if you use the old-fashioned System V init scripts, it seems
to work fairly well. :-)
So in practice, the fact that we block at system init time shouldn't
be a hardship for LibreSSL in most cases --- and in the case where you
are running on an embedded system where there are barely any devices,
no cycle counter, and nothing that produces enough interrupts to
initialize the pool, what would you prefer that we do? Return data
that might not be fully "seed grade entropy"?
If you are determined to get data from a not a fully initialized
entropy pool, then you can open /dev/urandom and get it via the old
interface. In actual practice, this shouldn't happen except in very
early boot, when any sane system wouldn't be trying to create
long-term public keys anyway. (The fact that most systems try to
create OpenSSH's host keys as the first thing after an out-of-the-Box
first boot situation is something I've always considered Crazy-Eddie
Bat-Shit Insane....) And that early in the boot sequence, it's highly
unlikely that an attacker would be carrying out a fd exhaustion
attack, since the network won't have been started. And if you are
determined to get data even from an potentially insecure pool, and you
can't open /dev/urandom due to a fd exhaustion attack, the right
answer is to SIGKILL yourself anyway....
- Ted
next parent reply other threads:[~2014-07-17 20:43 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1405588695-12014-1-git-send-email-tytso@mit.edu>
[not found] ` <20140717161215.GA14951@infradead.org>
[not found] ` <20140717170115.GO1491@thunk.org>
[not found] ` <CAComcpObt4y--GEuAZgzkaDWnrJYBKhwsvqjOkdiXU_yGnV2Tg@mail.gmail.com>
[not found] ` <CAComcpObt4y--GEuAZgzkaDWnrJYBKhwsvqjOkdiXU_yGnV2Tg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-17 20:43 ` Theodore Ts'o [this message]
[not found] ` <20140717204340.GS1491-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2014-07-17 21:44 ` [PATCH, RFC] random: introduce getrandom(2) system call Zach Brown
[not found] ` <20140717214450.GE24196-fypN+1c5dIyjpB87vu3CluTW4wlIGRCZ@public.gmane.org>
2014-07-17 22:00 ` Andy Lutomirski
[not found] ` <CALCETrVC2SVC2BwintZ7P5MvwDO4z0VBe0svpWhVhx7Xgfoeag-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-07-17 22:27 ` Theodore Ts'o
[not found] ` <20140717194812.GC24196@lenny.home.zabbo.net>
[not found] ` <20140717194812.GC24196-fypN+1c5dIyjpB87vu3CluTW4wlIGRCZ@public.gmane.org>
2014-07-17 20:54 ` Theodore Ts'o
[not found] ` <20140717205417.GT1491-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2014-07-17 21:39 ` Zach Brown
[not found] ` <53C8319A.8090108@amacapital.net>
[not found] ` <53C8319A.8090108-kltTT9wpgjJwATOyAt5JVQ@public.gmane.org>
2014-07-17 21:14 ` Theodore Ts'o
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=20140717204340.GS1491@thunk.org \
--to=tytso-3s7wtutddsa@public.gmane.org \
--cc=beck-7YlrpqBBQ3VAfugRpC6u6w@public.gmane.org \
--cc=hch-wEGCiKHe2LqWVfeAwA7xHQ@public.gmane.org \
--cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=zab-ugsP4Wv/S6ZeoWH0uzbU5w@public.gmane.org \
/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).