From: Bodo Möller Date: Tue, 24 Jul 2001 12:31:14 +0000 (+0000) Subject: Avoid race condition. X-Git-Tag: OpenSSL_0_9_6c~147^2~75 X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff_plain;h=badb910f3c88b8a3721f818098cab02ea03dd4b8 Avoid race condition. Submitted by: Travis Vitek --- diff --git a/CHANGES b/CHANGES index e4c17789d4..5137037cda 100644 --- a/CHANGES +++ b/CHANGES @@ -12,6 +12,11 @@ *) applies to 0.9.6a/0.9.6b and 0.9.7 +) applies to 0.9.7 only + *) In crypto/rand/md_rand.c, set 'locking_thread' to current thread's ID + *before* setting the 'crypto_lock_rand' flag. The previous code had + a race condition if 0 is a valid thread ID. + [Travis Vitek ] + +) Cleanup of EVP macros. [Ben Laurie] diff --git a/crypto/rand/md_rand.c b/crypto/rand/md_rand.c index 9fc98eb099..2a56ace4ee 100644 --- a/crypto/rand/md_rand.c +++ b/crypto/rand/md_rand.c @@ -361,8 +361,8 @@ static int ssleay_rand_bytes(unsigned char *buf, int num) CRYPTO_w_lock(CRYPTO_LOCK_RAND); /* prevent ssleay_rand_bytes() from trying to obtain the lock again */ - crypto_lock_rand = 1; locking_thread = CRYPTO_thread_id(); + crypto_lock_rand = 1; if (!initialized) { @@ -435,7 +435,6 @@ static int ssleay_rand_bytes(unsigned char *buf, int num) /* before unlocking, we must clear 'crypto_lock_rand' */ crypto_lock_rand = 0; - locking_thread = 0; CRYPTO_w_unlock(CRYPTO_LOCK_RAND); while (num > 0) @@ -528,8 +527,8 @@ static int ssleay_rand_status(void) CRYPTO_w_lock(CRYPTO_LOCK_RAND); /* prevent ssleay_rand_bytes() from trying to obtain the lock again */ - crypto_lock_rand = 1; locking_thread = CRYPTO_thread_id(); + crypto_lock_rand = 1; } if (!initialized) @@ -544,7 +543,6 @@ static int ssleay_rand_status(void) { /* before unlocking, we must clear 'crypto_lock_rand' */ crypto_lock_rand = 0; - locking_thread = 0; CRYPTO_w_unlock(CRYPTO_LOCK_RAND); }