diff --git a/src/cfgparse-ssl.c b/src/cfgparse-ssl.c index 0204dca79..583461d6a 100644 --- a/src/cfgparse-ssl.c +++ b/src/cfgparse-ssl.c @@ -1651,6 +1651,7 @@ static int srv_parse_check_sni(char **args, int *cur_arg, struct proxy *px, stru return ERR_ALERT | ERR_FATAL; } + free(newsrv->check.sni); newsrv->check.sni = strdup(args[*cur_arg + 1]); if (!newsrv->check.sni) { memprintf(err, "'%s' : failed to allocate memory", args[*cur_arg]); diff --git a/src/check.c b/src/check.c index c994108ac..186ddb019 100644 --- a/src/check.c +++ b/src/check.c @@ -1574,6 +1574,7 @@ void free_check(struct check *check) } ha_free(&check->pool_conn_name); + ha_free(&check->sni); ha_free(&check->alpn_str); task_destroy(check->task); diff --git a/src/server.c b/src/server.c index ccaa1665a..cfdf9cdf2 100644 --- a/src/server.c +++ b/src/server.c @@ -2900,7 +2900,8 @@ void srv_settings_cpy(struct server *srv, const struct server *src, int srv_tmpl srv->agent.addr = src->agent.addr; srv->check.use_ssl = src->check.use_ssl; srv->check.port = src->check.port; - srv->check.sni = src->check.sni; + if (src->check.sni != NULL) + srv->check.sni = strdup(src->check.sni); if (src->check.alpn_str) { srv->check.alpn_str = malloc(src->check.alpn_len); if (srv->check.alpn_str) {