From 4d1c4bf0baa79c7e37cb34e8f5c9c31721451ea6 Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sun, 7 Apr 2019 23:54:47 +0200 Subject: [PATCH] Do not include sys/random.h after defining getrandom() on Linux --- configure.ac | 2 +- .../internal/randombytes_internal_random.c | 17 +++++++++-------- .../sysrandom/randombytes_sysrandom.c | 17 ++++++++++------- 3 files changed, 20 insertions(+), 16 deletions(-) diff --git a/configure.ac b/configure.ac index 0ee2972b..9477dbb7 100644 --- a/configure.ac +++ b/configure.ac @@ -792,7 +792,7 @@ dnl Checks for functions and headers AC_FUNC_ALLOCA AS_IF([test "x$EMSCRIPTEN" = "x"],[ - AC_CHECK_FUNCS([arc4random arc4random_buf getentropy]) + AC_CHECK_FUNCS([arc4random arc4random_buf getrandom getentropy]) AC_CHECK_FUNCS([mmap mlock madvise mprotect]) ]) AC_CHECK_FUNCS([posix_memalign getpid nanosleep]) diff --git a/src/libsodium/randombytes/internal/randombytes_internal_random.c b/src/libsodium/randombytes/internal/randombytes_internal_random.c index 02e799e8..7098f28b 100644 --- a/src/libsodium/randombytes/internal/randombytes_internal_random.c +++ b/src/libsodium/randombytes/internal/randombytes_internal_random.c @@ -17,26 +17,27 @@ # include #endif #ifdef __linux__ -# ifdef __dietlibc__ -# define _LINUX_SOURCE -# include +# define _LINUX_SOURCE +#endif +#ifdef HAVE_SYS_RANDOM_H +# include +#endif +#ifdef __linux__ +# ifdef HAVE_GETRANDOM # define HAVE_LINUX_COMPATIBLE_GETRANDOM -# else /* __dietlibc__ */ +# 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 /* __dietlibc__ */ +# endif #elif defined(__FreeBSD__) # include # if defined(__FreeBSD_version) && __FreeBSD_version >= 1200000 # define HAVE_LINUX_COMPATIBLE_GETRANDOM # endif #endif -#ifdef HAVE_SYS_RANDOM_H -# include -#endif #if !defined(NO_BLOCKING_RANDOM_POLL) && defined(__linux__) # define BLOCK_ON_DEV_RANDOM #endif diff --git a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c index d080b383..6657e8e6 100644 --- a/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c +++ b/src/libsodium/randombytes/sysrandom/randombytes_sysrandom.c @@ -8,29 +8,32 @@ #ifndef _WIN32 # include #endif - #include + #include #ifndef _WIN32 # include # include #endif #ifdef __linux__ -# ifdef __dietlibc__ -# define _LINUX_SOURCE -# include +# define _LINUX_SOURCE +#endif +#ifdef HAVE_SYS_RANDOM_H +# include +#endif +#ifdef __linux__ +# ifdef HAVE_GETRANDOM # define HAVE_LINUX_COMPATIBLE_GETRANDOM -# else /* __dietlibc__ */ +# 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 /* __dietlibc */ +# endif #elif defined(__FreeBSD__) # include # if defined(__FreeBSD_version) && __FreeBSD_version >= 1200000 -# include # define HAVE_LINUX_COMPATIBLE_GETRANDOM # endif #endif