From 3efd9f39252e59b44df212528b8120147103bc5b Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Tue, 21 May 2024 11:00:37 +0200 Subject: [PATCH] BUG/MINOR: server: free PROXY v2 TLVs on srv drop Dynamically allocated servers PROXY TLVs were not freed on server release. This patch fixes this leak by extending srv_free_params(). Every server line with set-proxy-v2-tlv-fmt keyword is impacted. For static servers, issue is minimal as it will only cause leak on deinit(). However, this could be aggravated when performing multiple removal of dynamic servers. This should be backported up to 2.9. --- src/server.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/server.c b/src/server.c index d0eaa3636..48984fe5c 100644 --- a/src/server.c +++ b/src/server.c @@ -2898,6 +2898,8 @@ void srv_take(struct server *srv) /* deallocate common server parameters (may be used by default-servers) */ void srv_free_params(struct server *srv) { + struct srv_pp_tlv_list *srv_tlv = NULL; + free(srv->cookie); free(srv->rdr_pfx); free(srv->hostname); @@ -2916,6 +2918,14 @@ void srv_free_params(struct server *srv) if (xprt_get(XPRT_SSL) && xprt_get(XPRT_SSL)->destroy_srv) xprt_get(XPRT_SSL)->destroy_srv(srv); + + while (!LIST_ISEMPTY(&srv->pp_tlvs)) { + srv_tlv = LIST_ELEM(srv->pp_tlvs.n, struct srv_pp_tlv_list *, list); + LIST_DEL_INIT(&srv_tlv->list); + lf_expr_deinit(&srv_tlv->fmt); + ha_free(&srv_tlv->fmt_string); + ha_free(&srv_tlv); + } } /* Deallocate a server and its member. must be allocated. For