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
This commit is contained in:
parent
28f7839fec
commit
51914e6159
@ -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))
|
||||
|
@ -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));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user