【发布时间】:2017-05-31 05:38:51
【问题描述】:
我正在开发一个需要 RSA 密钥来加密某些用户数据的应用程序。我使用openssl,一切正常。但是,该应用程序不断警告 RSA_new 和 RSA_generate_key_ex 的内存泄漏(我认为这不应该是因为我释放了我创建的所有属性)。
这是我生成 RSA 密钥的代码:
BIGNUM e;
BN_init(&e);
BN_set_word(&e, 17);
RSA *rsa = RSA_new(); // Direct leak of 191 bytes in 1 object (RSA_new->RSA_new_method->...)
RAS_generate_key_ex(rsa, 1024, &e, NULL); // Indirect leak of 279 bytes in 1 object (RAS_generate_key_ex->rsa_builtin_keygen...)
EVP_PKEY pkey = EVP_PKEY_new();
EVP_PKEY_set1_RSA(pkey, rsa);
RSA_free(rsa);
BN_free(&e);
MINE_COPY_KEY(pkey); // I copy the pkey to other location at here //
EVP_PKEY_free(pkey);
我以为我分配的所有内容(e、pkey、rsa)都已由“RSA_free、EVP_PKEY_free 和 BN_free”释放,但它仍然抱怨我的 Linux x64 机器中的内存泄漏
【问题讨论】:
-
尝试使用 Valgrind 查看内存泄漏报告。
-
请显示泄漏。另请参阅 OpenSSL wiki 上的 Library Initialization。它向您展示了如何启动和关闭库。还有Memory leak in OpenSSL?、Memory leak in OpenSSL function EVP_PKEY_keygen、OpenSSL::SSL_library_init() memory leak、Memory leak in OpenSSL function EVP_EncryptFinal_ex 在 Stack Overflow 上。
标签: c encryption memory-leaks openssl rsa