[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openssl-cvs
Subject:    cvs commit: openssl/ssl s23_clnt.c s23_srvr.c s2_clnt.c s2_lib.c s2_srvr.c s3_clnt.c s3_lib.c s3_srv
From:       bodo () openssl ! org
Date:       2002-09-25 15:39:10
[Download RAW message or body]

bodo        25-Sep-2002 17:39:09

  Modified:    .        CHANGES
               ssl      s23_clnt.c s23_srvr.c s2_clnt.c s2_lib.c s2_srvr.c
                        s3_clnt.c s3_lib.c s3_srvr.c t1_clnt.c t1_srvr.c
  Log:
  really fix race conditions
  
  Submitted by: "Patrick McCormick" <patrick@tellme.com>
  
  PR: 262
  PR: 291
  
  Revision  Changes    Path
  1.1065    +3 -1      openssl/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/CHANGES,v
  retrieving revision 1.1064
  retrieving revision 1.1065
  diff -u -r1.1064 -r1.1065
  --- CHANGES	2002/09/23 14:24:44	1.1064
  +++ CHANGES	2002/09/25 15:38:47	1.1065
  @@ -1931,7 +1931,9 @@
           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
  
  
  1.23      +8 -5      openssl/ssl/s23_clnt.c
  1.45      +8 -5      openssl/ssl/s23_srvr.c
  1.41      +8 -5      openssl/ssl/s2_clnt.c
  1.44      +10 -6     openssl/ssl/s2_lib.c
  1.41      +8 -5      openssl/ssl/s2_srvr.c
  1.64      +8 -5      openssl/ssl/s3_clnt.c
  1.63      +10 -7     openssl/ssl/s3_lib.c
  1.97      +9 -6      openssl/ssl/s3_srvr.c
  1.9       +9 -6      openssl/ssl/t1_clnt.c
  1.9       +9 -6      openssl/ssl/t1_srvr.c
  
  Index: s23_clnt.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s23_clnt.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- s23_clnt.c	2002/09/23 14:25:03	1.22
  +++ s23_clnt.c	2002/09/25 15:38:55	1.23
  @@ -89,11 +89,14 @@
   		{
   		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;
  +		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);
   		}
  
  Index: s23_srvr.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s23_srvr.c,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- s23_srvr.c	2002/09/23 14:25:03	1.44
  +++ s23_srvr.c	2002/09/25 15:38:55	1.45
  @@ -141,11 +141,14 @@
   		{
   		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;
  +		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);
   		}
  
  Index: s2_clnt.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s2_clnt.c,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- s2_clnt.c	2002/09/23 14:25:04	1.40
  +++ s2_clnt.c	2002/09/25 15:38:55	1.41
  @@ -147,11 +147,14 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		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;
  +		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);
   		}
  
  Index: s2_lib.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s2_lib.c,v
  retrieving revision 1.43
  retrieving revision 1.44
  diff -u -r1.43 -r1.44
  --- s2_lib.c	2002/08/03 18:49:39	1.43
  +++ s2_lib.c	2002/09/25 15:38:56	1.44
  @@ -377,15 +377,19 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL);
   
  -		for (i=0; i<SSL2_NUM_CIPHERS; i++)
  -			sorted[i]= &(ssl2_ciphers[i]);
  +		if (init)
  +			{
  +			for (i=0; i<SSL2_NUM_CIPHERS; i++)
  +				sorted[i]= &(ssl2_ciphers[i]);
   
  -		qsort(  (char *)sorted,
  -			SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  -			FP_ICC ssl_cipher_ptr_id_cmp);
  +			qsort((char *)sorted,
  +				SSL2_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  +				FP_ICC ssl_cipher_ptr_id_cmp);
   
  +			init=0;
  +			}
  +			
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
  -		init=0;
   		}
   
   	id=0x02000000L|((unsigned long)p[0]<<16L)|
  
  Index: s2_srvr.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s2_srvr.c,v
  retrieving revision 1.40
  retrieving revision 1.41
  diff -u -r1.40 -r1.41
  --- s2_srvr.c	2002/09/23 14:25:04	1.40
  +++ s2_srvr.c	2002/09/25 15:38:56	1.41
  @@ -147,11 +147,14 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		memcpy((char *)&SSLv2_server_data,(char *)sslv2_base_method(),
  -			sizeof(SSL_METHOD));
  -		SSLv2_server_data.ssl_accept=ssl2_accept;
  -		SSLv2_server_data.get_ssl_method=ssl2_get_server_method;
  -		init=0;
  +		if (init)
  +			{
  +			memcpy((char *)&SSLv2_server_data,(char *)sslv2_base_method(),
  +				sizeof(SSL_METHOD));
  +			SSLv2_server_data.ssl_accept=ssl2_accept;
  +			SSLv2_server_data.get_ssl_method=ssl2_get_server_method;
  +			init=0;
  +			}
   
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
   		}
  
  Index: s3_clnt.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s3_clnt.c,v
  retrieving revision 1.63
  retrieving revision 1.64
  diff -u -r1.63 -r1.64
  --- s3_clnt.c	2002/09/23 14:25:05	1.63
  +++ s3_clnt.c	2002/09/25 15:38:56	1.64
  @@ -180,11 +180,14 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		memcpy((char *)&SSLv3_client_data,(char *)sslv3_base_method(),
  -			sizeof(SSL_METHOD));
  -		SSLv3_client_data.ssl_connect=ssl3_connect;
  -		SSLv3_client_data.get_ssl_method=ssl3_get_client_method;
  -		init=0;
  +		if (init)
  +			{
  +			memcpy((char *)&SSLv3_client_data,(char *)sslv3_base_method(),
  +				sizeof(SSL_METHOD));
  +			SSLv3_client_data.ssl_connect=ssl3_connect;
  +			SSLv3_client_data.get_ssl_method=ssl3_get_client_method;
  +			init=0;
  +			}
   
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
   		}
  
  Index: s3_lib.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s3_lib.c,v
  retrieving revision 1.62
  retrieving revision 1.63
  diff -u -r1.62 -r1.63
  --- s3_lib.c	2002/08/09 08:56:03	1.62
  +++ s3_lib.c	2002/09/25 15:38:56	1.63
  @@ -1819,16 +1819,19 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL);
   
  -		for (i=0; i<SSL3_NUM_CIPHERS; i++)
  -			sorted[i]= &(ssl3_ciphers[i]);
  +		if (init)
  +			{
  +			for (i=0; i<SSL3_NUM_CIPHERS; i++)
  +				sorted[i]= &(ssl3_ciphers[i]);
   
  -		qsort(	(char *)sorted,
  -			SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  -			FP_ICC ssl_cipher_ptr_id_cmp);
  +			qsort(sorted,
  +				SSL3_NUM_CIPHERS,sizeof(SSL_CIPHER *),
  +				FP_ICC ssl_cipher_ptr_id_cmp);
   
  +			init=0;
  +			}
  +		
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL);
  -
  -		init=0;
   		}
   
   	id=0x03000000L|((unsigned long)p[0]<<8L)|(unsigned long)p[1];
  
  Index: s3_srvr.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/s3_srvr.c,v
  retrieving revision 1.96
  retrieving revision 1.97
  diff -u -r1.96 -r1.97
  --- s3_srvr.c	2002/09/23 14:25:06	1.96
  +++ s3_srvr.c	2002/09/25 15:38:57	1.97
  @@ -183,12 +183,15 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		memcpy((char *)&SSLv3_server_data,(char *)sslv3_base_method(),
  -			sizeof(SSL_METHOD));
  -		SSLv3_server_data.ssl_accept=ssl3_accept;
  -		SSLv3_server_data.get_ssl_method=ssl3_get_server_method;
  -		init=0;
  -
  +		if (init)
  +			{
  +			memcpy((char *)&SSLv3_server_data,(char *)sslv3_base_method(),
  +				sizeof(SSL_METHOD));
  +			SSLv3_server_data.ssl_accept=ssl3_accept;
  +			SSLv3_server_data.get_ssl_method=ssl3_get_server_method;
  +			init=0;
  +			}
  +			
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
   		}
   	return(&SSLv3_server_data);
  
  Index: t1_clnt.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/t1_clnt.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- t1_clnt.c	2002/09/23 14:25:07	1.8
  +++ t1_clnt.c	2002/09/25 15:38:57	1.9
  @@ -81,12 +81,15 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		memcpy((char *)&TLSv1_client_data,(char *)tlsv1_base_method(),
  -			sizeof(SSL_METHOD));
  -		TLSv1_client_data.ssl_connect=ssl3_connect;
  -		TLSv1_client_data.get_ssl_method=tls1_get_client_method;
  -		init=0;
  -
  +		if (init)
  +			{
  +			memcpy((char *)&TLSv1_client_data,(char *)tlsv1_base_method(),
  +				sizeof(SSL_METHOD));
  +			TLSv1_client_data.ssl_connect=ssl3_connect;
  +			TLSv1_client_data.get_ssl_method=tls1_get_client_method;
  +			init=0;
  +			}
  +		
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
   		}
   	return(&TLSv1_client_data);
  
  Index: t1_srvr.c
  ===================================================================
  RCS file: /e/openssl/cvs/openssl/ssl/t1_srvr.c,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- t1_srvr.c	2002/09/23 14:25:07	1.8
  +++ t1_srvr.c	2002/09/25 15:38:57	1.9
  @@ -82,12 +82,15 @@
   		{
   		CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
   
  -		memcpy((char *)&TLSv1_server_data,(char *)tlsv1_base_method(),
  -			sizeof(SSL_METHOD));
  -		TLSv1_server_data.ssl_accept=ssl3_accept;
  -		TLSv1_server_data.get_ssl_method=tls1_get_server_method;
  -		init=0;
  -
  +		if (init)
  +			{
  +			memcpy((char *)&TLSv1_server_data,(char *)tlsv1_base_method(),
  +				sizeof(SSL_METHOD));
  +			TLSv1_server_data.ssl_accept=ssl3_accept;
  +			TLSv1_server_data.get_ssl_method=tls1_get_server_method;
  +			init=0;
  +			}
  +			
   		CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
   		}
   	return(&TLSv1_server_data);
  
  
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
CVS Repository Commit List                     openssl-cvs@openssl.org
Automated List Manager                           majordomo@openssl.org
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic