2015-10-24 44 views
-2

我一直在將openssl整合到應用程序中。這裏是一個嘗試在c中完整的異步openssl例子。 https://stackoverflow.com/questions/33313838/please-criticize-this-complete-async-openssl-example-in-cc中是否存在沒有內存泄漏和未初始化內存讀取的SSL庫?

但是,在現實世界的應用程序中使用openssl而不是在那個例子中,valgrind報告了大量的內存泄漏,並且'條件取決於未初始化的內存'錯誤。這些錯誤中的一部分泄漏到應用程序使用的輸入中,因此這些錯誤的堆棧不在openssl庫中,因此無法被抑制。

看來,openssl不是valgrind的設計。是否有任何valgrind乾淨的openssl的替代品?

+0

快來吧。 OpenSSL嵌入在Apache HTTPD,OpenLDAP,MySQL中......這些是主要*產品,而不是其中之一展示內存泄漏。我已經有三年都在運行了。 – EJP

+0

@EJP是的,但你有沒有在valgrind下運行這些應用程序?您將看到這些應用程序使用openssl配置的未公開的內存關閉,並且它們具有無數未初始化的內存讀取。谷歌的openssl和valgrind,你自己看,這是一個衆所周知的問題。 –

+0

@EJP即使官方的openssl文檔也承認openssl有一些無法清理的內存泄漏。你可以在這裏閱讀它https://wiki.openssl.org/index.php/Library_Initialization –

回答

3

有沒有在C不會有內存泄漏的SSL庫....

儘管OpenSSL的絕對不是完美無瑕的,我懷疑它與你描述的內存泄漏問題。它被用於許多像nginx這樣的項目中,這些項目編寫並讀取大量SSL數據並執行大量SSL握手,因此內存泄漏將很快出現。這可能是valgrind只是因爲OpenSSL does it's own memory management而感到困惑。

+0

是的,我知道openssl不是valgrind clean。然而,valgrind在openssl中發現的大量泄漏和內存錯誤使我幾乎不可能在我自己的應用程序中使用valgrind,否則valgrind會清理乾淨。 –

+0

@JohnCashew:你可以試試OpenSSL fork LibreSSL。 iMHO這個分支應該使用系統malloc。 –

+0

當使用-DPURIFY和清理庫清理函數列表時,openssl在valgrind下更清晰。 –