diff options
author | Dusan Klinec <dusan.klinec@gmail.com> | 2019-03-08 18:27:24 +0100 |
---|---|---|
committer | Dusan Klinec <dusan.klinec@gmail.com> | 2019-03-10 20:09:51 +0100 |
commit | bb8eab24dac9974a5b4147e47bf09d98351a6ae4 (patch) | |
tree | 5b5b6db4cd5f5fd41aed9a6c8c1b38992ae84787 | |
parent | Merge pull request #5257 (diff) | |
download | monero-bb8eab24dac9974a5b4147e47bf09d98351a6ae4.tar.xz |
epee: certificate generation fix, pkey deleted
- pkey gets deleted by the pkey_deleter but the caller tries to serialize it which causes errors as the memory is freed
-rw-r--r-- | contrib/epee/src/net_ssl.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/contrib/epee/src/net_ssl.cpp b/contrib/epee/src/net_ssl.cpp index 7154d4d33..eb0b0ad65 100644 --- a/contrib/epee/src/net_ssl.cpp +++ b/contrib/epee/src/net_ssl.cpp @@ -74,22 +74,23 @@ bool create_ssl_certificate(EVP_PKEY *&pkey, X509 *&cert) { MGINFO("Generating SSL certificate"); pkey = EVP_PKEY_new(); - openssl_pkey pkey_deleter{pkey}; if (!pkey) { MERROR("Failed to create new private key"); return false; } + + openssl_pkey pkey_deleter{pkey}; RSA *rsa = RSA_generate_key(4096, RSA_F4, NULL, NULL); if (!rsa) { MERROR("Error generating RSA private key"); return false; } - if (EVP_PKEY_assign_RSA(pkey, rsa) <= 0) + if (EVP_PKEY_assign_RSA(pkey, rsa) <= 0) // The RSA will be automatically freed when the EVP_PKEY structure is freed. { - RSA_free(rsa); MERROR("Error assigning RSA private key"); + RSA_free(rsa); return false; } @@ -117,6 +118,7 @@ bool create_ssl_certificate(EVP_PKEY *&pkey, X509 *&cert) X509_free(cert); return false; } + (void)pkey_deleter.release(); return true; } |