From: Willy Tarreau Date: Thu, 28 May 2020 16:07:10 +0000 (+0200) Subject: BUG/MINOR: nameservers: fix error handling in parsing of resolv.conf X-Git-Tag: v2.2-dev9~174 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=78675252fb6ce195c145afd2862fa53087bf585f;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/cfgparse.c b/src/cfgparse.c index 63e150f388..2f0688a4bc 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;