mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Denys Vlasenko <dvlasenk@redhat.com>
To: "H. Peter Anvin" <hpa@linux.intel.com>,
	"Theodore Ts'o" <tytso@mit.edu>,
	Denys Vlasenko <vda.linux@googlemail.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: random: /dev/random often returns short reads
Date: Wed, 18 Jan 2017 16:44:54 +0100	[thread overview]
Message-ID: <2bc270ee-9f42-b4b3-a347-3a7a758d5d1f@redhat.com> (raw)
In-Reply-To: <71338f5a-83e3-4316-845d-8cdea735df0f@linux.intel.com>

On 01/17/2017 11:29 PM, H. Peter Anvin wrote:
> On 01/17/17 09:34, Denys Vlasenko wrote:
>>
>>
>> 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
>>
>
> This seems very wrong.  The whole point is that we keep it conservative
> -- always less than or equal to the correct number.

In this case, what code does is it returns fewer bytes,
even though *it has enough random bytes to return the full request*.

This happens because the patch which added more conservative
accounting, while containing technically correct accounting per se,
it  forgot to take in the account another part of the code
which was relying on the previous, simplistic logic
"if we add N random bytes to a pool, now it has +N random bytes".

In my opinion, it should have changed that part of code simultaneously
with introducing more conservative accounting.

  parent reply	other threads:[~2017-01-18 15:52 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-16 18:50 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
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 [this message]
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=2bc270ee-9f42-b4b3-a347-3a7a758d5d1f@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

all inboxes | Powered by JetHome®