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