]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: server: free PROXY v2 TLVs on srv drop
authorAmaury Denoyelle <adenoyelle@haproxy.com>
Tue, 21 May 2024 09:00:37 +0000 (11:00 +0200)
committerAmaury Denoyelle <adenoyelle@haproxy.com>
Wed, 22 May 2024 08:01:57 +0000 (10:01 +0200)
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

index d0eaa363685f350533359f01e4c77c15e44851ee..48984fe5c925e0a35eb4d4fe6fe96ded7e793b4b 100644 (file)
@@ -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 <srv> and its member. <srv> must be allocated. For