651215c
diff -up openssl-1.0.1c/crypto/asn1/x_pubkey.c.backports openssl-1.0.1c/crypto/asn1/x_pubkey.c
651215c
--- openssl-1.0.1c/crypto/asn1/x_pubkey.c.backports	2012-02-28 15:47:16.000000000 +0100
651215c
+++ openssl-1.0.1c/crypto/asn1/x_pubkey.c	2012-05-15 17:44:14.584128501 +0200
651215c
@@ -175,12 +175,15 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *k
651215c
 	CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
651215c
 	if (key->pkey)
651215c
 		{
651215c
+		CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
651215c
 		EVP_PKEY_free(ret);
651215c
 		ret = key->pkey;
651215c
 		}
651215c
 	else
651215c
+		{
651215c
 		key->pkey = ret;
651215c
-	CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
651215c
+		CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
651215c
+		}
651215c
 	CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
651215c
 
651215c
 	return ret;
651215c
diff -up openssl-1.0.1c/ssl/s3_lib.c.backports openssl-1.0.1c/ssl/s3_lib.c
651215c
--- openssl-1.0.1c/ssl/s3_lib.c.backports	2012-04-17 17:20:17.000000000 +0200
651215c
+++ openssl-1.0.1c/ssl/s3_lib.c	2012-05-15 17:42:43.880139566 +0200
651215c
@@ -1125,7 +1125,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	0, /* not implemented (non-ephemeral DH) */
651215c
 	TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
651215c
 	TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
651215c
-	SSL_kDHr,
651215c
+	SSL_kDHd,
651215c
 	SSL_aDH,
651215c
 	SSL_AES128,
651215c
 	SSL_SHA256,
651215c
@@ -1407,7 +1407,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	0, /* not implemented (non-ephemeral DH) */
651215c
 	TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
651215c
 	TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
651215c
-	SSL_kDHr,
651215c
+	SSL_kDHd,
651215c
 	SSL_aDH,
651215c
 	SSL_AES256,
651215c
 	SSL_SHA256,
651215c
@@ -1958,7 +1958,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	0,
651215c
 	TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
651215c
 	TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
651215c
-	SSL_kDHr,
651215c
+	SSL_kDHd,
651215c
 	SSL_aDH,
651215c
 	SSL_AES128GCM,
651215c
 	SSL_AEAD,
651215c
@@ -1974,7 +1974,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	0,
651215c
 	TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
651215c
 	TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
651215c
-	SSL_kDHr,
651215c
+	SSL_kDHd,
651215c
 	SSL_aDH,
651215c
 	SSL_AES256GCM,
651215c
 	SSL_AEAD,
651215c
@@ -2669,7 +2669,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	1,
651215c
 	TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256,
651215c
 	TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256,
651215c
-	SSL_kECDHe,
651215c
+	SSL_kECDHr,
651215c
 	SSL_aECDH,
651215c
 	SSL_AES128,
651215c
 	SSL_SHA256,
651215c
@@ -2685,7 +2685,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	1,
651215c
 	TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384,
651215c
 	TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384,
651215c
-	SSL_kECDHe,
651215c
+	SSL_kECDHr,
651215c
 	SSL_aECDH,
651215c
 	SSL_AES256,
651215c
 	SSL_SHA384,
651215c
@@ -2799,7 +2799,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	1,
651215c
 	TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256,
651215c
 	TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256,
651215c
-	SSL_kECDHe,
651215c
+	SSL_kECDHr,
651215c
 	SSL_aECDH,
651215c
 	SSL_AES128GCM,
651215c
 	SSL_AEAD,
651215c
@@ -2815,7 +2815,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[]
651215c
 	1,
651215c
 	TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384,
651215c
 	TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384,
651215c
-	SSL_kECDHe,
651215c
+	SSL_kECDHr,
651215c
 	SSL_aECDH,
651215c
 	SSL_AES256GCM,
651215c
 	SSL_AEAD,
651215c
diff -up openssl-1.0.1c/ssl/s3_pkt.c.backports openssl-1.0.1c/ssl/s3_pkt.c
651215c
--- openssl-1.0.1c/ssl/s3_pkt.c.backports	2012-04-17 15:20:19.000000000 +0200
651215c
+++ openssl-1.0.1c/ssl/s3_pkt.c	2012-05-15 17:43:48.470555889 +0200
651215c
@@ -744,6 +744,7 @@ static int do_ssl3_write(SSL *s, int typ
651215c
 	 * bytes and record version number > TLS 1.0
651215c
 	 */
651215c
 	if (s->state == SSL3_ST_CW_CLNT_HELLO_B
651215c
+				&& !s->renegotiate
651215c
 				&& TLS1_get_version(s) > TLS1_VERSION)
651215c
 		*(p++) = 0x1;
651215c
 	else