From 135320af271db00b0d61f6088c012992d8351ad3 Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Sun, 11 Jun 2017 11:42:47 -0500 Subject: [PATCH] add macOS 10.12 getentropy checks --- m4/check-libc-compat.m4 | 47 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/m4/check-libc-compat.m4 b/m4/check-libc-compat.m4 index cad0819..7567ed1 100644 --- a/m4/check-libc-compat.m4 +++ b/m4/check-libc-compat.m4 @@ -39,7 +39,52 @@ AM_CONDITIONAL([HAVE_B64_NTOP], [test "x$ac_cv_func_b64_ntop_arg" = xyes]) AC_DEFUN([CHECK_CRYPTO_COMPAT], [ # Check crypto-related libc functions and syscalls AC_CHECK_FUNCS([arc4random arc4random_buf arc4random_uniform]) -AC_CHECK_FUNCS([explicit_bzero getauxval getentropy]) +AC_CHECK_FUNCS([explicit_bzero getauxval]) + +AC_CACHE_CHECK([for getentropy], ac_cv_func_getentropy, [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[ +#include +#include + +/* + * Explanation: + * + * - iOS <= 10.1 fails because of missing sys/random.h + * + * - in macOS 10.12 getentropy is not tagged as introduced in + * 10.12 so we cannot use it for target < 10.12 + */ +#ifdef __APPLE__ +# include +# include + +# if (TARGET_OS_IPHONE || TARGET_OS_SIMULATOR) +# include /* Not available as of iOS <= 10.1 */ +# else + +# include /* Pre 10.12 systems should die here */ + +/* Based on: https://gitweb.torproject.org/tor.git/commit/?id=16fcbd21 */ +# ifndef MAC_OS_X_VERSION_10_12 +# define MAC_OS_X_VERSION_10_12 101200 /* Robustness */ +# endif +# if defined(MAC_OS_X_VERSION_MIN_REQUIRED) +# if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12 +# error "Targeting on Mac OSX 10.11 or earlier" +# endif +# endif + +# endif +#endif /* __APPLE__ */ + ]], [[ + char buffer; + (void)getentropy(&buffer, sizeof (buffer)); +]])], + [ ac_cv_func_getentropy="yes" ], + [ ac_cv_func_getentropy="no" + ]) +]) + AC_CHECK_FUNCS([timingsafe_bcmp timingsafe_memcmp]) AM_CONDITIONAL([HAVE_ARC4RANDOM], [test "x$ac_cv_func_arc4random" = xyes]) AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF], [test "x$ac_cv_func_arc4random_buf" = xyes])