[PATCH v3 0/3] Add support for architectural random number generator

From: H. Peter Anvin
Date: Sun Jul 31 2011 - 17:28:12 EST


This version of the patchset uses inlines with alternatives as
proposed by Linus. In order to avoid the issue of "random" vs
"urandom", this hooks into *only* the kernel consumer interfaces
get_random_bytes() and get_random_int(); this means that legacy users
of /dev/urandom in userspace will not get direct use RDRAND, but those
can be eventually converted to using RDRAND directly in userspace.

We can, of course, still both pools randomness via rngd or a future
in-kernel mechanism as proposed by Matt.

Since there was a minor amount of confusion I want to clarify: RDRAND
architecturally has weaker security guarantees than the documented
interface for /dev/random, so we can't just replace all users of
extract_entropy() with RDRAND.

Git tree also available:

git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-rdrand.git rdrand-3

Again, for technical documentation see:

http://software.intel.com/en-us/articles/download-the-latest-bull-mountain-software-implementation-guide/

Changes in version 3:
- Use inline hooks.
- Enable get_random_int() and get_random_bytes() only, in other words
only enable the in-kernel users.
- Drop the preinitialization of the random pools; since they are only
used for userspace consumers when RDRAND is available, they can be fed
entropy via the input mechanism.

Total changes:
Documentation/kernel-parameters.txt | 5 ++
arch/x86/Kconfig | 9 ++++
arch/x86/include/asm/archrandom.h | 75 +++++++++++++++++++++++++++++++++++
arch/x86/kernel/cpu/Makefile | 1 +
arch/x86/kernel/cpu/common.c | 2 +
arch/x86/kernel/cpu/rdrand.c | 73 ++++++++++++++++++++++++++++++++++
drivers/char/random.c | 25 ++++++++++-
include/linux/random.h | 13 ++++++
8 files changed, 200 insertions(+), 3 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/