Commit 924b6006 authored by Bodo Möller's avatar Bodo Möller
Browse files

really fix race condition

PR: 262
parent 85789cd2
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -8,8 +8,12 @@
     (the SSL 3.0 and TLS 1.0 specifications allow any length up to 32 bytes).
     [Bodo Moeller]

  *) Fix race condition in SSLv3_client_method().
     [Bodo Moeller]
  *) Fix initialization code race conditions in
        SSLv23_client_method(),   SSLv23_server_method(),
        SSLv2_client_method(),    SSLv2_server_method(),
        SSLv3_client_method(),    SSLv3_server_method(),
        TLSv1_client_method(),    TLSv1_server_method().
     [Patrick McCormick <patrick@tellme.com>, Bodo Moeller]

  *) Reorder cleanup sequence in SSL_CTX_free(): only remove the ex_data after
     the cached sessions are flushed, as the remove_cb() might use ex_data
+1 −0
Original line number Diff line number Diff line
@@ -89,6 +89,7 @@ static const char* lock_names[CRYPTO_NUM_LOCKS] =
	"ssl_session",
	"ssl_sess_cert",
	"ssl",
	/* "ssl_method", */
	"rand",
	"rand2",
	"debug_malloc",
+28 −25
Original line number Diff line number Diff line
@@ -111,6 +111,9 @@ extern "C" {
#define CRYPTO_LOCK_SSL_SESSION		14
#define CRYPTO_LOCK_SSL_SESS_CERT	15
#define CRYPTO_LOCK_SSL			16
/* for binary compatibility between 0.9.6 minor versions,
 * reuse an existing lock (later version use a new one): */
# define CRYPTO_LOCK_SSL_SESSION	CRYPTO_LOCK_SSL_CERT
#define CRYPTO_LOCK_RAND		17
#define CRYPTO_LOCK_RAND2		18
#define CRYPTO_LOCK_MALLOC		19
+4 −0
Original line number Diff line number Diff line
@@ -87,11 +87,15 @@ SSL_METHOD *SSLv23_client_method(void)

	if (init)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);

		memcpy((char *)&SSLv23_client_data,
			(char *)sslv23_base_method(),sizeof(SSL_METHOD));
		SSLv23_client_data.ssl_connect=ssl23_connect;
		SSLv23_client_data.get_ssl_method=ssl23_get_client_method;
		init=0;

		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
		}
	return(&SSLv23_client_data);
	}
+4 −0
Original line number Diff line number Diff line
@@ -139,11 +139,15 @@ SSL_METHOD *SSLv23_server_method(void)

	if (init)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);

		memcpy((char *)&SSLv23_server_data,
			(char *)sslv23_base_method(),sizeof(SSL_METHOD));
		SSLv23_server_data.ssl_accept=ssl23_accept;
		SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
		init=0;

		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
		}
	return(&SSLv23_server_data);
	}
Loading