From a47a4b7e7e52ad8722771c36c4bc147f679c88d1 Mon Sep 17 00:00:00 2001 From: Nick Mathewson <nickm@torproject.org> Date: Fri, 23 Apr 2010 16:08:09 -0400 Subject: [PATCH] Fix a couple of bugs in the BSD sysctl arc4seed logic Of course, FreeBSD has its own arc4random() implementation, so this should never actually be needed. Still, it's good to paint the underside of the wagon. --- arc4random.c | 8 ++++---- configure.in | 7 ++++--- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/arc4random.c b/arc4random.c index a039711f..5e044643 100644 --- a/arc4random.c +++ b/arc4random.c @@ -201,16 +201,16 @@ arc4_seed_sysctl_linux(void) } #endif -#if _EVENT_HAVE_DECL_CTL_KERN && _EVENT_HAVE_DECL_KERN_ARAND +#if _EVENT_HAVE_DECL_CTL_KERN && _EVENT_HAVE_DECL_KERN_ARND #define TRY_SEED_SYSCTL_BSD static int arc4_seed_sysctl_bsd(void) { /* Based on code from William Ahern and from OpenBSD, this function - * tries to use the KERN_ARAND syscall to get entropy from the kernel. + * tries to use the KERN_ARND syscall to get entropy from the kernel. * This can work even if /dev/urandom is inaccessible for some reason * (e.g., we're running in a chroot). */ - int mib[] = { CTL_KERN, KERN_ARAND }; + int mib[] = { CTL_KERN, KERN_ARND }; unsigned char buf[ADD_ENTROPY]; size_t len, n; int i, any_set; @@ -218,7 +218,7 @@ arc4_seed_sysctl_bsd(void) memset(buf, 0, sizeof(buf)); len = sizeof(buf); - if (sysctl(mib, 2, rnd, &len, NULL, 0) == -1) { + if (sysctl(mib, 2, buf, &len, NULL, 0) == -1) { for (len = 0; len < sizeof(buf); len += sizeof(unsigned)) { n = sizeof(unsigned); if (n + len > sizeof(buf)) diff --git a/configure.in b/configure.in index 171801fe..e2177eff 100644 --- a/configure.in +++ b/configure.in @@ -46,7 +46,7 @@ AC_ARG_ENABLE(debug-mode, AC_PROG_LIBTOOL dnl Uncomment "AC_DISABLE_SHARED" to make shared librraries not get -dnl built by default. You can also turn shared libs on and off from +dnl built by default. You can also turn shared libs on and off from dnl the command line with --enable-shared and --disable-shared. dnl AC_DISABLE_SHARED AC_SUBST(LIBTOOL_DEPS) @@ -159,8 +159,9 @@ if test "x$ac_cv_header_sys_time_h" = "xyes"; then fi if test "x$ac_cv_header_sys_sysctl_h" = "xyes"; then - AC_CHECK_DECLS([CTL_KERN, KERN_RANDOM, RANDOM_UUID, KERN_ARAND], [], [], - [[#include <sys/sysctl.h>]] + AC_CHECK_DECLS([CTL_KERN, KERN_RANDOM, RANDOM_UUID, KERN_ARND], [], [], + [[#include <sys/types.h> + #include <sys/sysctl.h>]] ) fi -- 2.40.0