簡體   English   中英

使用libssl / libcrypto進行Segfault

[英]Segfault with libssl/libcrypto

在調試一些代碼時,這更像是一個假設。 假設我有一個應用程序(稱為X)調用lib來通過TLS加密的SMTP連接發送電子郵件,同時X正在與另一個通過同一個libcrypto lib建立另一個TLS套接字的lib進行通信,獲得一些特定(和奇怪)條件的可能性是什么,其中一個函數調用會因segfault而失敗?

我有點抓住稻草,這段代碼工作正常,直到我們添加了通過TLS連接到Skype服務器的Skype SDK,從那時起我們實際上可以讓問題重復,但我有點困惑為什么。 (我可能會忽略顯而易見的事情,但我會從非常奇怪的可能性開始)

從一般來說,這可能是可能的 - 但是編寫良好的庫應該對多重訪問具有強大的功能。 您可能希望查看文檔以查看其API是否可重入(甚至是安全的)。

如果它是線程安全的,那么(假設libcrypto作者沒有犯錯)你可以確定它不是問題的原因。

如果它是可重入的,那么在兩個(或多個)線程中使用此lib的任何東西都應該在訪問時同步(例如,使用互斥),但如果部分代碼不是由您編寫的,並且您無法修改它,那么您卡住了。 我唯一能想到的就是使用另一個版本的libcrypto,因此系統會創建另一個不相關的內部結構實例。 這是丑陋的靈魂,可能在用戶機器上表現得很奇怪。

有一個專門用於OpenSSL庫和線程的整個手冊頁: man 3 threads 如果您的應用程序有多個使用OpenSSL庫的線程,則需要使用此方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM