From: "Jason A. Donenfeld" <Jason@zx2c4.com>
To: libc-alpha@sourceware.org
Cc: "Adhemerval Zanella Netto" <adhemerval.zanella@linaro.org>,
"Florian Weimer" <fweimer@redhat.com>,
"Cristian Rodríguez" <crrodriguez@opensuse.org>,
"Paul Eggert" <eggert@cs.ucla.edu>,
"Mark Harris" <mark.hsj@gmail.com>,
"Eric Biggers" <ebiggers@kernel.org>,
linux-crypto@vger.kernel.org
Subject: Re: [PATCH v3] arc4random: simplify design for better safety
Date: Tue, 26 Jul 2022 13:11:06 +0200 [thread overview]
Message-ID: <Yt/LyuNnzfRRedvT@zx2c4.com> (raw)
In-Reply-To: <20220726110727.1079196-1-Jason@zx2c4.com>
As before, I'll paste the main function in question standalone so that
this is a bit easier to read for those not applying this to an actual
tree.
void
__arc4random_buf (void *p, size_t n)
{
static bool have_getrandom = true, seen_initialized = false;
int fd;
if (n == 0)
return;
for (;;)
{
ssize_t l;
if (!have_getrandom)
break;
l = __getrandom_nocancel (p, n, 0);
if (l > 0)
{
if ((size_t) l == n)
return; /* Done reading, success. */
p = (uint8_t *) p + l;
n -= l;
continue; /* Interrupted by a signal; keep going. */
}
else if (l == 0)
arc4random_getrandom_failure (); /* Weird, should never happen. */
else if (l == -EINTR)
continue; /* Interrupted by a signal; keep going. */
else if (l == -ENOSYS)
{
have_getrandom = false;
break; /* No syscall, so fallback to /dev/urandom. */
}
arc4random_getrandom_failure (); /* Unknown error, should never happen. */
}
if (!seen_initialized)
{
struct pollfd pfd = { .events = POLLIN };
pfd.fd = TEMP_FAILURE_RETRY (
__open64_nocancel ("/dev/random", O_RDONLY | O_CLOEXEC | O_NOCTTY));
if (pfd.fd < 0)
arc4random_getrandom_failure ();
if (TEMP_FAILURE_RETRY (__poll_nocancel (&pfd, 1, -1)) < 0)
arc4random_getrandom_failure ();
if (__close_nocancel (pfd.fd) < 0)
arc4random_getrandom_failure ();
seen_initialized = true;
}
fd = TEMP_FAILURE_RETRY (
__open64_nocancel ("/dev/urandom", O_RDONLY | O_CLOEXEC | O_NOCTTY));
if (fd < 0)
arc4random_getrandom_failure ();
do
{
ssize_t l = TEMP_FAILURE_RETRY (__read_nocancel (fd, p, n));
if (l <= 0)
arc4random_getrandom_failure ();
p = (uint8_t *) p + l;
n -= l;
}
while (n);
if (__close_nocancel (fd) < 0)
arc4random_getrandom_failure ();
}
next prev parent reply other threads:[~2022-07-26 11:11 UTC|newest]
Thread overview: 81+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <YtwgTySJyky0OcgG@zx2c4.com>
2022-07-23 16:25 ` arc4random - are you sure we want these? Jason A. Donenfeld
2022-07-23 17:18 ` Paul Eggert
2022-07-24 23:55 ` Jason A. Donenfeld
2022-07-25 20:31 ` Paul Eggert
2022-07-23 17:39 ` Adhemerval Zanella Netto
2022-07-23 22:54 ` Jason A. Donenfeld
2022-07-25 15:33 ` Rich Felker
2022-07-25 15:59 ` Adhemerval Zanella Netto
2022-07-25 17:41 ` Rich Felker
2022-07-25 16:18 ` Sandy Harris
2022-07-25 16:40 ` Florian Weimer
2022-07-25 16:49 ` Adhemerval Zanella Netto
2022-07-25 16:51 ` Jason A. Donenfeld
2022-07-25 17:44 ` Rich Felker
2022-07-25 18:33 ` Cristian Rodríguez
2022-07-25 18:49 ` Rich Felker
2022-07-27 1:54 ` Theodore Ts'o
2022-07-27 2:16 ` Rich Felker
2022-07-27 2:45 ` Theodore Ts'o
2022-07-27 11:34 ` Adhemerval Zanella Netto
2022-07-27 12:32 ` Theodore Ts'o
2022-07-27 12:49 ` Florian Weimer
2022-07-27 20:15 ` Theodore Ts'o
2022-07-27 21:59 ` Rich Felker
2022-07-28 0:30 ` Theodore Ts'o
2022-07-28 0:39 ` Cristian Rodríguez
2022-07-27 15:39 ` Rich Felker
2022-07-23 19:04 ` Cristian Rodríguez
2022-07-23 22:59 ` Jason A. Donenfeld
2022-07-24 16:23 ` Cristian Rodríguez
2022-07-24 21:57 ` Jason A. Donenfeld
2022-07-25 10:14 ` Florian Weimer
2022-07-25 10:11 ` Florian Weimer
2022-07-25 11:04 ` Jason A. Donenfeld
2022-07-25 12:39 ` Florian Weimer
2022-07-25 13:43 ` Jason A. Donenfeld
2022-07-25 13:58 ` Cristian Rodríguez
2022-07-25 16:06 ` Rich Felker
2022-07-25 16:43 ` Florian Weimer
2022-07-26 14:27 ` Overwrittting AT_RANDOM after use (was Re: arc4random - are you sure we want these?) Yann Droneaud
2022-07-26 14:35 ` arc4random - are you sure we want these? Yann Droneaud
2022-07-25 13:25 ` Jeffrey Walton
2022-07-25 13:48 ` Jason A. Donenfeld
2022-07-25 14:56 ` Rich Felker
2022-07-25 22:57 ` [PATCH] arc4random: simplify design for better safety Jason A. Donenfeld
2022-07-25 23:11 ` Jason A. Donenfeld
2022-07-25 23:28 ` [PATCH v2] " Jason A. Donenfeld
2022-07-25 23:59 ` Eric Biggers
2022-07-26 10:26 ` Jason A. Donenfeld
2022-07-26 1:10 ` Mark Harris
2022-07-26 10:41 ` Jason A. Donenfeld
2022-07-26 11:06 ` Florian Weimer
2022-07-26 16:51 ` Mark Harris
2022-07-26 18:42 ` Jason A. Donenfeld
2022-07-26 19:18 ` Adhemerval Zanella Netto
2022-07-26 19:24 ` Jason A. Donenfeld
2022-07-26 9:55 ` Florian Weimer
2022-07-26 11:04 ` Jason A. Donenfeld
2022-07-26 11:07 ` [PATCH v3] " Jason A. Donenfeld
2022-07-26 11:11 ` Jason A. Donenfeld [this message]
2022-07-26 11:12 ` [PATCH v2] " Florian Weimer
2022-07-26 11:20 ` Jason A. Donenfeld
2022-07-26 11:35 ` Adhemerval Zanella Netto
2022-07-26 11:33 ` Adhemerval Zanella Netto
2022-07-26 11:54 ` Jason A. Donenfeld
2022-07-26 12:08 ` Jason A. Donenfeld
2022-07-26 12:20 ` Jason A. Donenfeld
2022-07-26 12:34 ` Adhemerval Zanella Netto
2022-07-26 12:47 ` Jason A. Donenfeld
2022-07-26 13:11 ` Adhemerval Zanella Netto
2022-07-26 13:30 ` [PATCH v4] " Jason A. Donenfeld
2022-07-26 15:21 ` Yann Droneaud
2022-07-26 16:20 ` Adhemerval Zanella Netto
2022-07-26 18:36 ` Jason A. Donenfeld
2022-07-26 19:08 ` [PATCH v5] " Jason A. Donenfeld
2022-07-26 19:58 ` [PATCH v6] " Jason A. Donenfeld
2022-07-26 20:17 ` Adhemerval Zanella Netto
2022-07-26 20:56 ` Adhemerval Zanella Netto
2022-07-28 10:29 ` Szabolcs Nagy
2022-07-28 10:36 ` Szabolcs Nagy
2022-07-28 11:01 ` Adhemerval Zanella
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=Yt/LyuNnzfRRedvT@zx2c4.com \
--to=jason@zx2c4.com \
--cc=adhemerval.zanella@linaro.org \
--cc=crrodriguez@opensuse.org \
--cc=ebiggers@kernel.org \
--cc=eggert@cs.ucla.edu \
--cc=fweimer@redhat.com \
--cc=libc-alpha@sourceware.org \
--cc=linux-crypto@vger.kernel.org \
--cc=mark.hsj@gmail.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 read-only IMAP folder(s) and NNTP newsgroup(s).