From a2233651277a50955cdc4c7810da7a12e4e33551 Mon Sep 17 00:00:00 2001 From: Brent Cook Date: Wed, 21 Jan 2015 06:14:24 -0600 Subject: [PATCH] add NetBSD shims for arc4random The current NetBSD release, 6.1.5, fails to reseed arc4random fork. Work around it by providing arc4random/getentropy shims. Revisit when NetBSD 7 is available. --- configure.ac | 9 ++++++++- crypto/Makefile.am | 18 +++++++++++------- crypto/compat/arc4random.h | 3 +++ 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/configure.ac b/configure.ac index 54209da..d8e5338 100644 --- a/configure.ac +++ b/configure.ac @@ -32,6 +32,9 @@ case $host_os in HOST_ABI=elf CFLAGS="$CFLAGS -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_POSIX_SOURCE -D_GNU_SOURCE" ;; + *netbsd*) + HOST_OS=netbsd + ;; *openbsd*) HOST_ABI=elf AC_DEFINE([HAVE_ATTRIBUTE__BOUNDED__], [1], [OpenBSD gcc has bounded]) @@ -60,6 +63,7 @@ AM_CONDITIONAL([HOST_DARWIN], [test x$HOST_OS = xdarwin]) AM_CONDITIONAL([HOST_FREEBSD], [test x$HOST_OS = xfreebsd]) AM_CONDITIONAL([HOST_HPUX], [test x$HOST_OS = xhpux]) AM_CONDITIONAL([HOST_LINUX], [test x$HOST_OS = xlinux]) +AM_CONDITIONAL([HOST_NETBSD], [test x$HOST_OS = xnetbsd]) AM_CONDITIONAL([HOST_SOLARIS], [test x$HOST_OS = xsolaris]) AM_CONDITIONAL([HOST_WIN], [test x$HOST_OS = xwin]) @@ -214,7 +218,10 @@ AM_CONDITIONAL([HAVE_TIMINGSAFE_MEMCMP], [test "x$ac_cv_func_timingsafe_memcmp" # overrides for arc4random_buf implementations with known issues AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF], - [test "x$HOST_OS" != xdarwin -a "x$HOST_OS" != xfreebsd -a "x$ac_cv_func_arc4random_buf" = xyes]) + [test "x$HOST_OS" != xdarwin \ + -a "x$HOST_OS" != xfreebsd \ + -a "x$HOST_OS" != xnetbsd \ + -a "x$ac_cv_func_arc4random_buf" = xyes]) AC_CACHE_CHECK([whether va_copy exists], ac_cv_have_va_copy, [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[ diff --git a/crypto/Makefile.am b/crypto/Makefile.am index 9f5311a..10dd63d 100644 --- a/crypto/Makefile.am +++ b/crypto/Makefile.am @@ -74,9 +74,15 @@ if !HAVE_GETENTROPY if HOST_FREEBSD libcompat_la_SOURCES += compat/getentropy_freebsd.c endif +if HOST_HPUX +libcompat_la_SOURCES += compat/getentropy_hpux.c +endif if HOST_LINUX libcompat_la_SOURCES += compat/getentropy_linux.c endif +if HOST_NETBSD +libcompat_la_SOURCES += compat/getentropy_netbsd.c +endif if HOST_DARWIN libcompat_la_SOURCES += compat/getentropy_osx.c endif @@ -86,9 +92,6 @@ endif if HOST_WIN libcompat_la_SOURCES += compat/getentropy_win.c endif -if HOST_HPUX -libcompat_la_SOURCES += compat/getentropy_hpux.c -endif endif endif @@ -97,22 +100,23 @@ if !HAVE_ISSETUGID if HOST_LINUX libcompat_la_SOURCES += compat/issetugid_linux.c endif -if HOST_WIN -libcompat_la_SOURCES += compat/issetugid_win.c -endif if HOST_HPUX libcompat_la_SOURCES += compat/issetugid_hpux.c endif +if HOST_WIN +libcompat_la_SOURCES += compat/issetugid_win.c +endif endif noinst_HEADERS = noinst_HEADERS += compat/arc4random.h noinst_HEADERS += compat/arc4random_freebsd.h +noinst_HEADERS += compat/arc4random_hpux.h noinst_HEADERS += compat/arc4random_linux.h +noinst_HEADERS += compat/arc4random_netbsd.h noinst_HEADERS += compat/arc4random_osx.h noinst_HEADERS += compat/arc4random_solaris.h noinst_HEADERS += compat/arc4random_win.h -noinst_HEADERS += compat/arc4random_hpux.h noinst_HEADERS += compat/chacha_private.h libcrypto_la_SOURCES = diff --git a/crypto/compat/arc4random.h b/crypto/compat/arc4random.h index ed812ba..ce1bbea 100644 --- a/crypto/compat/arc4random.h +++ b/crypto/compat/arc4random.h @@ -12,6 +12,9 @@ #elif defined(__linux__) #include "arc4random_linux.h" +#elif defined(__NetBSD__) +#include "arc4random_netbsd.h" + #elif defined(__APPLE__) #include "arc4random_osx.h"