【发布时间】:2015-10-24 15:21:25
【问题描述】:
我一直在将 openssl 集成到应用程序中。这是一个完整的 c 中异步 openssl 示例的尝试。 https://stackoverflow.com/questions/33313838/please-criticize-this-complete-async-openssl-example-in-c
然而,当在实际应用程序中使用 openssl 而不是在该示例中使用时,valgrind 似乎报告了大量的内存泄漏和“条件取决于未初始化的内存”错误。其中一些错误会渗透到应用程序使用的输入中,因此这些错误的堆栈不在 openssl 库中,因此无法抑制。
似乎 openssl 不是 valgrind clean 的设计。有没有 valgrind clean 的 openssl 替代品?
【问题讨论】:
-
放下它。 OpenSSL 嵌入在 Apache HTTPD、OpenLDAP、MySQL 中……这些是主要 产品,其中没有一个会出现内存泄漏。我已经让他们三个都跑了好几年了。
-
@EJP 是的,但是您是否在 valgrind 下运行过这些应用程序?您将看到这些应用程序关闭时使用 openssl 分配的未释放内存,并且它们有无数未初始化的内存读取。谷歌上的 openssl 和 valgrind,你自己就会发现这是一个众所周知的问题。
-
@EJP 即使是官方的 openssl 文档也承认 openssl 存在一些无法清理的内存泄漏。你可以在这里阅读它wiki.openssl.org/index.php/Library_Initialization
-
@JohnCashew:您指的是每个进程(而不是每个上下文或 SSL 对象或类似对象)的单个泄漏,并且仅在清理库时发生,大多数应用程序无论如何都不会这样做。因此,这几乎在所有情况下都不是问题。它实际上是在前一段时间修复的,请参阅引用的错误。