【问题标题】:Is there an SSL library in c that does not have memory leaks and uninitialized memory reads? [closed]c 中是否有没有内存泄漏和未初始化内存读取的 SSL 库? [关闭]
【发布时间】: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 对象或类似对象)的单个泄漏,并且仅在清理库时发生,大多数应用程序无论如何都不会这样做。因此,这几乎在所有情况下都不是问题。它实际上是在前一段时间修复的,请参阅引用的错误。

标签: c ssl openssl valgrind


【解决方案1】:

c 中是否有没有内存泄漏的 SSL 库......

虽然 OpenSSL 绝对不是完美无缺的,但我怀疑它存在您描述的内存泄漏问题。它被用于许多项目中,例如 nginx,这些项目写入和读取大量 SSL 数据并进行大量 SSL 握手,因此内存泄漏很快就会浮出水面。可能是因为OpenSSL does it's own memory management,valgrind 很困惑。

【讨论】:

  • 是的,我知道 openssl 不是 valgrind clean。然而,valgrind 在 openssl 中发现的大量泄漏和内存错误使我几乎不可能在我自己的应用程序上使用 valgrind,否则 valgrind 是干净的。
  • @JohnCashew:你可以试试 OpenSSL fork LibreSSL。恕我直言,这个 fork 应该使用系统 malloc。
  • openssl 在 valgrind 下使用 -DPURIFY 配置和调用库清理函数列表时更加干净。
猜你喜欢
  • 2012-11-18
  • 2013-08-12
  • 2011-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-30
  • 1970-01-01
  • 2013-03-08
相关资源
最近更新 更多