aboutsummaryrefslogtreecommitdiff
path: root/evutil_rand.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2017-08-07 14:18:18 -0700
committerElliott Hughes <enh@google.com>2017-08-07 16:58:18 -0700
commit2a572d125a91a4aafd3ad8ce87259fc640fa0763 (patch)
treebd05e575a4a2629cc420c5e2bc54f176fee611ab /evutil_rand.c
parent596447c7ff2881a67e7082c905112584c3e61a17 (diff)
downloadlibevent-2a572d125a91a4aafd3ad8ce87259fc640fa0763.tar.gz
Upgrade to 2.1.8-stable (2017-01-22).
Bug: N/A Test: builds Change-Id: Idbbdc1db3d01984a4f4b60f8fdf455140b6b7ca6
Diffstat (limited to 'evutil_rand.c')
-rw-r--r--evutil_rand.c60
1 files changed, 43 insertions, 17 deletions
diff --git a/evutil_rand.c b/evutil_rand.c
index 2003d1b..76d0f4a 100644
--- a/evutil_rand.c
+++ b/evutil_rand.c
@@ -33,13 +33,14 @@
*/
#include "event2/event-config.h"
+#include "evconfig-private.h"
#include <limits.h>
#include "util-internal.h"
#include "evthread-internal.h"
-#ifdef _EVENT_HAVE_ARC4RANDOM
+#ifdef EVENT__HAVE_ARC4RANDOM
#include <stdlib.h>
#include <string.h>
int
@@ -55,21 +56,28 @@ evutil_secure_rng_init(void)
(void) arc4random();
return 0;
}
+#ifndef EVENT__DISABLE_THREAD_SUPPORT
int
evutil_secure_rng_global_setup_locks_(const int enable_locks)
{
return 0;
}
+#endif
+static void
+evutil_free_secure_rng_globals_locks(void)
+{
+}
static void
ev_arc4random_buf(void *buf, size_t n)
{
-#if defined(_EVENT_HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
- return arc4random_buf(buf, n);
+#if defined(EVENT__HAVE_ARC4RANDOM_BUF) && !defined(__APPLE__)
+ arc4random_buf(buf, n);
+ return;
#else
unsigned char *b = buf;
-#if defined(_EVENT_HAVE_ARC4RANDOM_BUF)
+#if defined(EVENT__HAVE_ARC4RANDOM_BUF)
/* OSX 10.7 introducd arc4random_buf, so if you build your program
* there, you'll get surprised when older versions of OSX fail to run.
* To solve this, we can check whether the function pointer is set,
@@ -80,7 +88,8 @@ ev_arc4random_buf(void *buf, size_t n)
void (*tptr)(void *,size_t) =
(void (*)(void*,size_t))arc4random_buf;
if (tptr != NULL) {
- return arc4random_buf(buf, n);
+ arc4random_buf(buf, n);
+ return;
}
}
#endif
@@ -105,15 +114,15 @@ ev_arc4random_buf(void *buf, size_t n)
#endif
}
-#else /* !_EVENT_HAVE_ARC4RANDOM { */
+#else /* !EVENT__HAVE_ARC4RANDOM { */
-#ifdef _EVENT_ssize_t
-#define ssize_t _EVENT_SSIZE_t
+#ifdef EVENT__ssize_t
+#define ssize_t EVENT__ssize_t
#endif
#define ARC4RANDOM_EXPORT static
-#define _ARC4_LOCK() EVLOCK_LOCK(arc4rand_lock, 0)
-#define _ARC4_UNLOCK() EVLOCK_UNLOCK(arc4rand_lock, 0)
-#ifndef _EVENT_DISABLE_THREAD_SUPPORT
+#define ARC4_LOCK_() EVLOCK_LOCK(arc4rand_lock, 0)
+#define ARC4_UNLOCK_() EVLOCK_UNLOCK(arc4rand_lock, 0)
+#ifndef EVENT__DISABLE_THREAD_SUPPORT
static void *arc4rand_lock;
#endif
@@ -124,7 +133,7 @@ static void *arc4rand_lock;
#include "./arc4random.c"
-#ifndef _EVENT_DISABLE_THREAD_SUPPORT
+#ifndef EVENT__DISABLE_THREAD_SUPPORT
int
evutil_secure_rng_global_setup_locks_(const int enable_locks)
{
@@ -133,13 +142,25 @@ evutil_secure_rng_global_setup_locks_(const int enable_locks)
}
#endif
+static void
+evutil_free_secure_rng_globals_locks(void)
+{
+#ifndef EVENT__DISABLE_THREAD_SUPPORT
+ if (arc4rand_lock != NULL) {
+ EVTHREAD_FREE_LOCK(arc4rand_lock, 0);
+ arc4rand_lock = NULL;
+ }
+#endif
+ return;
+}
+
int
evutil_secure_rng_set_urandom_device_file(char *fname)
{
#ifdef TRY_SEED_URANDOM
- _ARC4_LOCK();
+ ARC4_LOCK_();
arc4random_urandom_filename = fname;
- _ARC4_UNLOCK();
+ ARC4_UNLOCK_();
#endif
return 0;
}
@@ -149,11 +170,11 @@ evutil_secure_rng_init(void)
{
int val;
- _ARC4_LOCK();
+ ARC4_LOCK_();
if (!arc4_seeded_ok)
arc4_stir();
val = arc4_seeded_ok ? 0 : -1;
- _ARC4_UNLOCK();
+ ARC4_UNLOCK_();
return val;
}
@@ -163,7 +184,7 @@ ev_arc4random_buf(void *buf, size_t n)
arc4random_buf(buf, n);
}
-#endif /* } !_EVENT_HAVE_ARC4RANDOM */
+#endif /* } !EVENT__HAVE_ARC4RANDOM */
void
evutil_secure_rng_get_bytes(void *buf, size_t n)
@@ -180,3 +201,8 @@ evutil_secure_rng_add_bytes(const char *buf, size_t n)
#endif
}
+void
+evutil_free_secure_rng_globals_(void)
+{
+ evutil_free_secure_rng_globals_locks();
+}