Skip to content

Commit

Permalink
Fix a couple of bugs in the BSD sysctl arc4seed logic
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
nmathewson committed Apr 23, 2010
1 parent a5bf43a commit a47a4b7
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 7 deletions.
8 changes: 4 additions & 4 deletions arc4random.c
Original file line number Diff line number Diff line change
Expand Up @@ -201,24 +201,24 @@ 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;

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))
Expand Down
7 changes: 4 additions & 3 deletions configure.in
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand Down

0 comments on commit a47a4b7

Please sign in to comment.