Since arc4random seeds from getentropy, and we use OpenSSL for that
if enabled, there's the possibility that if we build on a system that
does not have getentropy then run on a system that does have it, then
OpenSSL could end up calling our getentropy and getting stuck in a loop.
Pointed out by deraadt@, ok djm@
#ifndef HAVE_ARC4RANDOM
+/*
+ * If we're not using a native getentropy, use the one from bsd-getentropy.c
+ * under a different name, so that if in future these binaries are run on
+ * a system that has a native getentropy OpenSSL cannot call the wrong one.
+ */
+#ifndef HAVE_GETENTROPY
+# define getentropy(x, y) (_ssh_compat_getentropy((x), (y)))
+#endif
+
#define MINIMUM(a, b) (((a) < (b)) ? (a) : (b))
#include "log.h"
#include "log.h"
int
-getentropy(void *s, size_t len)
+_ssh_compat_getentropy(void *s, size_t len)
{
#ifdef WITH_OPENSSL
if (RAND_bytes(s, len) <= 0)
#endif
#if defined(HAVE_DECL_GETENTROPY) && HAVE_DECL_GETENTROPY == 0
-int getentropy(void *, size_t);
+int _ssh_compat_getentropy(void *, size_t);
#endif
#ifndef HAVE_GETLINE