Thread (2 messages) 2 messages, 2 authors, 2022-12-05

Re: [PATCH v11 3/4] random: introduce generic vDSO getrandom() implementation

From: Florian Weimer <hidden>
Date: 2022-12-05 18:58:08
Also in: linux-crypto, linux-patches, lkml

* Jason A. Donenfeld:
+retry_generation:
+	/*
+	 * @rng_info->generation must always be read here, as it serializes @state->key with the
+	 * kernel's RNG reseeding schedule.
+	 */
+	current_generation = READ_ONCE(rng_info->generation);
+		if (unlikely(READ_ONCE(state->generation) != READ_ONCE(rng_info-
I'm pretty sure you need some sort of barrier here.  We have a similar
TM-lite construct in glibc ld.so for locating link maps by address, and
there the compiler performed reordering.

  _dl_find_object miscompilation on powerpc64le
  <https://sourceware.org/bugzilla/show_bug.cgi?id=28745>

I'm not familiar with READ_ONCE, but Documentation/atomic_t.txt suggests
it's a “regular LOAD”, and include/asm-generic/rwonce.h concurs.
Likewise, the signal safety mechanism needs compiler barriers (signal
fences).

I'm also not sure how READ_ONCE realizes atomic 64-bit reads on 32-bit
platforms.  i386 can do them in user space via the FPU worst-case (if
the control word hasn't been corrupted).  CMPXCHG8B is not applicable
here because it's a read-only mapping.  Maybe add a comment at least
about that “strong prevailing wind”?

Thanks,
Florian
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help