From: Aurelien DARRAGON Date: Wed, 13 Mar 2024 15:29:38 +0000 (+0100) Subject: BUG/MINOR: proxy: fix logformat expression leak in use_backend rules X-Git-Tag: v3.0-dev7~19 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64b5ab87ef32e282fc27fdf53380494512cc3562;p=thirdparty%2Fhaproxy.git BUG/MINOR: proxy: fix logformat expression leak in use_backend rules When support for dynamic names was added for use_backend rules in 702d44f2f ("MEDIUM: proxy: support use_backend with dynamic names"), the sample expression resulting from parse_logformat_string() was only freed for non dynamic rules (when the expression resolved to a simple string node). But for complex expressions (ie: multiple nodes), rule->dynamic was set but the expression was never released, resulting in a small memory leak when freeing the parent proxy. To fix the issue, in free_proxy(), we free the switching rule expression if the switching rule is dynamic. This should be backported to every stable versions. [ada: prior to 2.9, free_logformat_list() helper did not exist: we may use the same manual sample expr freeing logic as in server_rules pruning right above it] --- diff --git a/src/proxy.c b/src/proxy.c index ac446d3b5e..c56007acf1 100644 --- a/src/proxy.c +++ b/src/proxy.c @@ -263,6 +263,8 @@ void free_proxy(struct proxy *p) list_for_each_entry_safe(rule, ruleb, &p->switching_rules, list) { LIST_DELETE(&rule->list); free_acl_cond(rule->cond); + if (rule->dynamic) + free_logformat_list(&rule->be.expr); free(rule->file); free(rule); }