From: Thomas Gleixner <tglx@linutronix.de>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>,
linux-kernel@vger.kernel.org, patches@lists.linux.dev
Cc: "Jason A. Donenfeld" <Jason@zx2c4.com>,
linux-crypto@vger.kernel.org, linux-api@vger.kernel.org,
x86@kernel.org, Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>,
Carlos O'Donell <carlos@redhat.com>,
Florian Weimer <fweimer@redhat.com>,
Arnd Bergmann <arnd@arndb.de>, Jann Horn <jannh@google.com>,
Christian Brauner <brauner@kernel.org>,
David Hildenbrand <dhildenb@redhat.com>
Subject: Re: [PATCH v16 4/5] random: introduce generic vDSO getrandom() implementation
Date: Thu, 06 Jun 2024 00:10:00 +0200 [thread overview]
Message-ID: <87v82n2g93.ffs@tglx> (raw)
In-Reply-To: <874ja73xx7.ffs@tglx>
Jason!
On Wed, Jun 05 2024 at 23:03, Thomas Gleixner wrote:
> On Tue, May 28 2024 at 14:19, Jason A. Donenfeld wrote:
>> + */
>> +#ifdef CONFIG_64BIT
>> +typedef u64 vdso_kernel_ulong;
>> +#else
>> +typedef u32 vdso_kernel_ulong;
>> +#endif
>
> All of this is pointless because if a 32-bit application runs on a
> 64-bit kernel it has to use the 64-bit 'generation'. So why on earth do
> we need magic here for a 32-bit kernel?
>
> Just use u64 for both and spare all this voodoo. We're seriously not
> "optimizing" for 32-bit kernels.
All what happens on a 32-bit kernel is that the RNG will store the
unsigned long (32bit) generation into a 64bit variable:
smp_store_release(&_vdso_rng_data.generation, next_gen + 1);
As the upper 32bit are always zero, there is no issue vs. load store
tearing at all. So there is zero benefit for this aside of slightly
"better" user space code when running on a 32-bit kernel. Who cares?
While staring at this I wonder where the corresponding
smp_load_acquire() is. I haven't found one in the VDSO code.
READ_ONCE() is only equivalent on a few architectures.
But, what does that store_release() buy at all? There is zero ordering
vs. anything in the kernel and neither against user space.
If that smp_store_release() serves a purpose then it really has to be
extensively documented especially as the kernel itself simply uses
WRITE/READ_ONCE() for base_rng.generation.
Thanks,
tglx
next prev parent reply other threads:[~2024-06-05 22:10 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-28 12:19 [PATCH v16 0/5] implement getrandom() in vDSO Jason A. Donenfeld
2024-05-28 12:19 ` [PATCH v16 1/5] mm: add VM_DROPPABLE for designating always lazily freeable mappings Jason A. Donenfeld
2024-05-28 20:41 ` Frank van der Linden
2024-05-28 20:51 ` Jason A. Donenfeld
2024-05-31 10:48 ` Jann Horn
2024-05-31 12:13 ` Jason A. Donenfeld
2024-05-31 13:00 ` Jann Horn
2024-06-07 14:35 ` Jason A. Donenfeld
2024-06-07 15:12 ` Jann Horn
2024-06-07 15:50 ` Jann Horn
2024-06-10 12:00 ` Michal Hocko
2024-06-14 18:35 ` Jason A. Donenfeld
2024-06-07 18:40 ` Andy Lutomirski
2024-05-28 12:19 ` [PATCH v16 2/5] random: add vgetrandom_alloc() syscall Jason A. Donenfeld
2024-05-31 3:59 ` Eric Biggers
2024-06-01 10:56 ` Jason A. Donenfeld
2024-06-04 17:22 ` Eric Biggers
2024-06-07 14:41 ` Jason A. Donenfeld
2024-06-07 14:45 ` Jason A. Donenfeld
2024-05-28 12:19 ` [PATCH v16 3/5] arch: allocate vgetrandom_alloc() syscall number Jason A. Donenfeld
2024-05-28 13:08 ` Geert Uytterhoeven
2024-05-28 13:10 ` Jason A. Donenfeld
2024-05-28 13:28 ` Jason A. Donenfeld
2024-05-31 2:26 ` Eric Biggers
2024-06-01 10:58 ` Jason A. Donenfeld
2024-05-28 12:19 ` [PATCH v16 4/5] random: introduce generic vDSO getrandom() implementation Jason A. Donenfeld
2024-05-31 19:12 ` Randy Dunlap
2024-05-31 19:15 ` Randy Dunlap
2024-06-07 15:37 ` Jason A. Donenfeld
2024-05-31 23:06 ` Andy Lutomirski
2024-06-07 15:52 ` Jason A. Donenfeld
2024-06-05 21:03 ` Thomas Gleixner
2024-06-05 22:10 ` Thomas Gleixner [this message]
2024-06-07 15:59 ` Jason A. Donenfeld
2024-06-07 16:32 ` Jason A. Donenfeld
2024-06-07 18:39 ` Andy Lutomirski
2024-05-28 12:19 ` [PATCH v16 5/5] x86: vdso: Wire up getrandom() vDSO implementation Jason A. Donenfeld
2024-05-31 3:38 ` Eric Biggers
2024-06-07 15:27 ` Jason A. Donenfeld
2024-05-31 19:16 ` Randy Dunlap
2024-06-07 15:30 ` Jason A. Donenfeld
2024-06-05 21:41 ` Thomas Gleixner
2024-06-07 15:32 ` Jason A. Donenfeld
2024-05-28 14:46 ` [PATCH v16 0/5] implement getrandom() in vDSO Jason A. Donenfeld
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=87v82n2g93.ffs@tglx \
--to=tglx@linutronix.de \
--cc=Jason@zx2c4.com \
--cc=adhemerval.zanella@linaro.org \
--cc=arnd@arndb.de \
--cc=brauner@kernel.org \
--cc=carlos@redhat.com \
--cc=dhildenb@redhat.com \
--cc=fweimer@redhat.com \
--cc=gregkh@linuxfoundation.org \
--cc=jannh@google.com \
--cc=linux-api@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=patches@lists.linux.dev \
--cc=x86@kernel.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 NNTP newsgroup(s).