Re: [PATCH, RFC] random: introduce getrandom(2) system call
From: Andy Lutomirski <luto@amacapital.net>
Date: 2014-07-17 20:35:21
Also in:
lkml
On 07/17/2014 11:48 AM, Mark Kettenis wrote:
On Thu, Jul 17, 2014, Theodore Ts'o wrote:quoted
The getrandom(2) system call is a superset of getentropy(2). When we add the support for this into glibc, it won't be terribly difficult nor annoying to drop the following in alongside the standard support needed for any new system call: int getentropy(void *buf, size_t buflen) { int ret; ret = getentropy(buf, buflen, 0); return (ret > 0) ? 0 : ret; }I'm sure you meant to use getrandom() there ;) Since for LibreSSL we'd want a getentropy() that cannot fail the getrandom() call should use GRND_BLOCK flag. Actually it makes sense (to me) to make blocking the default behaviour and have a BRND_NONBLOCK flag. Much in the same way as you need to specify O_NONBLOCK if you want non-blocking behaviour for files.
Can we please have a mode in which getrandom(2) can neither block nor fail? If that gets added, then this can replace things like AT_RANDOM. There are non-crypto things out there that will want this. There are also probably VM systems (especially ones that have something like my KVM_GET_RNG_SEED patches applied, or many VMs on Haswell, for that matter) that will have perfectly fine cryptographically secure urandom output immediately after bootup but that won't consider themselves "initialized" for a while. At least these will be perfectly fine from the POV of those who trust their hypervisor and Intel :) --Andy