summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Kelley <simon@thekelleys.org.uk>2023-03-06 23:00:58 +0000
committerSimon Kelley <simon@thekelleys.org.uk>2023-03-06 23:00:58 +0000
commitf5ef0f064c3f06b250a9eeda36dc239227658b00 (patch)
tree7fe027f541c5ba6741baf94b2790d5069e2c859e
parent997982f78bd3f8c311b9557e1ef825555e7290bb (diff)
downloaddnsmasq-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--CHANGELOG11
-rw-r--r--src/domain-match.c5
2 files changed, 14 insertions, 2 deletions
diff --git a/CHANGELOG b/CHANGELOG
index de9c5e0..3af20cf 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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;
}