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

really fix race conditions

Submitted by: "Patrick McCormick" <patrick@tellme.com>

PR: 262
PR: 291
parent 94960c84
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -1931,7 +1931,9 @@ des-cbc 3624.96k 5258.21k 5530.91k 5624.30k 5628.26k
        SSLv23_client_method(),   SSLv23_server_method(),
        SSLv2_client_method(),    SSLv2_server_method(),
        SSLv3_client_method(),    SSLv3_server_method(),
        TLSv1_client_method(),    TLSv1_server_method().
        TLSv1_client_method(),    TLSv1_server_method(),
        ssl2_get_cipher_by_char(),
        ssl3_get_cipher_by_char().
     [Patrick McCormick <patrick@tellme.com>, Bodo Moeller]

  *) Reorder cleanup sequence in SSL_CTX_free(): only remove the ex_data after
+8 −5
Original line number Diff line number Diff line
@@ -89,11 +89,14 @@ SSL_METHOD *SSLv23_client_method(void)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);

		if (init)
			{
			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);
		}
+8 −5
Original line number Diff line number Diff line
@@ -141,11 +141,14 @@ SSL_METHOD *SSLv23_server_method(void)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);

		if (init)
			{
			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);
		}
+8 −5
Original line number Diff line number Diff line
@@ -147,11 +147,14 @@ SSL_METHOD *SSLv2_client_method(void)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);

		if (init)
			{
			memcpy((char *)&SSLv2_client_data,(char *)sslv2_base_method(),
				sizeof(SSL_METHOD));
			SSLv2_client_data.ssl_connect=ssl2_connect;
			SSLv2_client_data.get_ssl_method=ssl2_get_client_method;
			init=0;
			}

		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
		}
+10 −6
Original line number Diff line number Diff line
@@ -377,6 +377,8 @@ SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p)
		{
		CRYPTO_w_lock(CRYPTO_LOCK_SSL);

		if (init)
			{
			for (i=0; i<SSL2_NUM_CIPHERS; i++)
				sorted[i]= &(ssl2_ciphers[i]);

@@ -384,10 +386,12 @@ SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p)
				SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER *),
				FP_ICC ssl_cipher_ptr_id_cmp);

		CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
			init=0;
			}
			
		CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
		}

	id=0x02000000L|((unsigned long)p[0]<<16L)|
		((unsigned long)p[1]<<8L)|(unsigned long)p[2];
	c.id=id;
Loading