Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 12 Oct 2020 10:42:15 +0000 (UTC)
From:      Alex Richardson <arichardson@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r366632 - head/lib/libc/gen
Message-ID:  <202010121042.09CAgFYw071433@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: arichardson
Date: Mon Oct 12 10:42:14 2020
New Revision: 366632
URL: https://svnweb.freebsd.org/changeset/base/366632

Log:
  Fix building on Linux/macOS after r366622
  
  We have to bootstrap arc4random.c, so guard the FenestrasX code to avoid
  using it on Linux/macOS.
  
  Reviewed By:	cem
  Differential Revision: https://reviews.freebsd.org/D26738

Modified:
  head/lib/libc/gen/arc4random.c
  head/lib/libc/gen/arc4random.h

Modified: head/lib/libc/gen/arc4random.c
==============================================================================
--- head/lib/libc/gen/arc4random.c	Mon Oct 12 09:34:50 2020	(r366631)
+++ head/lib/libc/gen/arc4random.c	Mon Oct 12 10:42:14 2020	(r366632)
@@ -46,6 +46,11 @@ __FBSDID("$FreeBSD$");
 
 #define CHACHA_EMBED
 #define KEYSTREAM_ONLY
+#if defined(__FreeBSD__)
+#define ARC4RANDOM_FXRNG 1
+#else
+#define ARC4RANDOM_FXRNG 0
+#endif
 #include "chacha.c"
 
 #define minimum(a, b) ((a) < (b) ? (a) : (b))

Modified: head/lib/libc/gen/arc4random.h
==============================================================================
--- head/lib/libc/gen/arc4random.h	Mon Oct 12 09:34:50 2020	(r366631)
+++ head/lib/libc/gen/arc4random.h	Mon Oct 12 10:42:14 2020	(r366632)
@@ -27,9 +27,11 @@
 #include <sys/elf.h>
 #include <sys/endian.h>
 #include <sys/mman.h>
+#if ARC4RANDOM_FXRNG != 0
 #include <sys/time.h>	/* for sys/vdso.h only. */
 #include <sys/vdso.h>
 #include <machine/atomic.h>
+#endif
 
 #include <err.h>
 #include <errno.h>
@@ -37,6 +39,7 @@
 #include <stdbool.h>
 #include <stdint.h>
 
+#if ARC4RANDOM_FXRNG != 0
 /*
  * The kernel root seed version is a 64-bit counter, but we truncate it to a
  * 32-bit value in userspace for the convenience of 32-bit platforms.  32-bit
@@ -51,6 +54,7 @@
  */
 #define	fxrng_load_acq_generation(x)	atomic_load_acq_32(x)
 static struct vdso_fxrng_generation_1 *vdso_fxrngp;
+#endif
 
 static pthread_mutex_t	arc4random_mtx = PTHREAD_MUTEX_INITIALIZER;
 #define	_ARC4_LOCK()						\
@@ -74,6 +78,7 @@ _getentropy_fail(void)
 static inline void
 _rs_initialize_fxrng(void)
 {
+#if ARC4RANDOM_FXRNG != 0
 	struct vdso_fxrng_generation_1 *fxrngp;
 	int error;
 
@@ -91,6 +96,7 @@ _rs_initialize_fxrng(void)
 		return;
 
 	vdso_fxrngp = fxrngp;
+#endif
 }
 
 static inline int
@@ -131,13 +137,14 @@ _rs_forkdetect(void)
 	/* Detect fork (minherit(2) INHERIT_ZERO). */
 	if (__predict_false(rs == NULL || rsx == NULL))
 		return;
+#if ARC4RANDOM_FXRNG != 0
 	/* If present, detect kernel FenestrasX seed version change. */
 	if (vdso_fxrngp == NULL)
 		return;
 	if (__predict_true(rsx->rs_seed_generation ==
 	    fxrng_load_acq_generation(&vdso_fxrngp->fx_generation32)))
 		return;
-
+#endif
 	/* Invalidate rs_buf to force "stir" (reseed). */
 	memset(rs, 0, sizeof(*rs));
 }



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010121042.09CAgFYw071433>