aboutsummaryrefslogtreecommitdiff
path: root/configure.ac
diff options
context:
space:
mode:
authorBrent Cook <bcook@openbsd.org>2014-10-27 19:22:03 -0500
committerBrent Cook <bcook@openbsd.org>2014-11-03 01:19:36 -0600
commit0aeb93b9fc9ecf0f9c2e98444545de485168823d (patch)
tree605cc1566e5c0ad6698c076b9d5dc2ebeb3f705d /configure.ac
parent8abf8e1e1577f51deb5c3bc01f076205f1bfb268 (diff)
downloadportable-0aeb93b9fc9ecf0f9c2e98444545de485168823d.tar.gz
portable-0aeb93b9fc9ecf0f9c2e98444545de485168823d.tar.bz2
portable-0aeb93b9fc9ecf0f9c2e98444545de485168823d.zip
override native arc4random_buf on FreeBSD
The FreeBSD-native arc4random_buf implementation falls back to weak sources of entropy if the sysctl fails. Remove these dangerous fallbacks by overriding locally. Unfortunately, pthread_atfork() is broken on FreeBSD (at least 9 and 10) if a program does not link to -lthr. Callbacks registered with pthread_atfork() simply fail silently. So, it is not always possible to detect a PID wraparound. I wish we could do better. This improves arc4random_buf's safety compared to the native FreeBSD implementation. Tested on FreeBSD 9 and 10. ok beck@ deraadt@
Diffstat (limited to 'configure.ac')
-rw-r--r--configure.ac7
1 files changed, 6 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 0f75e81..88613d6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -13,6 +13,10 @@ case $host_os in
13 HOST_OS=darwin; 13 HOST_OS=darwin;
14 LDFLAGS="$LDFLAGS -Qunused-arguments" 14 LDFLAGS="$LDFLAGS -Qunused-arguments"
15 ;; 15 ;;
16 *freebsd*)
17 HOST_OS=freebsd;
18 AC_SUBST([PROG_LDADD], ['-lthr'])
19 ;;
16 *linux*) 20 *linux*)
17 HOST_OS=linux; 21 HOST_OS=linux;
18 CFLAGS="$CFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" 22 CFLAGS="$CFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE"
@@ -33,6 +37,7 @@ case $host_os in
33esac 37esac
34 38
35AM_CONDITIONAL(HOST_DARWIN, test x$HOST_OS = xdarwin) 39AM_CONDITIONAL(HOST_DARWIN, test x$HOST_OS = xdarwin)
40AM_CONDITIONAL(HOST_FREEBSD, test x$HOST_OS = xfreebsd)
36AM_CONDITIONAL(HOST_LINUX, test x$HOST_OS = xlinux) 41AM_CONDITIONAL(HOST_LINUX, test x$HOST_OS = xlinux)
37AM_CONDITIONAL(HOST_SOLARIS, test x$HOST_OS = xsolaris) 42AM_CONDITIONAL(HOST_SOLARIS, test x$HOST_OS = xsolaris)
38AM_CONDITIONAL(HOST_WIN, test x$HOST_OS = xwin) 43AM_CONDITIONAL(HOST_WIN, test x$HOST_OS = xwin)
@@ -81,7 +86,7 @@ AM_CONDITIONAL([HAVE_TIMINGSAFE_MEMCMP], [test "x$ac_cv_func_timingsafe_memcmp"
81 86
82# overrides for arc4random_buf implementations with known issues 87# overrides for arc4random_buf implementations with known issues
83AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF], 88AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF],
84 [test "x$HOST_OS" != xdarwin -a "x$NO_ARC4RANDOM_BUF" = xtrue]) 89 [test "x$HOST_OS" != xdarwin -a "x$HOST_OS" != xfreebsd -a "x$ac_cv_func_arc4random_buf" = xyes])
85 90
86AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ 91AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [
87 AC_LINK_IFELSE([AC_LANG_PROGRAM([[ 92 AC_LINK_IFELSE([AC_LANG_PROGRAM([[