libp11
libp11 copied to clipboard
engine_pkcs11 leaks memory
Hey, I've implemented a custom memory tracking in BIND 9 for the external libraries, including OpenSSL, and it found that engine_pkcs11
module is leaking following memory (lines should match OpenSSL 3.0.5):
ptr 0x56056e775b50 size 264 file ../crypto/evp/pmeth_lib.c line 130
ptr 0x56056e708570 size 120 file ../crypto/ec/ec_kmeth.c line 184
ptr 0x56056e708310 size 120 file ../crypto/rsa/rsa_meth.c line 48
ptr 0x56056e708280 size 24 file ../crypto/rsa/rsa_meth.c line 71
ptr 0x56056e774c10 size 264 file ../crypto/evp/pmeth_lib.c line 130
ptr 0x56056e6f6020 size 56 file ../crypto/threads_pthread.c line 50
It's following methods:
-
ptr 0x55dd947bb8f0 size 24 file ../crypto/rsa/rsa_meth.c line 71
-->RSA_meth_set1_name()
-
ptr 0x55dd947bbbe0 size 120 file ../crypto/ec/ec_kmeth.c line 184
-->EC_KEY_METHOD_new()
-
ptr 0x55dd947bb980 size 120 file ../crypto/rsa/rsa_meth.c line 48
-->RSA_meth_dup()
-
ptr 0x55dd948287b0 size 264 file ../crypto/evp/pmeth_lib.c line 130
-->EVP_PKEY_meth_new()
The call tree can be found in the attached PDF: jeprof.pdf
This simple code ENGINE_free(ENGINE_by_id("pkcs11"));
is enough to reproduce the issue.
Looking at the code, it seems like the code that would free the method allocated in PKCS11_get_rsa_method()
(and others) was never actually implemented:
/* This function is *not* currently exported */
void PKCS11_rsa_method_free(void)
{
free_rsa_ex_index();
}
Ssee https://github.com/OpenSC/libp11/pull/470#issuecomment-1219913973 and make sure the free callback is also added. Further comments discuses OpenSSL 1.1 and OpenSSL 3.0 while engines are still available
#471 tries to address the dup problem.
I merged the commits from #471. Is this issue fixed now?