PR: 2813
authorDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:49:15 +0000 (13:49 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Fri, 11 May 2012 13:49:15 +0000 (13:49 +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 559a8f67367ea152c99c5412ee5afca239c03a90..0831bb316f461cc57b53525be31838eed27c49ae 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,7 +4,8 @@
 
  Changes between 0.9.8x and 0.9.8y [xx XXX xxxx]
 
-  *)
+  *) Fix possible deadlock when decoding public keys.
+     [Steve Henson]
 
  Changes between 0.9.8w and 0.9.8x [10 May 2012]
 
index 94d9f7ebab98979ff2da203a9e91590db24411d1..bc8a7bf32717e1583a10498cea7a74186d83ddab 100644 (file)
@@ -371,12 +371,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);
 err: