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