public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: Florian Weimer <fweimer@redhat.com>
To: Adhemerval Zanella via Libc-alpha <libc-alpha@sourceware.org>
Subject: Re: [PATCH v6 09/10] stdlib: Add TLS optimization to arc4random
Date: Tue, 28 Jun 2022 14:19:32 +0200	[thread overview]
Message-ID: <878rphf0a3.fsf@oldenburg.str.redhat.com> (raw)
In-Reply-To: <20220518191424.3630729-10-adhemerval.zanella@linaro.org> (Adhemerval Zanella via Libc-alpha's message of "Wed, 18 May 2022 16:14:23 -0300")

* Adhemerval Zanella via Libc-alpha:

> The arc4random state is moved to TCB, so there is no allocation
> failure.  It adds about 592 bytes struct pthread.
>
> Now that the state is thread private within a shared struct, the
>  MADV_WIPEONFORK usage is removed.  The cipher state reset is done
>  solely by the atfork internal handler.
>
> The state is also cleared on thread exit iff it was initialized (so if
> arc4random is not called it is not touched).
>
> Although it is lock-free, arc4random is still not async-signal-safe
> (the per thread state is not updated
>
> On x86_64 using AVX2 it shows a slight better performance:

Should this be merged with the first patch?

Can we allocate the memory dynamically, and fall back to direct kernel
randomness based on allocation failure?

Those 512 bytes of TCB space could be better used for increasing the
static TLS reserve, I think.
> diff --git a/sysdeps/unix/sysv/linux/tls-internal.c b/sysdeps/unix/sysv/linux/tls-internal.c
> index 6e25b021ab..75bc4b3b48 100644
> --- a/sysdeps/unix/sysv/linux/tls-internal.c
> +++ b/sysdeps/unix/sysv/linux/tls-internal.c
> @@ -1 +1,32 @@

> +void
> +__glibc_tls_internal_free (void)
> +{
> +  struct pthread *self = THREAD_SELF;
> +  free (self->tls_state.strsignal_buf);
> +  free (self->tls_state.strerror_l_buf);
> +
> +  if (self->tls_state.rnd_state.count != -1)
> +    /* Clear any lingering random state prior so if the thread stack is
> +       cached it won't leak any data.  */
> +    memset (&self->tls_state.rnd_state, 0, sizeof self->tls_state.rnd_state);
> +}

I think this should be explicit_bzero (currently for documentation
purposes only).

Thanks,
Florian


  reply	other threads:[~2022-06-28 12:19 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-05-18 19:14 [PATCH v6 00/10] Add arc4random support Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 01/10] stdlib: Add arc4random, arc4random_buf, and arc4random_uniform (BZ #4417) Adhemerval Zanella
2022-06-02  9:44   ` Yann Droneaud
2022-06-10 17:26     ` Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 02/10] stdlib: Add arc4random tests Adhemerval Zanella
2022-06-28 11:59   ` Florian Weimer
2022-06-28 16:58     ` Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 03/10] benchtests: Add arc4random benchtest Adhemerval Zanella
2022-06-28 12:01   ` Florian Weimer
2022-06-28 17:06     ` Adhemerval Zanella
2022-06-28 17:13   ` Noah Goldstein
2022-06-28 17:14     ` Noah Goldstein
2022-06-28 17:22       ` Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 04/10] aarch64: Add optimized chacha20 Adhemerval Zanella
2022-06-28 12:03   ` Florian Weimer
2022-06-28 17:39     ` Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 05/10] x86: Add SSE2 " Adhemerval Zanella
2022-05-18 20:44   ` Noah Goldstein
2022-05-18 19:14 ` [PATCH v6 06/10] x86: Add AVX2 " Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 07/10] powerpc64: Add " Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 08/10] s390x: " Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 09/10] stdlib: Add TLS optimization to arc4random Adhemerval Zanella
2022-06-28 12:19   ` Florian Weimer [this message]
2022-06-28 19:45     ` Adhemerval Zanella
2022-05-18 19:14 ` [PATCH v6 10/10] manual: Add documentation for arc4random functions Adhemerval Zanella
2022-06-28 12:09   ` Florian Weimer
2022-06-28 19:15     ` 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=878rphf0a3.fsf@oldenburg.str.redhat.com \
    --to=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    /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).