public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Alejandro Colomar <alx.manpages@gmail.com>
To: "Cristian Rodríguez" <crrodriguez@opensuse.org>
Cc: Jonny Grant <jg@jguk.org>, Florian Weimer <fweimer@redhat.com>,
	Michael Kerrisk <mtk.manpages@gmail.com>,
	linux-man <linux-man@vger.kernel.org>,
	GNU C Library <libc-alpha@sourceware.org>
Subject: Re: [PATCH] Add example to rand.3
Date: Wed, 28 Dec 2022 00:33:13 +0100	[thread overview]
Message-ID: <8bd20ea2-2031-173a-5b09-f6a74473ef8f@gmail.com> (raw)
In-Reply-To: <CAPBLoAeLFYtzVP7ZqkThdT4Pan9aoW=YPqHDM9Wbh6Fn+tki7w@mail.gmail.com>


[-- Attachment #1.1: Type: text/plain, Size: 2044 bytes --]

Hi Christian,

On 12/27/22 14:07, Cristian Rodríguez wrote:
> On Mon, Dec 26, 2022 at 7:29 PM Alejandro Colomar via Libc-alpha
> <libc-alpha@sourceware.org> wrote:
>>
>> Hi Jonny,
>>
> l it several times per second, you'll
>> find that it only changes the seed every second.  There are better ways to
>> produce a good seed.
>>
>> However, I prefer suggesting arc4random() rather than workarounding rand(3) to
>> get good results.
>>
>> Florian, did you already merge arc4random() to glibc?
> 
> arc4random is already on libc.. now to make it a replacement for
> everything random  one has to hope for
> https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git/log/?h=vdso
> to be merged into the mainline kernel.
> That will make it as fast as possible and really,really cheap to call.

Great!  When that is merged, please ping me.

If someone wants to contribute a manual page for the arc4random family of 
functions, please speak; otherwise I can start writing something.

> Now it is just a wrapper that calls getrandom syscall.
> 
> WRT the rand() example suggestion..it is bad.. The only addition I
> will make to this man page is strongly discouraging its use.
> Suggesting to use ar4random if available or one of
> https://prng.di.unimi.it/ PRNG if not for crypto.

The only problem with arc4random() is the lack of repeatability.  When testing a 
program with random data, you'll need repeatable results.  For that, rand(3) 
Just Works.  When you want unpredictable results, you just seed it with some 
really random value, and you're fine.  You need to be careful to not introduce 
bias, but there's nothing better in libc.  It would be nice if libc provided a 
rand_uniform(3) variant of rand(3), BTW.

So, rand(3) is not to be deprecated, although it must be used with care.  I 
would recommend the following, per Jonny's report:

     if (repeatable)
         srand(seed)
     else
         srand(arc4random());

Cheers,

Alex

-- 
<http://www.alejandro-colomar.es/>

[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2022-12-27 23:33 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <105835f5-359c-2646-f609-e73459ee2d3b@jguk.org>
2022-12-26 22:29 ` Alejandro Colomar
2022-12-27 13:07   ` Cristian Rodríguez
2022-12-27 23:33     ` Alejandro Colomar [this message]
2022-12-28  0:00       ` G. Branden Robinson
2022-12-28  0:41         ` Alejandro Colomar
2022-12-28 12:21           ` Cristian Rodríguez
2022-12-30 18:15             ` Joseph Myers
2022-12-30 18:20               ` Alejandro Colomar
2022-12-30 18:50                 ` Joseph Myers
2022-12-30 18:58                   ` Alejandro Colomar
2022-12-30 19:11               ` Cristian Rodríguez
2022-12-30 21:08                 ` Joseph Myers
2022-12-30 21:15                   ` Internal organization of "the implementation" (was: [PATCH] Add example to rand.3) Alejandro Colomar
2022-12-30 21:50                     ` Joseph Myers
2022-12-27 21:37   ` [PATCH] Add example to rand.3 Jonny Grant
2022-12-27 23:11     ` Alejandro Colomar
2022-12-28 20:51       ` Jonny Grant
2022-12-28 20:56         ` Alejandro Colomar
2022-12-28 21:03           ` Alejandro Colomar
2022-12-28 21:04             ` Alejandro Colomar
2022-12-28 21:25               ` Jonny Grant
2022-12-28 21:32                 ` Alejandro Colomar
2022-12-28 21:04           ` Cristian Rodríguez
2022-12-28 21:11             ` Alejandro Colomar
2022-12-28 21:19               ` Jonny Grant
2022-12-28 21:18             ` Alejandro Colomar

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=8bd20ea2-2031-173a-5b09-f6a74473ef8f@gmail.com \
    --to=alx.manpages@gmail.com \
    --cc=crrodriguez@opensuse.org \
    --cc=fweimer@redhat.com \
    --cc=jg@jguk.org \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-man@vger.kernel.org \
    --cc=mtk.manpages@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).