-1

我在我的应用程序中使用 openssl library 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 操作。所以我做了更改并重新执行了代码。但是仍然会产生相同的错误。请提出任何可能的根本原因。

4

1 回答 1

0

对于任何可以帮助您的人,您都需要一个MCVE

在ValgrindAddress Sanitizer下运行你的程序,double-free 的来源应该立即变得明显。

于 2021-03-27T00:48:30.267 回答