Fix memory leak cause by race condition when creating public keys.
Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for reporting this bug.
This commit is contained in:
parent
b66af23aa9
commit
f0be325f88
@ -367,7 +367,16 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
|
|||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
|
||||||
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);
|
CRYPTO_add(&ret->references, 1, CRYPTO_LOCK_EVP_PKEY);
|
||||||
return(ret);
|
return(ret);
|
||||||
err:
|
err:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user