]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MAJOR: dns: fix the length of the string to be copied
authorWilly Tarreau <w@1wt.eu>
Wed, 22 Jul 2015 14:45:36 +0000 (16:45 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 22 Jul 2015 14:53:22 +0000 (16:53 +0200)
Jan A. Bruder reported that some very specific hostnames on server
lines were causing haproxy to crash on startup. Given that hist
backtrace showed some heap corruption, it was obvious there was an
overflow somewhere. The bug in fact is a typo in dns_str_to_dn_label()
which mistakenly copies one extra byte from the host name into the
output value, thus effectively corrupting the structure.

The bug triggers while parsing the next server of similar length
after the corruption, which generally triggers at config time but
could theorically crash at any moment during runtime depending on
what malloc sizes are needed next. This is why it's tagged major.

No backport is needed, this bug was introduced in 1.6-dev2.

src/dns.c

index 37e041cf0bd144e9fde658d261cf1b65ef04cf6b..5bc57e5609060037eb603f02254f85e9f64c45ce 100644 (file)
--- a/src/dns.c
+++ b/src/dns.c
@@ -947,7 +947,7 @@ char *dns_str_to_dn_label(const char *string, char *dn, int dn_len)
        if (dn_len < i + offset)
                return NULL;
 
-       i = strlen(string) + offset;
+       i = strlen(string);
        memcpy(dn + offset, string, i);
        dn[i + offset] = '\0';
        /* avoid a '\0' at the beginning of dn string which may prevent the for loop