Check and call arc4random_stir() if present

FreeBSD prior to 10.0 does not automatically stir on fork(). Same with
current NetBSD. If arc4random_stir() is present assume is needed and
call it instead of srand().
This commit is contained in:
Federico G. Schwindt 2013-10-23 16:00:26 +01:00
parent 8a041373bb
commit 8e6db769ac
2 changed files with 6 additions and 3 deletions

View File

@ -187,9 +187,9 @@ AC_CHECK_FUNCS([ \
# Optional functions
AC_CHECK_FUNCS_ONCE([ \
arc4random gai_strerror getaddrinfo getnameinfo inet_aton sigaction \
sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat strtok_r \
waitpid])
arc4random arc4random_stir gai_strerror getaddrinfo getnameinfo inet_aton
sigaction sigprocmask snprintf vsnprintf strdup strndup strlcpy strlcat \
strtok_r waitpid])
# -- Configuration options --

View File

@ -77,6 +77,9 @@ Proc_Fork(PROC_STAT *proc, int *pipefds, void (*cbfunc)(int, short), int timeout
return -1;
case 0:
/* New child process: */
#ifdef HAVE_ARC4RANDOM_STIR
arc4random_stir();
#endif
#ifndef HAVE_ARC4RANDOM
srand(seed ^ (unsigned int)time(NULL) ^ getpid());
#endif