diff options
author | Simon Kelley <simon@thekelleys.org.uk> | 2023-03-06 23:00:58 +0000 |
---|---|---|
committer | Simon Kelley <simon@thekelleys.org.uk> | 2023-03-06 23:00:58 +0000 |
commit | f5ef0f064c3f06b250a9eeda36dc239227658b00 (patch) | |
tree | 7fe027f541c5ba6741baf94b2790d5069e2c859e | |
parent | 997982f78bd3f8c311b9557e1ef825555e7290bb (diff) | |
download | dnsmasq-f5ef0f064c3f06b250a9eeda36dc239227658b00.tar.gz |
Fix possible SEGV when no servers defined.
If there exists a --address=/<domain>/ or --server=/<domain>/#
configuration but no upstream server config unqualified by
domain then when a query which doesnt match the domain is
recieved it will use the qualfied server config and in the process
possibly make an out-of-bounds memory access.
Thanks to Daniel Danzberger for spotting the bug.
-rw-r--r-- | CHANGELOG | 11 | ||||
-rw-r--r-- | src/domain-match.c | 5 |
2 files changed, 14 insertions, 2 deletions
@@ -1,3 +1,14 @@ +version 2.90 + Fix reversion in --rev-server introduced in 2.88 which + caused breakage if the prefix length is not exactly divisible + by 8 (IPv4) or 4 (IPv6). + + Fix possible SEGV when there server(s) for a particular + domain are configured, but no server which is not qualified + for a particular domain. Thanks to Daniel Danzberger for + spotting this bug. + + version 2.89 Fix bug introduced in 2.88 (commit fe91134b) which can result in corruption of the DNS cache internal data structures and diff --git a/src/domain-match.c b/src/domain-match.c index fe8e25a..9cc51e6 100644 --- a/src/domain-match.c +++ b/src/domain-match.c @@ -253,9 +253,10 @@ int lookup_domain(char *domain, int flags, int *lowout, int *highout) if (highout) *highout = nhigh; - if (nlow == nhigh) + /* qlen == -1 when we failed to match even an empty query, if there are no default servers. */ + if (nlow == nhigh || qlen == -1) return 0; - + return 1; } |