From: "Stephan Müller" <smueller@chronox.de> To: Arnd Bergmann <arnd@arndb.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-crypto@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>, linux-api@vger.kernel.org, "Eric W. Biederman" <ebiederm@xmission.com>, "Alexander E. Patrakov" <patrakov@gmail.com>, "Ahmed S. Darwish" <darwish.07@gmail.com>, "Theodore Y. Ts'o" <tytso@mit.edu>, Willy Tarreau <w@1wt.eu>, Matthew Garrett <mjg59@srcf.ucam.org>, Vito Caputo <vcaputo@pengaru.com>, Andreas Dilger <adilger.kernel@dilger.ca>, Jan Kara <jack@suse.cz>, Ray Strode <rstrode@redhat.com>, William Jon McCann <mccann@jhu.edu>, zhangjs <zachary@baishancloud.com>, Andy Lutomirski <luto@kernel.org>, Florian Weimer <fweimer@redhat.com>, Lennart Poettering <mzxreary@0pointer.de>, Nicolai Stange <nstange@suse.de>, "Peter, Matthias" <matthias.peter@bsi.bund.de>, Marcelo Henrique Cerri <marcelo.cerri@canonical.com>, Roman Drahtmueller <draht@schaltsekun.de>, Neil Horman <nhorman@redhat.com> Subject: [PATCH v25 12/12] LRNG - add interface for gathering of raw entropy Date: Sat, 16 Nov 2019 10:38:12 +0100 [thread overview] Message-ID: <3610406.x8mDjznOIz@positron.chronox.de> (raw) In-Reply-To: <2787174.DQlWHN5GGo@positron.chronox.de> The test interface allows a privileged process to capture the raw unconditioned noise that is collected by the LRNG for statistical analysis. Extracted noise data is not used to seed the LRNG. This is a test interface and not appropriate for production systems. Yet, the interface is considered to be sufficiently secured for production systems. Access to the data is given through the lrng_raw debugfs file. The data buffer should be multiples of sizeof(u32) to fill the entire buffer. Using the option lrng_testing.boot_test=1 the raw noise of the first 1000 entropy events since boot can be sampled. This test interface allows generating the data required for analysis whether the LRNG is in compliance with SP800-90B sections 3.1.3 and 3.1.4. CC: "Eric W. Biederman" <ebiederm@xmission.com> CC: "Alexander E. Patrakov" <patrakov@gmail.com> CC: "Ahmed S. Darwish" <darwish.07@gmail.com> CC: "Theodore Y. Ts'o" <tytso@mit.edu> CC: Willy Tarreau <w@1wt.eu> CC: Matthew Garrett <mjg59@srcf.ucam.org> CC: Vito Caputo <vcaputo@pengaru.com> CC: Andreas Dilger <adilger.kernel@dilger.ca> CC: Jan Kara <jack@suse.cz> CC: Ray Strode <rstrode@redhat.com> CC: William Jon McCann <mccann@jhu.edu> CC: zhangjs <zachary@baishancloud.com> CC: Andy Lutomirski <luto@kernel.org> CC: Florian Weimer <fweimer@redhat.com> CC: Lennart Poettering <mzxreary@0pointer.de> CC: Nicolai Stange <nstange@suse.de> Reviewed-by: Roman Drahtmueller <draht@schaltsekun.de> Tested-by: Roman Drahtmüller <draht@schaltsekun.de> Tested-by: Marcelo Henrique Cerri <marcelo.cerri@canonical.com> Tested-by: Neil Horman <nhorman@redhat.com> Signed-off-by: Stephan Mueller <smueller@chronox.de> --- drivers/char/lrng/Kconfig | 16 ++ drivers/char/lrng/Makefile | 1 + drivers/char/lrng/lrng_testing.c | 324 +++++++++++++++++++++++++++++++ 3 files changed, 341 insertions(+) create mode 100644 drivers/char/lrng/lrng_testing.c diff --git a/drivers/char/lrng/Kconfig b/drivers/char/lrng/Kconfig index e6ca3acc1e48..4ccc710832ef 100644 --- a/drivers/char/lrng/Kconfig +++ b/drivers/char/lrng/Kconfig @@ -169,4 +169,20 @@ config LRNG_APT_CUTOFF default 325 if !LRNG_APT_BROKEN default 32 if LRNG_APT_BROKEN +config LRNG_TESTING + bool "Enable entropy test interface to LRNG noise source" + select CONFIG_DEBUG_FS + help + The test interface allows a privileged process to capture + the raw unconditioned noise that is collected by the LRNG + for statistical analysis. Extracted noise data is not used + to seed the LRNG. + + The raw noise data can be obtained using the lrng_raw + debugfs file. Using the option lrng_testing.boot_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + + If unsure, say N. + endif # LRNG diff --git a/drivers/char/lrng/Makefile b/drivers/char/lrng/Makefile index 0713e9c0aa6e..c0b6cc4301fe 100644 --- a/drivers/char/lrng/Makefile +++ b/drivers/char/lrng/Makefile @@ -16,3 +16,4 @@ obj-$(CONFIG_LRNG_KCAPI) += lrng_kcapi.o obj-$(CONFIG_LRNG_JENT) += lrng_jent.o obj-$(CONFIG_LRNG_TRNG_SUPPORT) += lrng_trng.o obj-$(CONFIG_LRNG_HEALTH_TESTS) += lrng_health.o +obj-$(CONFIG_LRNG_TESTING) += lrng_testing.o diff --git a/drivers/char/lrng/lrng_testing.c b/drivers/char/lrng/lrng_testing.c new file mode 100644 index 000000000000..5c33d3bd2172 --- /dev/null +++ b/drivers/char/lrng/lrng_testing.c @@ -0,0 +1,324 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Linux Random Number Generator (LRNG) Raw entropy collection tool + * + * Copyright (C) 2019, Stephan Mueller <smueller@chronox.de> + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include <linux/atomic.h> +#include <linux/bug.h> +#include <linux/debugfs.h> +#include <linux/module.h> +#include <linux/sched.h> +#include <linux/sched/signal.h> +#include <linux/slab.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/uaccess.h> +#include <linux/workqueue.h> +#include <asm/errno.h> + +#include "lrng_internal.h" + +#define LRNG_TESTING_RINGBUFFER_SIZE 1024 +#define LRNG_TESTING_RINGBUFFER_MASK (LRNG_TESTING_RINGBUFFER_SIZE - 1) + +static u32 lrng_testing_rb[LRNG_TESTING_RINGBUFFER_SIZE]; +static atomic_t lrng_rb_reader = ATOMIC_INIT(0); +static atomic_t lrng_rb_writer = ATOMIC_INIT(0); +static atomic_t lrng_rb_first_in = ATOMIC_INIT(0); +static atomic_t lrng_testing_enabled = ATOMIC_INIT(0); + +static DECLARE_WAIT_QUEUE_HEAD(lrng_raw_read_wait); + +static u32 boot_test = 0; +module_param(boot_test, uint, 0644); +MODULE_PARM_DESC(boot_test, "Enable gathering boot time entropy of the first" + " entropy events"); + +static inline void lrng_raw_entropy_reset(void) +{ + atomic_set(&lrng_rb_reader, 0); + atomic_set(&lrng_rb_writer, 0); + atomic_set(&lrng_rb_first_in, 0); +} + +static void lrng_raw_entropy_init(void) +{ + /* + * The boot time testing implies we have a running test. If the + * caller wants to clear it, he has to unset the boot_test flag + * at runtime via sysfs to enable regular runtime testing + */ + if (boot_test) + return; + + lrng_raw_entropy_reset(); + atomic_set(&lrng_testing_enabled, 1); + pr_warn("Enabling raw entropy collection\n"); +} + +static void lrng_raw_entropy_fini(void) +{ + if (boot_test) + return; + + lrng_raw_entropy_reset(); + atomic_set(&lrng_testing_enabled, 0); + pr_warn("Disabling raw entropy collection\n"); +} + +bool lrng_raw_entropy_store(u32 value) +{ + unsigned int write_ptr; + unsigned int read_ptr; + + if (!atomic_read(&lrng_testing_enabled) && !boot_test) + return false; + + write_ptr = (unsigned int)atomic_add_return_relaxed(1, &lrng_rb_writer); + read_ptr = (unsigned int)atomic_read(&lrng_rb_reader); + + /* + * Disable entropy testing for boot time testing after ring buffer + * is filled. + */ + if (boot_test && write_ptr > LRNG_TESTING_RINGBUFFER_SIZE) { + pr_warn_once("Boot time entropy collection test disabled\n"); + return false; + } + + if (boot_test && !atomic_read(&lrng_rb_first_in)) + pr_warn("Boot time entropy collection test enabled\n"); + + lrng_testing_rb[write_ptr & LRNG_TESTING_RINGBUFFER_MASK] = value; + + /* We got at least one event, enable the reader now. */ + atomic_set(&lrng_rb_first_in, 1); + + if (wq_has_sleeper(&lrng_raw_read_wait)) + wake_up_interruptible(&lrng_raw_read_wait); + + /* + * Our writer is taking over the reader - this means the reader + * one full ring buffer available. Thus we "push" the reader ahead + * to guarantee that he will be able to consume the full ring. + */ + if (!boot_test && + ((write_ptr & LRNG_TESTING_RINGBUFFER_MASK) == + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK))) + atomic_inc_return_relaxed(&lrng_rb_reader); + + return true; +} + +static inline bool lrng_raw_have_data(void) +{ + unsigned int read_ptr = (unsigned int)atomic_read(&lrng_rb_reader); + unsigned int write_ptr = (unsigned int)atomic_read(&lrng_rb_writer); + + return (atomic_read(&lrng_rb_first_in) && + (write_ptr & LRNG_TESTING_RINGBUFFER_MASK) != + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK)); +} + +static int lrng_raw_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + int collected_data = 0; + + if (!atomic_read(&lrng_testing_enabled) && !boot_test) + return -EAGAIN; + + if (!atomic_read(&lrng_rb_first_in)) { + wait_event_interruptible(lrng_raw_read_wait, + lrng_raw_have_data()); + if (signal_pending(current)) + return -ERESTARTSYS; + } + + while (outbuflen) { + unsigned int read_ptr = + (unsigned int)atomic_add_return_relaxed( + 1, &lrng_rb_reader); + unsigned int write_ptr = + (unsigned int)atomic_read(&lrng_rb_writer); + + /* + * For boot time testing, only output one round of ring buffer. + */ + if (boot_test && read_ptr > LRNG_TESTING_RINGBUFFER_SIZE) { + collected_data = -ENOMSG; + goto out; + } + + /* We reached the writer */ + if (!boot_test && ((write_ptr & LRNG_TESTING_RINGBUFFER_MASK) == + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK))) { + wait_event_interruptible(lrng_raw_read_wait, + lrng_raw_have_data()); + if (signal_pending(current)) + return -ERESTARTSYS; + + continue; + } + + /* We copy out word-wise */ + if (outbuflen < sizeof(u32)) { + atomic_dec_return_relaxed(&lrng_rb_reader); + goto out; + } + + memcpy(outbuf, + &lrng_testing_rb[read_ptr & LRNG_TESTING_RINGBUFFER_MASK], + sizeof(u32)); + outbuf += sizeof(u32); + outbuflen -= sizeof(u32); + collected_data += sizeof(u32); + } + +out: + return collected_data; +} + +/************************************************************************** + * Debugfs interface + **************************************************************************/ +static int lrng_raw_extract_user(char __user *buf, size_t nbytes) +{ + u8 *tmp, *tmp_aligned; + int ret = 0, large_request = (nbytes > 256); + + /* + * The intention of this interface is for collecting at least + * 1000 samples due to the SP800-90B requirements. So, we make no + * effort in avoiding allocating more memory that actually needed + * by the user. Hence, we allocate sufficient memory to always hold + * that amount of data. + */ + tmp = kmalloc(LRNG_TESTING_RINGBUFFER_SIZE + sizeof(u32), GFP_KERNEL); + if (!tmp) + return -ENOMEM; + + tmp_aligned = PTR_ALIGN(tmp, sizeof(u32)); + + while (nbytes) { + int i; + + if (large_request && need_resched()) { + if (signal_pending(current)) { + if (ret == 0) + ret = -ERESTARTSYS; + break; + } + schedule(); + } + + i = min_t(int, nbytes, LRNG_TESTING_RINGBUFFER_SIZE); + i = lrng_raw_entropy_reader(tmp_aligned, i); + if (i <= 0) { + if (i < 0) + ret = i; + break; + } + if (copy_to_user(buf, tmp_aligned, i)) { + ret = -EFAULT; + break; + } + + nbytes -= i; + buf += i; + ret += i; + } + + kzfree(tmp); + return ret; +} + +/* + * This data structure holds the dentry's of the debugfs files establishing + * the interface to user space. + */ +struct lrng_raw_debugfs { + struct dentry *lrng_raw_debugfs_root; /* root dentry */ + struct dentry *lrng_raw_debugfs_lrng_raw; /* .../lrng_raw */ +}; + +static struct lrng_raw_debugfs lrng_raw_debugfs; + +/* DebugFS operations and definition of the debugfs files */ +static ssize_t lrng_raw_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + loff_t pos = *ppos; + int ret; + + if (!count) + return 0; + lrng_raw_entropy_init(); + ret = lrng_raw_extract_user(to, count); + lrng_raw_entropy_fini(); + if (ret < 0) + return ret; + count -= ret; + *ppos = pos + count; + return ret; +} + +/* Module init: allocate memory, register the debugfs files */ +static int lrng_raw_debugfs_init(void) +{ + lrng_raw_debugfs.lrng_raw_debugfs_root = + debugfs_create_dir(KBUILD_MODNAME, NULL); + if (IS_ERR(lrng_raw_debugfs.lrng_raw_debugfs_root)) { + lrng_raw_debugfs.lrng_raw_debugfs_root = NULL; + return PTR_ERR(lrng_raw_debugfs.lrng_raw_debugfs_root); + } + return 0; +} + +static struct file_operations lrng_raw_name_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_read, +}; + +static int lrng_raw_debugfs_init_name(void) +{ + lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw = + debugfs_create_file("lrng_raw", 0400, + lrng_raw_debugfs.lrng_raw_debugfs_root, + NULL, &lrng_raw_name_fops); + if (IS_ERR(lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw)) { + lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw = NULL; + return PTR_ERR(lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw); + } + return 0; +} + +static int __init lrng_raw_init(void) +{ + int ret = lrng_raw_debugfs_init(); + + if (ret < 0) + return ret; + + ret = lrng_raw_debugfs_init_name(); + if (ret < 0) + debugfs_remove_recursive( + lrng_raw_debugfs.lrng_raw_debugfs_root); + + return ret; +} + +static void __exit lrng_raw_exit(void) +{ + debugfs_remove_recursive(lrng_raw_debugfs.lrng_raw_debugfs_root); +} + +module_init(lrng_raw_init); +module_exit(lrng_raw_exit); + +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>"); +MODULE_DESCRIPTION("Kernel module for gathering raw entropy"); -- 2.23.0
WARNING: multiple messages have this Message-ID (diff)
From: "Stephan Müller" <smueller@chronox.de> To: Arnd Bergmann <arnd@arndb.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>, linux-crypto@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>, linux-api@vger.kernel.org, "Eric W. Biederman" <ebiederm@xmission.com>, "Alexander E. Patrakov" <patrakov@gmail.com>, "Ahmed S. Darwish" <darwish.07@gmail.com>, "Theodore Y. Ts'o" <tytso@mit.edu>, Willy Tarreau <w@1wt.eu>, Matthew Garrett <mjg59@srcf.ucam.org>, Vito Caputo <vcaputo@pengaru.com>, Andreas Dilger <adilger.kernel@dilger.ca>, Jan Kara <jack@suse.cz>, Ray Strode <rstrode@redhat.com>, William Jon McCann <mccann@jhu.edu>, zhangjs <zachary@baishancloud.com>, Andy Lutomirski <luto@kernel.org>, Florian Weimer <fweimer@redhat.com>, Lennart Poettering <mzxreary@0pointer.de>, Nicolai Stange <nstange@suse.de>, "Peter, Matthias" <matth> Subject: [PATCH v25 12/12] LRNG - add interface for gathering of raw entropy Date: Sat, 16 Nov 2019 10:38:12 +0100 [thread overview] Message-ID: <3610406.x8mDjznOIz@positron.chronox.de> (raw) In-Reply-To: <2787174.DQlWHN5GGo@positron.chronox.de> The test interface allows a privileged process to capture the raw unconditioned noise that is collected by the LRNG for statistical analysis. Extracted noise data is not used to seed the LRNG. This is a test interface and not appropriate for production systems. Yet, the interface is considered to be sufficiently secured for production systems. Access to the data is given through the lrng_raw debugfs file. The data buffer should be multiples of sizeof(u32) to fill the entire buffer. Using the option lrng_testing.boot_test=1 the raw noise of the first 1000 entropy events since boot can be sampled. This test interface allows generating the data required for analysis whether the LRNG is in compliance with SP800-90B sections 3.1.3 and 3.1.4. CC: "Eric W. Biederman" <ebiederm@xmission.com> CC: "Alexander E. Patrakov" <patrakov@gmail.com> CC: "Ahmed S. Darwish" <darwish.07@gmail.com> CC: "Theodore Y. Ts'o" <tytso@mit.edu> CC: Willy Tarreau <w@1wt.eu> CC: Matthew Garrett <mjg59@srcf.ucam.org> CC: Vito Caputo <vcaputo@pengaru.com> CC: Andreas Dilger <adilger.kernel@dilger.ca> CC: Jan Kara <jack@suse.cz> CC: Ray Strode <rstrode@redhat.com> CC: William Jon McCann <mccann@jhu.edu> CC: zhangjs <zachary@baishancloud.com> CC: Andy Lutomirski <luto@kernel.org> CC: Florian Weimer <fweimer@redhat.com> CC: Lennart Poettering <mzxreary@0pointer.de> CC: Nicolai Stange <nstange@suse.de> Reviewed-by: Roman Drahtmueller <draht@schaltsekun.de> Tested-by: Roman Drahtmüller <draht@schaltsekun.de> Tested-by: Marcelo Henrique Cerri <marcelo.cerri@canonical.com> Tested-by: Neil Horman <nhorman@redhat.com> Signed-off-by: Stephan Mueller <smueller@chronox.de> --- drivers/char/lrng/Kconfig | 16 ++ drivers/char/lrng/Makefile | 1 + drivers/char/lrng/lrng_testing.c | 324 +++++++++++++++++++++++++++++++ 3 files changed, 341 insertions(+) create mode 100644 drivers/char/lrng/lrng_testing.c diff --git a/drivers/char/lrng/Kconfig b/drivers/char/lrng/Kconfig index e6ca3acc1e48..4ccc710832ef 100644 --- a/drivers/char/lrng/Kconfig +++ b/drivers/char/lrng/Kconfig @@ -169,4 +169,20 @@ config LRNG_APT_CUTOFF default 325 if !LRNG_APT_BROKEN default 32 if LRNG_APT_BROKEN +config LRNG_TESTING + bool "Enable entropy test interface to LRNG noise source" + select CONFIG_DEBUG_FS + help + The test interface allows a privileged process to capture + the raw unconditioned noise that is collected by the LRNG + for statistical analysis. Extracted noise data is not used + to seed the LRNG. + + The raw noise data can be obtained using the lrng_raw + debugfs file. Using the option lrng_testing.boot_test=1 + the raw noise of the first 1000 entropy events since boot + can be sampled. + + If unsure, say N. + endif # LRNG diff --git a/drivers/char/lrng/Makefile b/drivers/char/lrng/Makefile index 0713e9c0aa6e..c0b6cc4301fe 100644 --- a/drivers/char/lrng/Makefile +++ b/drivers/char/lrng/Makefile @@ -16,3 +16,4 @@ obj-$(CONFIG_LRNG_KCAPI) += lrng_kcapi.o obj-$(CONFIG_LRNG_JENT) += lrng_jent.o obj-$(CONFIG_LRNG_TRNG_SUPPORT) += lrng_trng.o obj-$(CONFIG_LRNG_HEALTH_TESTS) += lrng_health.o +obj-$(CONFIG_LRNG_TESTING) += lrng_testing.o diff --git a/drivers/char/lrng/lrng_testing.c b/drivers/char/lrng/lrng_testing.c new file mode 100644 index 000000000000..5c33d3bd2172 --- /dev/null +++ b/drivers/char/lrng/lrng_testing.c @@ -0,0 +1,324 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-2-Clause +/* + * Linux Random Number Generator (LRNG) Raw entropy collection tool + * + * Copyright (C) 2019, Stephan Mueller <smueller@chronox.de> + */ + +#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt + +#include <linux/atomic.h> +#include <linux/bug.h> +#include <linux/debugfs.h> +#include <linux/module.h> +#include <linux/sched.h> +#include <linux/sched/signal.h> +#include <linux/slab.h> +#include <linux/string.h> +#include <linux/types.h> +#include <linux/uaccess.h> +#include <linux/workqueue.h> +#include <asm/errno.h> + +#include "lrng_internal.h" + +#define LRNG_TESTING_RINGBUFFER_SIZE 1024 +#define LRNG_TESTING_RINGBUFFER_MASK (LRNG_TESTING_RINGBUFFER_SIZE - 1) + +static u32 lrng_testing_rb[LRNG_TESTING_RINGBUFFER_SIZE]; +static atomic_t lrng_rb_reader = ATOMIC_INIT(0); +static atomic_t lrng_rb_writer = ATOMIC_INIT(0); +static atomic_t lrng_rb_first_in = ATOMIC_INIT(0); +static atomic_t lrng_testing_enabled = ATOMIC_INIT(0); + +static DECLARE_WAIT_QUEUE_HEAD(lrng_raw_read_wait); + +static u32 boot_test = 0; +module_param(boot_test, uint, 0644); +MODULE_PARM_DESC(boot_test, "Enable gathering boot time entropy of the first" + " entropy events"); + +static inline void lrng_raw_entropy_reset(void) +{ + atomic_set(&lrng_rb_reader, 0); + atomic_set(&lrng_rb_writer, 0); + atomic_set(&lrng_rb_first_in, 0); +} + +static void lrng_raw_entropy_init(void) +{ + /* + * The boot time testing implies we have a running test. If the + * caller wants to clear it, he has to unset the boot_test flag + * at runtime via sysfs to enable regular runtime testing + */ + if (boot_test) + return; + + lrng_raw_entropy_reset(); + atomic_set(&lrng_testing_enabled, 1); + pr_warn("Enabling raw entropy collection\n"); +} + +static void lrng_raw_entropy_fini(void) +{ + if (boot_test) + return; + + lrng_raw_entropy_reset(); + atomic_set(&lrng_testing_enabled, 0); + pr_warn("Disabling raw entropy collection\n"); +} + +bool lrng_raw_entropy_store(u32 value) +{ + unsigned int write_ptr; + unsigned int read_ptr; + + if (!atomic_read(&lrng_testing_enabled) && !boot_test) + return false; + + write_ptr = (unsigned int)atomic_add_return_relaxed(1, &lrng_rb_writer); + read_ptr = (unsigned int)atomic_read(&lrng_rb_reader); + + /* + * Disable entropy testing for boot time testing after ring buffer + * is filled. + */ + if (boot_test && write_ptr > LRNG_TESTING_RINGBUFFER_SIZE) { + pr_warn_once("Boot time entropy collection test disabled\n"); + return false; + } + + if (boot_test && !atomic_read(&lrng_rb_first_in)) + pr_warn("Boot time entropy collection test enabled\n"); + + lrng_testing_rb[write_ptr & LRNG_TESTING_RINGBUFFER_MASK] = value; + + /* We got at least one event, enable the reader now. */ + atomic_set(&lrng_rb_first_in, 1); + + if (wq_has_sleeper(&lrng_raw_read_wait)) + wake_up_interruptible(&lrng_raw_read_wait); + + /* + * Our writer is taking over the reader - this means the reader + * one full ring buffer available. Thus we "push" the reader ahead + * to guarantee that he will be able to consume the full ring. + */ + if (!boot_test && + ((write_ptr & LRNG_TESTING_RINGBUFFER_MASK) == + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK))) + atomic_inc_return_relaxed(&lrng_rb_reader); + + return true; +} + +static inline bool lrng_raw_have_data(void) +{ + unsigned int read_ptr = (unsigned int)atomic_read(&lrng_rb_reader); + unsigned int write_ptr = (unsigned int)atomic_read(&lrng_rb_writer); + + return (atomic_read(&lrng_rb_first_in) && + (write_ptr & LRNG_TESTING_RINGBUFFER_MASK) != + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK)); +} + +static int lrng_raw_entropy_reader(u8 *outbuf, u32 outbuflen) +{ + int collected_data = 0; + + if (!atomic_read(&lrng_testing_enabled) && !boot_test) + return -EAGAIN; + + if (!atomic_read(&lrng_rb_first_in)) { + wait_event_interruptible(lrng_raw_read_wait, + lrng_raw_have_data()); + if (signal_pending(current)) + return -ERESTARTSYS; + } + + while (outbuflen) { + unsigned int read_ptr = + (unsigned int)atomic_add_return_relaxed( + 1, &lrng_rb_reader); + unsigned int write_ptr = + (unsigned int)atomic_read(&lrng_rb_writer); + + /* + * For boot time testing, only output one round of ring buffer. + */ + if (boot_test && read_ptr > LRNG_TESTING_RINGBUFFER_SIZE) { + collected_data = -ENOMSG; + goto out; + } + + /* We reached the writer */ + if (!boot_test && ((write_ptr & LRNG_TESTING_RINGBUFFER_MASK) == + (read_ptr & LRNG_TESTING_RINGBUFFER_MASK))) { + wait_event_interruptible(lrng_raw_read_wait, + lrng_raw_have_data()); + if (signal_pending(current)) + return -ERESTARTSYS; + + continue; + } + + /* We copy out word-wise */ + if (outbuflen < sizeof(u32)) { + atomic_dec_return_relaxed(&lrng_rb_reader); + goto out; + } + + memcpy(outbuf, + &lrng_testing_rb[read_ptr & LRNG_TESTING_RINGBUFFER_MASK], + sizeof(u32)); + outbuf += sizeof(u32); + outbuflen -= sizeof(u32); + collected_data += sizeof(u32); + } + +out: + return collected_data; +} + +/************************************************************************** + * Debugfs interface + **************************************************************************/ +static int lrng_raw_extract_user(char __user *buf, size_t nbytes) +{ + u8 *tmp, *tmp_aligned; + int ret = 0, large_request = (nbytes > 256); + + /* + * The intention of this interface is for collecting at least + * 1000 samples due to the SP800-90B requirements. So, we make no + * effort in avoiding allocating more memory that actually needed + * by the user. Hence, we allocate sufficient memory to always hold + * that amount of data. + */ + tmp = kmalloc(LRNG_TESTING_RINGBUFFER_SIZE + sizeof(u32), GFP_KERNEL); + if (!tmp) + return -ENOMEM; + + tmp_aligned = PTR_ALIGN(tmp, sizeof(u32)); + + while (nbytes) { + int i; + + if (large_request && need_resched()) { + if (signal_pending(current)) { + if (ret == 0) + ret = -ERESTARTSYS; + break; + } + schedule(); + } + + i = min_t(int, nbytes, LRNG_TESTING_RINGBUFFER_SIZE); + i = lrng_raw_entropy_reader(tmp_aligned, i); + if (i <= 0) { + if (i < 0) + ret = i; + break; + } + if (copy_to_user(buf, tmp_aligned, i)) { + ret = -EFAULT; + break; + } + + nbytes -= i; + buf += i; + ret += i; + } + + kzfree(tmp); + return ret; +} + +/* + * This data structure holds the dentry's of the debugfs files establishing + * the interface to user space. + */ +struct lrng_raw_debugfs { + struct dentry *lrng_raw_debugfs_root; /* root dentry */ + struct dentry *lrng_raw_debugfs_lrng_raw; /* .../lrng_raw */ +}; + +static struct lrng_raw_debugfs lrng_raw_debugfs; + +/* DebugFS operations and definition of the debugfs files */ +static ssize_t lrng_raw_read(struct file *file, char __user *to, + size_t count, loff_t *ppos) +{ + loff_t pos = *ppos; + int ret; + + if (!count) + return 0; + lrng_raw_entropy_init(); + ret = lrng_raw_extract_user(to, count); + lrng_raw_entropy_fini(); + if (ret < 0) + return ret; + count -= ret; + *ppos = pos + count; + return ret; +} + +/* Module init: allocate memory, register the debugfs files */ +static int lrng_raw_debugfs_init(void) +{ + lrng_raw_debugfs.lrng_raw_debugfs_root = + debugfs_create_dir(KBUILD_MODNAME, NULL); + if (IS_ERR(lrng_raw_debugfs.lrng_raw_debugfs_root)) { + lrng_raw_debugfs.lrng_raw_debugfs_root = NULL; + return PTR_ERR(lrng_raw_debugfs.lrng_raw_debugfs_root); + } + return 0; +} + +static struct file_operations lrng_raw_name_fops = { + .owner = THIS_MODULE, + .read = lrng_raw_read, +}; + +static int lrng_raw_debugfs_init_name(void) +{ + lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw = + debugfs_create_file("lrng_raw", 0400, + lrng_raw_debugfs.lrng_raw_debugfs_root, + NULL, &lrng_raw_name_fops); + if (IS_ERR(lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw)) { + lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw = NULL; + return PTR_ERR(lrng_raw_debugfs.lrng_raw_debugfs_lrng_raw); + } + return 0; +} + +static int __init lrng_raw_init(void) +{ + int ret = lrng_raw_debugfs_init(); + + if (ret < 0) + return ret; + + ret = lrng_raw_debugfs_init_name(); + if (ret < 0) + debugfs_remove_recursive( + lrng_raw_debugfs.lrng_raw_debugfs_root); + + return ret; +} + +static void __exit lrng_raw_exit(void) +{ + debugfs_remove_recursive(lrng_raw_debugfs.lrng_raw_debugfs_root); +} + +module_init(lrng_raw_init); +module_exit(lrng_raw_exit); + +MODULE_LICENSE("Dual BSD/GPL"); +MODULE_AUTHOR("Stephan Mueller <smueller@chronox.de>"); +MODULE_DESCRIPTION("Kernel module for gathering raw entropy"); -- 2.23.0
next prev parent reply other threads:[~2019-11-16 9:42 UTC|newest] Thread overview: 339+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-11 18:17 [PATCH v24 00/12] /dev/random - a new approach with full SP800-90B compliance Stephan Müller 2019-11-11 18:17 ` Stephan Müller 2019-11-11 18:18 ` [PATCH v24 01/12] Linux Random Number Generator Stephan Müller 2019-11-11 18:18 ` Stephan Müller 2019-11-11 23:54 ` Thomas Gleixner 2019-11-11 23:54 ` Thomas Gleixner 2019-11-12 2:25 ` Stephan Müller 2019-11-12 2:25 ` Stephan Müller 2019-11-12 10:16 ` Thomas Gleixner 2019-11-12 10:16 ` Thomas Gleixner 2019-11-12 22:30 ` kbuild test robot 2019-11-12 22:30 ` kbuild test robot 2019-11-12 22:30 ` kbuild test robot 2019-11-12 23:15 ` Stephan Müller 2019-11-12 23:15 ` Stephan Müller 2019-11-12 23:15 ` Stephan Müller 2019-11-13 0:14 ` kbuild test robot 2019-11-13 0:14 ` kbuild test robot 2019-11-13 0:14 ` kbuild test robot 2019-11-13 0:25 ` Stephan Müller 2019-11-13 0:25 ` Stephan Müller 2019-11-13 0:25 ` Stephan Müller 2019-11-24 4:51 ` Sandy Harris 2019-11-24 4:51 ` Sandy Harris 2019-11-24 9:02 ` Stephan Mueller 2019-11-24 9:02 ` Stephan Mueller 2019-11-11 18:19 ` [PATCH v24 02/12] LRNG - allocate one SDRNG instance per NUMA node Stephan Müller 2019-11-11 18:19 ` Stephan Müller 2019-11-11 18:20 ` [PATCH v24 03/12] LRNG - /proc interface Stephan Müller 2019-11-11 18:20 ` Stephan Müller 2019-11-11 18:20 ` [PATCH v24 04/12] LRNG - add switchable DRNG support Stephan Müller 2019-11-11 18:20 ` Stephan Müller 2019-11-11 18:21 ` [PATCH v24 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2019-11-11 18:21 ` Stephan Müller 2019-11-11 18:21 ` [PATCH v24 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2019-11-11 18:21 ` Stephan Müller 2019-11-11 18:22 ` [PATCH v24 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2019-11-11 18:22 ` Stephan Müller 2019-11-11 18:23 ` [PATCH v24 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2019-11-11 18:23 ` Stephan Müller 2019-11-11 18:23 ` [PATCH v24 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2019-11-11 18:23 ` Stephan Müller 2019-11-11 18:24 ` [PATCH v24 10/12] LRNG - add TRNG support Stephan Müller 2019-11-11 18:24 ` Stephan Müller 2019-11-11 18:26 ` [PATCH v24 11/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2019-11-11 18:26 ` Stephan Müller 2019-11-12 19:58 ` Alexander E. Patrakov 2019-11-12 19:58 ` Alexander E. Patrakov 2019-11-12 23:11 ` Stephan Müller 2019-11-12 23:11 ` Stephan Müller 2019-11-13 0:36 ` Stephan Müller 2019-11-13 0:36 ` Stephan Müller 2019-11-13 6:02 ` Alexander E. Patrakov 2019-11-13 6:02 ` Alexander E. Patrakov 2019-11-14 1:46 ` Stephan Müller 2019-11-14 1:46 ` Stephan Müller 2019-11-11 18:26 ` [PATCH v24 12/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2019-11-11 18:26 ` Stephan Müller 2019-11-12 20:55 ` kbuild test robot 2019-11-12 20:55 ` kbuild test robot 2019-11-12 20:55 ` kbuild test robot 2019-11-12 23:13 ` Stephan Müller 2019-11-12 23:13 ` Stephan Müller 2019-11-12 23:13 ` Stephan Müller 2019-11-12 13:23 ` [PATCH v24 00/12] /dev/random - a new approach with full SP800-90B compliance Florian Weimer 2019-11-12 13:23 ` Florian Weimer 2019-11-12 22:43 ` Stephan Müller 2019-11-12 22:43 ` Stephan Müller 2019-11-12 15:33 ` Andy Lutomirski 2019-11-12 15:33 ` Andy Lutomirski 2019-11-12 23:03 ` Stephan Müller 2019-11-12 23:03 ` Stephan Müller 2019-11-12 23:26 ` Stephan Müller 2019-11-12 23:26 ` Stephan Müller 2019-11-13 4:24 ` Stephan Müller 2019-11-13 4:24 ` Stephan Müller 2019-11-13 4:48 ` Andy Lutomirski 2019-11-13 4:48 ` Andy Lutomirski 2019-11-13 12:16 ` Stephan Müller 2019-11-13 12:16 ` Stephan Müller 2019-11-16 9:32 ` [PATCH v25 00/12] /dev/random - a new approach with full SP800-90B Stephan Müller 2019-11-16 9:32 ` Stephan Müller 2019-11-16 9:33 ` [PATCH v25 01/12] Linux Random Number Generator Stephan Müller 2019-11-16 9:33 ` Stephan Müller 2019-11-16 11:25 ` Thomas Gleixner 2019-11-16 11:25 ` Thomas Gleixner 2019-11-17 10:30 ` Stephan Müller 2019-11-17 10:30 ` Stephan Müller 2019-11-16 18:13 ` Nicolai Stange 2019-11-16 18:13 ` Nicolai Stange 2019-11-17 11:01 ` Stephan Müller 2019-11-17 11:01 ` Stephan Müller 2019-11-16 9:33 ` [PATCH v25 02/12] LRNG - allocate one SDRNG instance per NUMA node Stephan Müller 2019-11-16 9:33 ` Stephan Müller 2019-11-16 9:34 ` [PATCH v25 03/12] LRNG - /proc interface Stephan Müller 2019-11-16 9:34 ` Stephan Müller 2019-11-16 16:39 ` Andy Lutomirski 2019-11-16 16:39 ` Andy Lutomirski 2019-11-17 12:16 ` Stephan Müller 2019-11-17 12:16 ` Stephan Müller 2019-11-19 10:06 ` Andy Lutomirski 2019-11-19 10:06 ` Andy Lutomirski 2019-11-19 10:55 ` Stephan Mueller 2019-11-19 10:55 ` Stephan Mueller 2019-11-19 17:40 ` Andy Lutomirski 2019-11-19 17:40 ` Andy Lutomirski 2019-11-16 23:36 ` Eric W. Biederman 2019-11-16 23:36 ` Eric W. Biederman 2019-11-17 11:37 ` Stephan Müller 2019-11-17 11:37 ` Stephan Müller 2019-11-16 9:34 ` [PATCH v25 04/12] LRNG - add switchable DRNG support Stephan Müller 2019-11-16 9:34 ` Stephan Müller 2019-11-16 9:35 ` [PATCH v25 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2019-11-16 9:35 ` Stephan Müller 2019-11-16 9:35 ` [PATCH v25 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2019-11-16 9:35 ` Stephan Müller 2019-11-16 9:35 ` [PATCH v25 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2019-11-16 9:35 ` Stephan Müller 2019-11-16 9:36 ` [PATCH v25 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2019-11-16 9:36 ` Stephan Müller 2019-11-16 9:36 ` [PATCH v25 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2019-11-16 9:36 ` Stephan Müller 2019-11-20 13:33 ` Neil Horman 2019-11-20 13:33 ` Neil Horman 2019-11-20 20:07 ` Stephan Müller 2019-11-20 20:07 ` Stephan Müller 2019-11-21 14:19 ` Neil Horman 2019-11-21 14:19 ` Neil Horman 2019-11-21 14:33 ` Stephan Mueller 2019-11-21 14:33 ` Stephan Mueller 2019-11-16 9:37 ` [PATCH v25 10/12] LRNG - add TRNG support Stephan Müller 2019-11-16 9:37 ` Stephan Müller 2019-11-16 16:09 ` Andy Lutomirski 2019-11-16 16:09 ` Andy Lutomirski 2019-11-17 11:10 ` Stephan Müller 2019-11-17 11:10 ` Stephan Müller 2019-11-19 10:07 ` Andy Lutomirski 2019-11-19 10:07 ` Andy Lutomirski 2019-11-19 10:46 ` Stephan Mueller 2019-11-19 10:46 ` Stephan Mueller 2019-11-19 12:41 ` Greg Kroah-Hartman 2019-11-19 12:41 ` Greg Kroah-Hartman 2019-11-20 8:58 ` Stephan Müller 2019-11-20 8:58 ` Stephan Müller 2019-11-20 9:55 ` Alexander E. Patrakov 2019-11-20 9:55 ` Alexander E. Patrakov 2019-11-20 13:29 ` Greg Kroah-Hartman 2019-11-20 13:29 ` Greg Kroah-Hartman 2019-11-20 19:51 ` Stephan Müller 2019-11-20 19:51 ` Stephan Müller 2019-11-20 19:57 ` Alexander E. Patrakov 2019-11-20 19:57 ` Alexander E. Patrakov 2019-11-20 20:32 ` Greg Kroah-Hartman 2019-11-20 20:32 ` Greg Kroah-Hartman 2019-11-21 13:06 ` Stephan Müller 2019-11-21 13:06 ` Stephan Müller 2019-11-16 9:37 ` [PATCH v25 11/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2019-11-16 9:37 ` Stephan Müller 2019-11-16 9:38 ` Stephan Müller [this message] 2019-11-16 9:38 ` [PATCH v25 12/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2019-11-16 16:51 ` Andy Lutomirski 2019-11-16 16:51 ` Andy Lutomirski 2019-11-17 22:55 ` Stephan Müller 2019-11-17 22:55 ` Stephan Müller 2019-11-19 10:04 ` Andy Lutomirski 2019-11-19 10:04 ` Andy Lutomirski 2019-11-19 17:17 ` Randy Dunlap 2019-11-19 17:17 ` Randy Dunlap 2019-11-20 9:01 ` Stephan Müller 2019-11-20 9:01 ` Stephan Müller 2019-11-21 12:18 ` Nicolai Stange 2019-11-21 12:18 ` Nicolai Stange 2019-11-21 15:18 ` Stephan Müller 2019-11-21 15:18 ` Stephan Müller 2019-11-23 20:08 ` [PATCH v26 00/12] /dev/random - a new approach with full SP800-90B Stephan Müller 2019-11-23 20:08 ` Stephan Müller 2019-11-23 20:10 ` [PATCH v26 01/12] Linux Random Number Generator Stephan Müller 2019-11-23 20:10 ` Stephan Müller 2019-11-24 22:44 ` kbuild test robot 2019-11-24 22:44 ` kbuild test robot 2019-11-24 22:44 ` kbuild test robot 2019-11-25 6:29 ` Stephan Mueller 2019-11-25 6:29 ` Stephan Mueller 2019-11-25 6:29 ` Stephan Mueller 2019-11-23 20:10 ` [PATCH v26 02/12] LRNG - allocate one SDRNG instance per NUMA node Stephan Müller 2019-11-23 20:10 ` Stephan Müller 2019-11-23 20:11 ` [PATCH v26 03/12] LRNG - sysctls and /proc interface Stephan Müller 2019-11-23 20:11 ` Stephan Müller 2019-11-23 20:11 ` [PATCH v26 04/12] LRNG - add switchable DRNG support Stephan Müller 2019-11-23 20:11 ` Stephan Müller 2019-11-23 20:31 ` [PATCH v26 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2019-11-23 20:31 ` Stephan Müller 2019-11-23 20:32 ` [PATCH v26 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2019-11-23 20:32 ` Stephan Müller 2019-11-23 20:32 ` [PATCH v26 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2019-11-23 20:32 ` Stephan Müller 2019-11-23 20:33 ` [PATCH v26 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2019-11-23 20:33 ` Stephan Müller 2019-11-23 20:34 ` [PATCH v26 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2019-11-23 20:34 ` Stephan Müller 2019-11-23 20:34 ` [PATCH v26 10/12] LRNG - add TRNG support Stephan Müller 2019-11-23 20:34 ` Stephan Müller 2019-11-23 20:34 ` [PATCH v26 11/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2019-11-23 20:34 ` Stephan Müller 2019-11-23 20:35 ` [PATCH v26 12/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2019-11-23 20:35 ` Stephan Müller 2020-01-09 8:29 ` [PATCH v27 00/12] /dev/random - a new approach with full SP800-90B Stephan Müller 2020-01-09 8:29 ` Stephan Müller 2020-01-09 8:30 ` [PATCH v27 01/12] Linux Random Number Generator Stephan Müller 2020-01-09 8:30 ` Stephan Müller 2020-01-16 6:09 ` kbuild test robot 2020-01-16 6:09 ` kbuild test robot 2020-01-16 6:09 ` kbuild test robot 2020-01-16 6:41 ` Stephan Mueller 2020-01-16 6:41 ` Stephan Mueller 2020-01-16 6:41 ` Stephan Mueller 2020-01-09 8:31 ` [PATCH v27 02/12] LRNG - allocate one DRNG instance per NUMA node Stephan Müller 2020-01-09 8:31 ` Stephan Müller 2020-01-09 8:31 ` [PATCH v27 03/12] LRNG - sysctls and /proc interface Stephan Müller 2020-01-09 8:31 ` Stephan Müller 2020-01-09 8:32 ` [PATCH v27 04/12] LRNG - add switchable DRNG support Stephan Müller 2020-01-09 8:32 ` Stephan Müller 2020-01-11 7:09 ` kbuild test robot 2020-01-11 7:09 ` kbuild test robot 2020-01-11 7:09 ` kbuild test robot 2020-01-12 10:12 ` Stephan Müller 2020-01-12 10:12 ` Stephan Müller 2020-01-12 10:12 ` Stephan Müller 2020-01-09 8:32 ` [PATCH v27 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2020-01-09 8:32 ` Stephan Müller 2020-01-09 8:32 ` [PATCH v27 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2020-01-09 8:32 ` Stephan Müller 2020-01-09 8:33 ` [PATCH v27 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2020-01-09 8:33 ` Stephan Müller 2020-01-09 8:33 ` [PATCH v27 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2020-01-09 8:33 ` Stephan Müller 2020-01-09 8:34 ` [PATCH v27 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2020-01-09 8:34 ` Stephan Müller 2020-01-10 0:24 ` Randy Dunlap 2020-01-10 0:24 ` Randy Dunlap 2020-01-10 7:45 ` Stephan Mueller 2020-01-10 7:45 ` Stephan Mueller 2020-01-09 8:34 ` [PATCH v27 10/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2020-01-09 8:34 ` Stephan Müller 2020-01-10 0:20 ` Randy Dunlap 2020-01-10 0:20 ` Randy Dunlap 2020-01-10 8:27 ` Stephan Mueller 2020-01-10 8:27 ` Stephan Mueller 2020-01-09 8:35 ` [PATCH v27 11/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2020-01-09 8:35 ` Stephan Müller 2020-01-09 8:35 ` [PATCH v27 12/12] LRNG - add power-on and runtime self-tests Stephan Müller 2020-01-09 8:35 ` Stephan Müller 2020-01-10 0:22 ` Randy Dunlap 2020-01-10 0:22 ` Randy Dunlap 2020-01-10 7:48 ` Stephan Mueller 2020-01-10 7:48 ` Stephan Mueller 2020-01-13 10:39 ` Dan Carpenter 2020-01-13 10:39 ` Dan Carpenter 2020-01-13 10:39 ` Dan Carpenter 2020-01-13 10:39 ` Dan Carpenter 2020-01-13 10:46 ` Stephan Mueller 2020-01-13 10:46 ` Stephan Mueller 2020-01-13 10:46 ` Stephan Mueller 2020-01-15 10:31 ` [PATCH v28 00/12] /dev/random - a new approach with full SP800-90B Stephan Müller 2020-01-15 10:31 ` Stephan Müller 2020-01-15 10:31 ` [PATCH v28 01/12] Linux Random Number Generator Stephan Müller 2020-01-15 10:31 ` Stephan Müller 2020-01-16 0:11 ` Randy Dunlap 2020-01-16 0:11 ` Randy Dunlap 2020-01-16 7:22 ` Stephan Mueller 2020-01-16 7:22 ` Stephan Mueller 2020-01-15 10:32 ` [PATCH v28 02/12] LRNG - allocate one DRNG instance per NUMA node Stephan Müller 2020-01-15 10:32 ` Stephan Müller 2020-01-15 10:32 ` [PATCH v28 03/12] LRNG - sysctls and /proc interface Stephan Müller 2020-01-15 10:32 ` Stephan Müller 2020-01-15 10:32 ` [PATCH v28 04/12] LRNG - add switchable DRNG support Stephan Müller 2020-01-15 10:32 ` Stephan Müller 2020-01-15 10:33 ` [PATCH v28 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2020-01-15 10:33 ` Stephan Müller 2020-01-15 10:33 ` [PATCH v28 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2020-01-15 10:33 ` Stephan Müller 2020-01-16 0:14 ` Randy Dunlap 2020-01-16 0:14 ` Randy Dunlap 2020-01-16 6:55 ` Stephan Mueller 2020-01-16 6:55 ` Stephan Mueller 2020-01-15 10:34 ` [PATCH v28 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2020-01-15 10:34 ` Stephan Müller 2020-01-16 0:15 ` Randy Dunlap 2020-01-16 0:15 ` Randy Dunlap 2020-01-16 6:54 ` Stephan Mueller 2020-01-16 6:54 ` Stephan Mueller 2020-01-15 10:34 ` [PATCH v28 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2020-01-15 10:34 ` Stephan Müller 2020-01-15 10:34 ` [PATCH v28 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2020-01-15 10:34 ` Stephan Müller 2020-01-16 0:17 ` Randy Dunlap 2020-01-16 0:17 ` Randy Dunlap 2020-01-16 6:51 ` Stephan Mueller 2020-01-16 6:51 ` Stephan Mueller 2020-01-15 10:35 ` [PATCH v28 10/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2020-01-15 10:35 ` Stephan Müller 2020-01-15 10:35 ` [PATCH v28 11/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2020-01-15 10:35 ` Stephan Müller 2020-01-16 0:18 ` Randy Dunlap 2020-01-16 0:18 ` Randy Dunlap 2020-01-16 6:43 ` Stephan Mueller 2020-01-16 6:43 ` Stephan Mueller 2020-01-16 6:48 ` Randy Dunlap 2020-01-16 6:48 ` Randy Dunlap 2020-01-16 6:52 ` Stephan Mueller 2020-01-16 6:52 ` Stephan Mueller 2020-01-15 10:36 ` [PATCH v28 12/12] LRNG - add power-on and runtime self-tests Stephan Müller 2020-01-15 10:36 ` Stephan Müller 2020-01-19 21:12 ` [PATCH v29 00/12] /dev/random - a new approach with full SP800-90B Stephan Müller 2020-01-19 21:12 ` Stephan Müller 2020-01-19 21:13 ` [PATCH v29 01/12] Linux Random Number Generator Stephan Müller 2020-01-19 21:13 ` Stephan Müller 2020-01-19 21:13 ` [PATCH v29 02/12] LRNG - allocate one DRNG instance per NUMA node Stephan Müller 2020-01-19 21:13 ` Stephan Müller 2020-01-19 21:14 ` [PATCH v29 03/12] LRNG - sysctls and /proc interface Stephan Müller 2020-01-19 21:14 ` Stephan Müller 2020-01-19 21:14 ` [PATCH v29 04/12] LRNG - add switchable DRNG support Stephan Müller 2020-01-19 21:14 ` Stephan Müller 2020-01-19 21:15 ` [PATCH v29 05/12] crypto: DRBG - externalize DRBG functions for LRNG Stephan Müller 2020-01-19 21:15 ` Stephan Müller 2020-01-19 21:16 ` [PATCH v29 06/12] LRNG - add SP800-90A DRBG extension Stephan Müller 2020-01-19 21:16 ` Stephan Müller 2020-01-19 21:16 ` [PATCH v29 07/12] LRNG - add kernel crypto API PRNG extension Stephan Müller 2020-01-19 21:16 ` Stephan Müller 2020-01-19 21:17 ` [PATCH v29 08/12] crypto: provide access to a static Jitter RNG state Stephan Müller 2020-01-19 21:17 ` Stephan Müller 2020-01-19 21:18 ` [PATCH v29 09/12] LRNG - add Jitter RNG fast noise source Stephan Müller 2020-01-19 21:18 ` Stephan Müller 2020-01-19 21:18 ` [PATCH v29 10/12] LRNG - add SP800-90B compliant health tests Stephan Müller 2020-01-19 21:18 ` Stephan Müller 2020-01-19 21:19 ` [PATCH v29 11/12] LRNG - add interface for gathering of raw entropy Stephan Müller 2020-01-19 21:19 ` Stephan Müller 2020-01-19 21:20 ` [PATCH v29 12/12] LRNG - add power-on and runtime self-tests Stephan Müller 2020-01-19 21:20 ` 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=3610406.x8mDjznOIz@positron.chronox.de \ --to=smueller@chronox.de \ --cc=adilger.kernel@dilger.ca \ --cc=arnd@arndb.de \ --cc=darwish.07@gmail.com \ --cc=draht@schaltsekun.de \ --cc=ebiederm@xmission.com \ --cc=fweimer@redhat.com \ --cc=gregkh@linuxfoundation.org \ --cc=jack@suse.cz \ --cc=linux-api@vger.kernel.org \ --cc=linux-crypto@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=luto@kernel.org \ --cc=marcelo.cerri@canonical.com \ --cc=matthias.peter@bsi.bund.de \ --cc=mccann@jhu.edu \ --cc=mjg59@srcf.ucam.org \ --cc=mzxreary@0pointer.de \ --cc=nhorman@redhat.com \ --cc=nstange@suse.de \ --cc=patrakov@gmail.com \ --cc=rstrode@redhat.com \ --cc=tytso@mit.edu \ --cc=vcaputo@pengaru.com \ --cc=w@1wt.eu \ --cc=zachary@baishancloud.com \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.