linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Denys Vlasenko <dvlasenk@redhat.com>
To: "Theodore Ts'o" <tytso@mit.edu>,
	Denys Vlasenko <vda.linux@googlemail.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"H. Peter Anvin" <hpa@linux.intel.com>
Subject: Re: random: /dev/random often returns short reads
Date: Tue, 17 Jan 2017 18:34:21 +0100	[thread overview]
Message-ID: <09f2ce2d-3c84-bb12-560c-3208691d2c55@redhat.com> (raw)
In-Reply-To: <20170117171539.dadciiz2kfjtqrfk@thunk.org>



On 01/17/2017 06:15 PM, Theodore Ts'o wrote:
> On Tue, Jan 17, 2017 at 09:21:31AM +0100, Denys Vlasenko wrote:
>>> If someone wants to send me a patch, I'll happily take a look at it,
>>
>> Will something along these lines be accepted?
>
> The problem is that this won't work.  In the cases that we're talking
> about, the entropy counter in the secondary pool is not zero, but
> close to zero, we'll still have short reads.  And that's going to
> happen a fair amount of the time.
>
> Perhaps the best *hacky* solution would be to say, ok if the entropy
> count is less than some threshold, don't use the correct entropy
> calculation, but rather assume that all of the new bits won't land on
> top of existing entropy bits.

IOW, something like this:

--- a/drivers/char/random.c
+++ b/drivers/char/random.c
@@ -653,6 +653,9 @@ static void credit_entropy_bits(struct
entropy_store *r, int nbits)
         if (nfrac < 0) {
                 /* Debit */
                 entropy_count += nfrac;
+       } else if (entropy_count < ((8 * 8) << ENTROPY_SHIFT)) {
+               /* Credit, and the pool is almost empty */
+               entropy_count += nfrac;
         } else {
                 /*
                  * Credit: we have to account for the possibility of
                  * overwriting already present entropy.  Even in the

Want the patch? If yes, what name of the constant you prefer? How about

/* Has less than 8 bytes */
#define ALMOST_EMPTY_POOL_frac   ((8 * 8) << ENTROPY_SHIFT)

  reply	other threads:[~2017-01-17 17:59 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-16 18:50 random: /dev/random often returns short reads Denys Vlasenko
2017-01-16 18:52 ` Denys Vlasenko
2017-01-17  4:36 ` Theodore Ts'o
2017-01-17  8:21   ` Denys Vlasenko
2017-01-17 17:15     ` Theodore Ts'o
2017-01-17 17:34       ` Denys Vlasenko [this message]
2017-01-17 22:29         ` H. Peter Anvin
2017-01-17 23:41           ` Theodore Ts'o
2017-01-18  1:54             ` H. Peter Anvin
2017-01-18 15:44           ` Denys Vlasenko
2017-01-18 18:07             ` Theodore Ts'o
2017-01-19 21:45               ` Denys Vlasenko
2017-01-20  3:17                 ` H. Peter Anvin
2017-02-15 17:55               ` Denys Vlasenko

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=09f2ce2d-3c84-bb12-560c-3208691d2c55@redhat.com \
    --to=dvlasenk@redhat.com \
    --cc=hpa@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tytso@mit.edu \
    --cc=vda.linux@googlemail.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 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).