66 lines
2.2 KiB
Diff
66 lines
2.2 KiB
Diff
From 44eef1b3b566ec73a6d242ca347e6b6111dfabaa Mon Sep 17 00:00:00 2001
|
|
From: Aurelien DARRAGON <adarragon@haproxy.com>
|
|
Date: Tue, 7 Feb 2023 15:51:58 +0100
|
|
Subject: [PATCH] BUG/MINOR: protocol: fix minor memory leak in
|
|
protocol_bind_all()
|
|
|
|
In protocol_bind_all() (involved in startup sequence):
|
|
We only free errmsg (set by fam->bind() attempt) when we make use of it.
|
|
But this could lead to some memory leaks because there are some cases
|
|
where we ignore the error message (e.g: verbose=0 with ERR_WARN messages).
|
|
|
|
As long as errmsg is set, we should always free it.
|
|
|
|
As mentioned earlier, this really is a minor leak because it can only occur on
|
|
specific conditions (error paths) during the startup phase.
|
|
|
|
This may be backported up to 2.4.
|
|
|
|
--
|
|
Backport notes:
|
|
|
|
-> 2.4 only:
|
|
|
|
Replace this:
|
|
|
|
| ha_warning("Binding [%s:%d] for %s %s: %s\n",
|
|
| listener->bind_conf->file, listener->bind_conf->line,
|
|
| proxy_type_str(px), px->id, errmsg);
|
|
|
|
By this:
|
|
|
|
| else if (lerr & ERR_WARN)
|
|
| ha_warning("Starting %s %s: %s\n",
|
|
| proxy_type_str(px), px->id, errmsg);
|
|
|
|
(cherry picked from commit 8429627e3c2eb472dc94ec8d3d7275ef68a79128)
|
|
Signed-off-by: Willy Tarreau <w@1wt.eu>
|
|
(cherry picked from commit da9a15ff0326d59ba38f5a1b258820d91c7df649)
|
|
Signed-off-by: Christopher Faulet <cfaulet@haproxy.com>
|
|
|
|
Conflict: NA
|
|
Reference: https://git.haproxy.org/?p=haproxy-2.6.git;a=commit;h=44eef1b3b566ec73a6d242ca347e6b6111dfabaa
|
|
---
|
|
src/protocol.c | 4 +++-
|
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/protocol.c b/src/protocol.c
|
|
index 03f708591..146733a3f 100644
|
|
--- a/src/protocol.c
|
|
+++ b/src/protocol.c
|
|
@@ -92,8 +92,10 @@ int protocol_bind_all(int verbose)
|
|
ha_warning("Binding [%s:%d] for %s %s: %s\n",
|
|
listener->bind_conf->file, listener->bind_conf->line,
|
|
proxy_type_str(px), px->id, errmsg);
|
|
- ha_free(&errmsg);
|
|
}
|
|
+ if (lerr != ERR_NONE)
|
|
+ ha_free(&errmsg);
|
|
+
|
|
if (lerr & ERR_ABORT)
|
|
break;
|
|
|
|
--
|
|
2.33.0
|
|
|