From 9e99678159559fef7cb016807f41bfaa0c23a81c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Thu, 28 May 2020 18:07:10 +0200 Subject: [PATCH] BUG/MINOR: nameservers: fix error handling in parsing of resolv.conf In issue #657, Coverity found a bug in the "nameserver" parser for the resolv.conf when "parse-resolv-conf" is set. What happens is that if an unparsable address appears on a "nameserver" line, it will destroy the previously allocated pointer before reporting the warning, then the next "nameserver" line will dereference it again and wlil cause a crash. If the faulty nameserver is the last one, it will only be a memory leak. Let's just make sure we preserve the pointer when handling the error. The patch also fixes a typo in the warning. The bug was introduced in 1.9 with commit 44e609bfa ("MINOR: dns: Implement `parse-resolv-conf` directive") so the fix needs to be backported up to 1.9 or 2.0. (cherry picked from commit 78675252fb6ce195c145afd2862fa53087bf585f) Signed-off-by: Willy Tarreau --- src/cfgparse.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 7be15e3..1fe0781 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1160,9 +1160,8 @@ int cfg_parse_resolvers(const char *file, int linenum, char **args, int kwm) continue; memset(sk, 0, sizeof(*sk)); - sk = str2ip2(address, sk, 1); - if (!sk) { - ha_warning("parsing [/etc/resolv.conf:%d] : address '%s' could not be recognized, namerserver will be excluded.\n", + if (!str2ip2(address, sk, 1)) { + ha_warning("parsing [/etc/resolv.conf:%d] : address '%s' could not be recognized, nameserver will be excluded.\n", resolv_linenum, address); err_code |= ERR_WARN; continue; -- 1.7.10.4