From 97717953519c8d2fd852d56da6983c9ce65778e9 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 29 Sep 2018 22:53:05 +0200 Subject: [PATCH] Revert "Add getrandom(2) support for FreeBSD 12" This reverts commit 52fdd7ab3903f14c1160e789cd1070f08cb60c2a. Due to TinyC crashing. --- .../salsa20/randombytes_salsa20_random.c | 25 +++++++------------ .../sysrandom/randombytes_sysrandom.c | 23 ++++++----------- 2 files changed, 17 insertions(+), 31 deletions(-) diff --git a/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c b/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c index e9518f2c..477fda1c 100644 --- a/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c +++ b/src/libsodium/randombytes/salsa20/randombytes_salsa20_random.c @@ -19,20 +19,9 @@ #ifdef __linux__ # ifdef __dietlibc__ # define _LINUX_SOURCE -# include -# define HAVE_LINUX_COMPATIBLE_GETRANDOM # else # include -# if defined(SYS_getrandom) && defined(__NR_getrandom) -# define getrandom(B, S, F) syscall(SYS_getrandom, (B), (int) (S), (F)) -# define HAVE_LINUX_COMPATIBLE_GETRANDOM -# endif # endif -#elif defined(__FreeBSD_version) && __FreeBSD_version >= 1200000 -# include -# define HAVE_LINUX_COMPATIBLE_GETRANDOM -#endif -#ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM # include #endif #ifdef HAVE_RDRAND @@ -257,7 +246,7 @@ randombytes_salsa20_random_random_dev_open(void) } # endif -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(__dietlibc__) || (defined(SYS_getrandom) && defined(__NR_getrandom)) static int _randombytes_linux_getrandom(void * const buf, const size_t size) { @@ -265,7 +254,11 @@ _randombytes_linux_getrandom(void * const buf, const size_t size) assert(size <= 256U); do { +# ifdef __dietlibc__ readnb = getrandom(buf, size, 0); +# else + readnb = syscall(SYS_getrandom, buf, (int) size, 0); +# endif } while (readnb < 0 && (errno == EINTR || errno == EAGAIN)); return (readnb == (int) size) - 1; @@ -306,7 +299,7 @@ randombytes_salsa20_random_init(void) errno = errno_save; # else -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(SYS_getrandom) && defined(__NR_getrandom) { unsigned char fodder[16]; @@ -317,7 +310,7 @@ randombytes_salsa20_random_init(void) } global.getrandom_available = 0; } -# endif /* HAVE_LINUX_COMPATIBLE_GETRANDOM */ +# endif /* SYS_getrandom */ if ((global.random_data_source_fd = randombytes_salsa20_random_random_dev_open()) == -1) { @@ -350,7 +343,7 @@ randombytes_salsa20_random_stir(void) # ifdef HAVE_SAFE_ARC4RANDOM arc4random_buf(stream.key, sizeof stream.key); -# elif defined(HAVE_LINUX_COMPATIBLE_GETRANDOM) +# elif defined(SYS_getrandom) && defined(__NR_getrandom) if (global.getrandom_available != 0) { if (randombytes_linux_getrandom(stream.key, sizeof stream.key) != 0) { sodium_misuse(); /* LCOV_EXCL_LINE */ @@ -435,7 +428,7 @@ randombytes_salsa20_random_close(void) ret = 0; # endif -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(SYS_getrandom) && defined(__NR_getrandom) if (global.getrandom_available != 0) { ret = 0; } diff --git a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c index be1fd98b..f4dec08f 100644 --- a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +++ b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c @@ -18,20 +18,9 @@ #ifdef __linux__ # ifdef __dietlibc__ # define _LINUX_SOURCE -# include -# define HAVE_LINUX_COMPATIBLE_GETRANDOM # else # include -# if defined(SYS_getrandom) && defined(__NR_getrandom) -# define getrandom(B, S, F) syscall(SYS_getrandom, (B), (int) (S), (F)) -# define HAVE_LINUX_COMPATIBLE_GETRANDOM -# endif # endif -#elif defined(__FreeBSD_version) && __FreeBSD_version >= 1200000 -# include -# define HAVE_LINUX_COMPATIBLE_GETRANDOM -#endif -#ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM # include #endif @@ -215,7 +204,7 @@ randombytes_sysrandom_random_dev_open(void) /* LCOV_EXCL_STOP */ } -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(__dietlibc__) || (defined(SYS_getrandom) && defined(__NR_getrandom)) static int _randombytes_linux_getrandom(void * const buf, const size_t size) { @@ -223,7 +212,11 @@ _randombytes_linux_getrandom(void * const buf, const size_t size) assert(size <= 256U); do { +# ifdef __dietlibc__ readnb = getrandom(buf, size, 0); +# else + readnb = syscall(SYS_getrandom, buf, (int) size, 0); +# endif } while (readnb < 0 && (errno == EINTR || errno == EAGAIN)); return (readnb == (int) size) - 1; @@ -256,7 +249,7 @@ randombytes_sysrandom_init(void) { const int errno_save = errno; -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(SYS_getrandom) && defined(__NR_getrandom) { unsigned char fodder[16]; @@ -313,7 +306,7 @@ randombytes_sysrandom_close(void) stream.initialized = 0; ret = 0; } -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(SYS_getrandom) && defined(__NR_getrandom) if (stream.getrandom_available != 0) { ret = 0; } @@ -338,7 +331,7 @@ randombytes_sysrandom_buf(void * const buf, const size_t size) # endif #endif #ifndef _WIN32 -# ifdef HAVE_LINUX_COMPATIBLE_GETRANDOM +# if defined(SYS_getrandom) && defined(__NR_getrandom) if (stream.getrandom_available != 0) { if (randombytes_linux_getrandom(buf, size) != 0) { sodium_misuse(); /* LCOV_EXCL_LINE */