PR: 2813
authorDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:53:37 +0000 (13:53 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:53:37 +0000 (13:53 +0000)
Reported by: Constantine Sapuntzakis <csapuntz@gmail.com>

Fix possible deadlock when decoding public keys.

CHANGES
crypto/asn1/x_pubkey.c

diff --git a/CHANGES b/CHANGES
index 4baace1..7cca7f0 100644 (file)
--- a/CHANGES
+++ b/CHANGES
 
  Changes between 1.0.1c and 1.0.1d [xx XXX xxxx]
 
+  *) Fix possible deadlock when decoding public keys.
+     [Steve Henson]
+
   *) Don't use TLS 1.0 record version number in initial client hello
      if renegotiating.
      [Steve Henson]
index 627ec87..b649e1f 100644 (file)
@@ -175,12 +175,15 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
        CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
        if (key->pkey)
                {
+               CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
                EVP_PKEY_free(ret);
                ret = key->pkey;
                }
        else
+               {
                key->pkey = ret;
-       CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
+               CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
+               }
        CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
 
        return ret;