All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jarod Wilson <jarod@redhat.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: linux-kernel@vger.kernel.org,
	Herbert Xu <herbert@gondor.hengli.com.au>,
	"David S. Miller" <davem@davemloft.net>,
	Matt Mackall <mpm@selenic.com>,
	linux-crypto@vger.kernel.org
Subject: Re: [PATCH] random: prime last_data value per fips requirements
Date: Tue, 6 Nov 2012 10:22:03 -0500	[thread overview]
Message-ID: <20121106152203.GA24076@redhat.com> (raw)
In-Reply-To: <20121106120523.GA2805@hmsreliant.think-freely.org>

On Tue, Nov 06, 2012 at 07:05:23AM -0500, Neil Horman wrote:
> On Mon, Nov 05, 2012 at 04:00:10PM -0500, Jarod Wilson wrote:
> > The value stored in last_data must be primed for FIPS 140-2 purposes. Upon
> > first use, either on system startup or after an RNDCLEARPOOL ioctl, we
> > need to take an initial random sample, store it internally in last_data,
> > then pass along the value after that to the requester, so that consistency
> > checks aren't being run against stale and possibly known data.
> > 
> > CC: Herbert Xu <herbert@gondor.apana.org.au>
> > CC: "David S. Miller" <davem@davemloft.net>
> > CC: Neil Horman <nhorman@tuxdriver.com>
> > CC: Matt Mackall <mpm@selenic.com>
> > CC: linux-crypto@vger.kernel.org
> > Signed-off-by: Jarod Wilson <jarod@redhat.com>
> > ---
> >  drivers/char/random.c |   11 +++++++++++
> >  1 files changed, 11 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/char/random.c b/drivers/char/random.c
> > index b86eae9..24d17b8 100644
> > --- a/drivers/char/random.c
> > +++ b/drivers/char/random.c
> > @@ -437,6 +437,7 @@ struct entropy_store {
> >  	int entropy_count;
> >  	int entropy_total;
> >  	unsigned int initialized:1;
> > +	bool last_data_init;
> >  	__u8 last_data[EXTRACT_SIZE];
> >  };
> >  
> > @@ -967,6 +968,15 @@ static ssize_t extract_entropy(struct entropy_store *r, void *buf,
> >  		if (fips_enabled) {
> >  			unsigned long flags;
> >  
> > +			/* prime last_data value if need be, per fips 140-2 */
> > +			if (!r->last_data_init) {
> > +				spin_lock_irqsave(&r->lock, flags);
> > +				memcpy(r->last_data, tmp, EXTRACT_SIZE);
> > +				r->last_data_init = true;
> > +				spin_unlock_irqrestore(&r->lock, flags);
> > +				continue;
> Continue?  Is that left over from earlier work?  Or did you have some other
> purpose in mind for it?

The continue takes you back to the top of the while loop for another
extract_buf() call, but continue could simply be replaced with another
extract_buf() call, so we don't have to restart the loop and check
last_data_init again. Otherwise, we're going to fail the memcmp and panic,
because tmp and r->last_data will be identical.

> Also, not that its in a hot path or anything, but it might be nice to
> consolodate this code such that you only lock and unlock r->flags once instead
> of twice here.

I thought about that, but figured it would be more trouble and possibly
more code to execute than it was worth in the normal case. But I can spin
up a v2 that tries to be a bit cleaner here.

-- 
Jarod Wilson
jarod@redhat.com

  reply	other threads:[~2012-11-06 15:22 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-05 21:00 [PATCH] random: prime last_data value per fips requirements Jarod Wilson
2012-11-06 12:05 ` Neil Horman
2012-11-06 15:22   ` Jarod Wilson [this message]
2012-11-06 15:35     ` [PATCH v2] " Jarod Wilson
2012-11-06 15:42       ` [PATCH v3] " Jarod Wilson
2012-11-06 16:12         ` Neil Horman
2012-11-08 12:20         ` 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=20121106152203.GA24076@redhat.com \
    --to=jarod@redhat.com \
    --cc=davem@davemloft.net \
    --cc=herbert@gondor.hengli.com.au \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpm@selenic.com \
    --cc=nhorman@tuxdriver.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: link
Be 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.