From: Jason Cooper <jason@lakedaemon.net>
To: Sandy Harris <sandyinchina@gmail.com>
Cc: "Theodore Ts\\'o" <tytso@mit.edu>,
"H. Peter Anvin" <hpa@zytor.com>, John Denker <jsd@av8n.com>,
linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org
Subject: Re: [PATCH 3/7] Initialise pools randomly if CONFIG_RANDOM_INIT=y
Date: Sat, 7 Nov 2015 16:54:52 +0000 [thread overview]
Message-ID: <20151107165452.GA29227@io.lakedaemon.net> (raw)
In-Reply-To: <1446906642-19372-3-git-send-email-sandyinchina@gmail.com>
On Sat, Nov 07, 2015 at 09:30:38AM -0500, Sandy Harris wrote:
> Signed-off-by: Sandy Harris <sandyinchina@gmail.com>
> ---
> drivers/char/random.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
> 1 file changed, 46 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/char/random.c b/drivers/char/random.c
> index d0da5d8..e222e0f 100644
> --- a/drivers/char/random.c
> +++ b/drivers/char/random.c
> @@ -231,7 +231,7 @@
> * not be attributed to the Phil, Colin, or any of authors of PGP.
> *
> * Further background information on this topic may be obtained from
> - * RFC 1750, "Randomness Recommendations for Security", by Donald
> + * RFC 4086, "Randomness Requirements for Security", by Donald
I'm pretty sure you already sent this hunk separately. Please remove it
from the next version.
thx,
Jason.
> * Eastlake, Steve Crocker, and Jeff Schiller.
> */
>
> @@ -275,13 +275,19 @@
> /*
> * Configuration information
> */
> +#ifdef CONFIG_RANDOM_INIT
> +
> +#include <generated/random_init.h>
> +
> +#else
> #define INPUT_POOL_SHIFT 12
> #define INPUT_POOL_WORDS (1 << (INPUT_POOL_SHIFT-5))
> #define OUTPUT_POOL_SHIFT 10
> #define OUTPUT_POOL_WORDS (1 << (OUTPUT_POOL_SHIFT-5))
> -#define SEC_XFER_SIZE 512
> -#define EXTRACT_SIZE 10
> +#endif
>
> +#define EXTRACT_SIZE 10
> +#define SEC_XFER_SIZE 512
> #define DEBUG_RANDOM_BOOT 0
>
> #define LONGS(x) (((x) + sizeof(unsigned long) - 1)/sizeof(unsigned long))
> @@ -296,6 +302,27 @@
> #define ENTROPY_SHIFT 3
> #define ENTROPY_BITS(r) ((r)->entropy_count >> ENTROPY_SHIFT)
>
> +/* sanity checks */
> +
> +#if ((ENTROPY_SHIFT+INPUT_POOL_SHIFT) >= 16)
> +#ifndef CONFIG_64BIT
> +#error *_SHIFT values problematic for credit_entropy_bits()
> +#endif
> +#endif
> +
> +#if ((INPUT_POOL_WORDS%16) || (OUTPUT_POOL_WORDS%16))
> +#error Pool size not divisible by 16, which code assumes
> +#endif
> +
> +#if (INPUT_POOL_WORDS < 32)
> +#error Input pool less than a quarter of default size
> +#endif
> +
> +#if (INPUT_POOL_WORDS < OUTPUT_POOL_WORDS)
> +#error Strange configuration, input pool smalller than output
> +#endif
> +
> +
> /*
> * The minimum number of bits of entropy before we wake up a read on
> * /dev/random. Should be enough to do a significant reseed.
> @@ -442,16 +469,23 @@ struct entropy_store {
> };
>
> static void push_to_pool(struct work_struct *work);
> +
> +#ifndef CONFIG_RANDOM_INIT
> static __u32 input_pool_data[INPUT_POOL_WORDS];
> static __u32 blocking_pool_data[OUTPUT_POOL_WORDS];
> static __u32 nonblocking_pool_data[OUTPUT_POOL_WORDS];
> +#endif
>
> static struct entropy_store input_pool = {
> .poolinfo = &poolinfo_table[0],
> .name = "input",
> .limit = 1,
> .lock = __SPIN_LOCK_UNLOCKED(input_pool.lock),
> - .pool = input_pool_data
> +#ifdef CONFIG_RANDOM_INIT
> + .pool = pools,
> +#else
> + .pool = input_pool_data,
> +#endif
> };
>
> static struct entropy_store blocking_pool = {
> @@ -460,7 +494,11 @@ static struct entropy_store blocking_pool = {
> .limit = 1,
> .pull = &input_pool,
> .lock = __SPIN_LOCK_UNLOCKED(blocking_pool.lock),
> +#ifdef CONFIG_RANDOM_INIT
> + .pool = pools + INPUT_POOL_WORDS,
> +#else
> .pool = blocking_pool_data,
> +#endif
> .push_work = __WORK_INITIALIZER(blocking_pool.push_work,
> push_to_pool),
> };
> @@ -470,7 +508,11 @@ static struct entropy_store nonblocking_pool = {
> .name = "nonblocking",
> .pull = &input_pool,
> .lock = __SPIN_LOCK_UNLOCKED(nonblocking_pool.lock),
> +#ifdef CONFIG_RANDOM_INIT
> + .pool = pools + INPUT_POOL_WORDS + OUTPUT_POOL_WORDS,
> +#else
> .pool = nonblocking_pool_data,
> +#endif
> .push_work = __WORK_INITIALIZER(nonblocking_pool.push_work,
> push_to_pool),
> };
> --
> 2.5.0
>
next prev parent reply other threads:[~2015-11-07 17:11 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-11-07 14:30 [PATCH 1/7] A couple of generated files Sandy Harris
2015-11-07 14:30 ` [PATCH 2/7] Two new CONFIG options for the random(4) driver Sandy Harris
2015-11-07 14:30 ` [PATCH 3/7] Initialise pools randomly if CONFIG_RANDOM_INIT=y Sandy Harris
2015-11-07 16:54 ` Jason Cooper [this message]
2015-11-07 17:08 ` kbuild test robot
2015-11-07 14:30 ` [PATCH 4/7] Different version of driver using hash from AES-GCM Compiled if CONFIG_RANDOM_GCM=y Sandy Harris
2015-11-07 14:30 ` [PATCH 5/7] Conditionals for CONFIG_RANDOM_INIT and CONFIG_RANDOM_GCM Sandy Harris
2015-11-07 17:11 ` kbuild test robot
2015-11-07 14:30 ` [PATCH 6/7] Produces generated/random_init.h for random driver Sandy Harris
2015-11-07 14:30 ` [PATCH 7/7] Create generated/random_init.h, used by " Sandy Harris
2015-11-07 16:00 ` kbuild test robot
2015-11-07 21:18 ` kbuild test robot
2015-11-08 11:14 ` kbuild test robot
2015-11-07 16:53 ` [PATCH 1/7] A couple of generated files Jason Cooper
2015-11-07 18:50 ` Sandy Harris
2016-03-02 3:15 ` Sandy Harris
2015-11-07 17:01 ` Jason Cooper
2015-11-07 17:50 ` Sandy Harris
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=20151107165452.GA29227@io.lakedaemon.net \
--to=jason@lakedaemon.net \
--cc=hpa@zytor.com \
--cc=jsd@av8n.com \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=sandyinchina@gmail.com \
--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).