From: Yann Ylavic Date: Tue, 31 Jan 2017 23:39:58 +0000 (+0000) Subject: mod_ssl: follow up to r1740928: fix memory leaks. X-Git-Tag: 2.5.0-alpha~717 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ad6088c88d46f3c6ab03fc55ef457f3ecbbec7a6;p=thirdparty%2Fapache%2Fhttpd.git mod_ssl: follow up to r1740928: fix memory leaks. [Reverted by r1781311] git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1781188 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/modules/ssl/ssl_engine_config.c b/modules/ssl/ssl_engine_config.c index 7cc21138bd2..b2a35bf9b8c 100644 --- a/modules/ssl/ssl_engine_config.c +++ b/modules/ssl/ssl_engine_config.c @@ -98,6 +98,12 @@ BOOL ssl_config_global_isfixed(SSLModConfigRec *mc) ** _________________________________________________________________ */ +static apr_status_t modssl_ctx_config_cleanup(void *ctx) +{ + SSL_CONF_CTX_free(ctx); + return APR_SUCCESS; +} + static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p) { mctx->sc = NULL; /* set during module init */ @@ -157,6 +163,9 @@ static void modssl_ctx_init(modssl_ctx_t *mctx, apr_pool_t *p) #endif #ifdef HAVE_SSL_CONF_CMD mctx->ssl_ctx_config = SSL_CONF_CTX_new(); + apr_pool_cleanup_register(p, mctx->ssl_ctx_config, + modssl_ctx_config_cleanup, + apr_pool_cleanup_null); SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_FILE); SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_SERVER); SSL_CONF_CTX_set_flags(mctx->ssl_ctx_config, SSL_CONF_FLAG_CERTIFICATE); diff --git a/modules/ssl/ssl_engine_init.c b/modules/ssl/ssl_engine_init.c index 5af150f1678..26983842b73 100644 --- a/modules/ssl/ssl_engine_init.c +++ b/modules/ssl/ssl_engine_init.c @@ -1617,6 +1617,11 @@ static apr_status_t ssl_init_proxy_ctx(server_rec *s, { apr_status_t rv; + if (proxy->ssl_ctx) { + /* Merged/initialized already */ + return APR_SUCCESS; + } + apr_pool_cleanup_register(p, proxy, ssl_cleanup_proxy_ctx, apr_pool_cleanup_null); @@ -1687,7 +1692,6 @@ static apr_status_t ssl_init_server_ctx(server_rec *s, ssl_log_ssl_error(SSLLOG_MARK, APLOG_EMERG, s); return ssl_die(s); } - SSL_CONF_CTX_free(cctx); #endif if (SSL_CTX_check_private_key(sc->server->ssl_ctx) != 1) {