diff --git a/ChangeLog.d/getentropy.txt b/ChangeLog.d/getentropy.txt new file mode 100644 index 0000000000..460798f588 --- /dev/null +++ b/ChangeLog.d/getentropy.txt @@ -0,0 +1,3 @@ +Changes + * On recent enough versions of FreeBSD and DragonFlyBSD, the entropy module + now uses the getrandom syscall instead of reading from /dev/urandom. diff --git a/library/entropy_poll.c b/library/entropy_poll.c index 5250a7bfec..84b70fe6fe 100644 --- a/library/entropy_poll.c +++ b/library/entropy_poll.c @@ -109,6 +109,21 @@ static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) #endif /* SYS_getrandom */ #endif /* __linux__ || __midipix__ */ +#if defined(__FreeBSD__) || defined(__DragonFly__) +#include +#if (defined(__FreeBSD__) && __FreeBSD_version >= 1200000) || \ + (defined(__DragonFly__) && __DragonFly_version >= 500700) +#include +#include +#define HAVE_GETRANDOM +static int getrandom_wrapper( void *buf, size_t buflen, unsigned int flags ) +{ + return getrandom( buf, buflen, flags ); +} +#endif /* (__FreeBSD__ && __FreeBSD_version >= 1200000) || + (__DragonFly__ && __DragonFly_version >= 500700) */ +#endif /* __FreeBSD__ || __DragonFly__ */ + /* * Some BSD systems provide KERN_ARND. * This is equivalent to reading from /dev/urandom, only it doesn't require an