微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 openssl 1.0.2k 在我的代码中报告了双重免费

如何解决使用 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

ValgrindAddress Sanitizer 下运行您的程序,double-free 的来源应该立即显而易见。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。