繁体   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