Commit f0be325f authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Fix memory leak cause by race condition when creating public keys.

Thanks to Ivan Nestlerode <inestlerode@us.ibm.com> for reporting this bug.
parent b66af23a
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -367,7 +367,16 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
		goto err;
		}

	/* 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);
err: