projects
/
oweals
/
openssl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
2f31308
)
Fix memory leak cause by race condition when creating public keys.
author
Dr. Stephen Henson
<steve@openssl.org>
Tue, 28 Feb 2012 14:47:25 +0000
(14:47 +0000)
committer
Dr. Stephen Henson
<steve@openssl.org>
Tue, 28 Feb 2012 14:47:25 +0000
(14:47 +0000)
Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for reporting this bug.
crypto/asn1/x_pubkey.c
patch
|
blob
|
history
diff --git
a/crypto/asn1/x_pubkey.c
b/crypto/asn1/x_pubkey.c
index d42b6a2c54cbac464edac9f8888b18d2520a38fb..627ec87f9f895502e63a8ee19b38d72d8be90013 100644
(file)
--- a/
crypto/asn1/x_pubkey.c
+++ b/
crypto/asn1/x_pubkey.c
@@
-171,7
+171,16
@@
EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
goto error;
}
- key->pkey = ret;
+ /* Check to see if another thread set key->pkey first */
+ CRYPTO_w_lock(CRYPTO_LOCK_EVP_PKEY);
+ if (key->pkey)
+ {
+ EVP_PKEY_free(ret);
+ ret = key->pkey;
+ }
+ else
+ key->pkey = ret;
+ CRYPTO_w_unlock(CRYPTO_LOCK_EVP_PKEY);
CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
return ret;