From 78675252fb6ce195c145afd2862fa53087bf585f 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. --- src/cfgparse.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/cfgparse.c b/src/cfgparse.c index 63e150f38..2f0688a4b 100644 --- a/src/cfgparse.c +++ b/src/cfgparse.c @@ -1130,9 +1130,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;