diff options
author | Elliott Hughes <enh@google.com> | 2017-08-07 14:18:18 -0700 |
---|---|---|
committer | Elliott Hughes <enh@google.com> | 2017-08-07 16:58:18 -0700 |
commit | 2a572d125a91a4aafd3ad8ce87259fc640fa0763 (patch) | |
tree | bd05e575a4a2629cc420c5e2bc54f176fee611ab /evutil_rand.c | |
parent | 596447c7ff2881a67e7082c905112584c3e61a17 (diff) | |
download | libevent-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.c | 60 |
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(); +} |