PR: 2813
authorDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:50:09 +0000 (13:50 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:50:09 +0000 (13:50 +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 cc769ecc0250bed7816993d9c343bfe6e1e063db..f7f8cb81fb7c5068d3abc9d9fef3029b5025e35b 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@
 
  Changes between 1.0.0j and 1.0.0k [xx XXX xxxx]
 
-  *)
+  *) Fix possible deadlock when decoding public keys.
+     [Steve Henson]
 
  Changes between 1.0.0i and 1.0.0j [10 May 2012]
 
index 627ec87f9f895502e63a8ee19b38d72d8be90013..b649e1fcf96ce322d5a1422cd5ae58b8ae1715fe 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;