如何解决使用 openssl 1.0.2k 在我的代码中报告了双重免费
我在我的应用程序中使用 openssl 库 1.0.2k。在某些随机情况下,会出现双重免费错误情况。 基本的代码流程是:
BIO* sbio = NULL;
if (!(con = (SSL *) SSL_new(ctx))) {
sprintf(ReturnBuf,"sweb: Cannot create new SSL connection");
close(sockfd);
SSL_CTX_free(ctx);
return -1;
}
if (!(sbio = BIO_new_socket(sockfd,BIO_NOCLOSE))) {
sprintf(ReturnBuf,"sweb: Cannot create new socket BIO");
close(sockfd);
SSL_shutdown(con);
SSL_free(con);
SSL_CTX_free(ctx);
if (sbio)
BIO_free(sbio);
return -1;
}
SSL_set_bio(con,sbio,sbio);
In case of any ssl error,following snippet gets executed:
close(sockfd);
SSL_shutdown(con);
SSL_free(con);
SSL_CTX_free(ctx);
if (sbio)
BIO_free(sbio);
根据我最近的理解,SSL_free之后不需要bio free操作。所以我做了更改并重新执行了代码。但仍然生成相同的错误。请提出任何可能的根本原因。
解决方法
如果有人愿意帮助您,您需要一个MCVE。
在 Valgrind 或 Address Sanitizer 下运行您的程序,double-free 的来源应该立即显而易见。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。