Fix bsnmpd remote denial of service vulnerability. [SA-14:01] Fix ntpd distributed reflection Denial of Service vulnerability. [SA-14:02] Fix OpenSSL multiple vulnerabilities. [SA-14:03] Fix BIND remote denial of service vulnerability. [SA-14:04] Disable hardware RNGs by default. [EN-14:01] Fix incorrect coalescing of stack entry with mmap. [EN-14:02]
54 lines
2 KiB
Diff
54 lines
2 KiB
Diff
Index: contrib/bind9/bin/named/query.c
|
|
===================================================================
|
|
--- contrib/bind9/bin/named/query.c (revision 260523)
|
|
+++ contrib/bind9/bin/named/query.c (working copy)
|
|
@@ -5260,8 +5260,7 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t
|
|
dns_fixedname_t fixed;
|
|
dns_hash_t hash;
|
|
dns_name_t name;
|
|
- int order;
|
|
- unsigned int count;
|
|
+ unsigned int skip = 0, labels;
|
|
dns_rdata_nsec3_t nsec3;
|
|
dns_rdata_t rdata = DNS_RDATA_INIT;
|
|
isc_boolean_t optout;
|
|
@@ -5276,6 +5275,7 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t
|
|
|
|
dns_name_init(&name, NULL);
|
|
dns_name_clone(qname, &name);
|
|
+ labels = dns_name_countlabels(&name);
|
|
dns_clientinfomethods_init(&cm, ns_client_sourceip);
|
|
dns_clientinfo_init(&ci, client);
|
|
|
|
@@ -5309,13 +5309,14 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t
|
|
dns_rdata_reset(&rdata);
|
|
optout = ISC_TF((nsec3.flags & DNS_NSEC3FLAG_OPTOUT) != 0);
|
|
if (found != NULL && optout &&
|
|
- dns_name_fullcompare(&name, dns_db_origin(db), &order,
|
|
- &count) == dns_namereln_subdomain) {
|
|
+ dns_name_issubdomain(&name, dns_db_origin(db)))
|
|
+ {
|
|
dns_rdataset_disassociate(rdataset);
|
|
if (dns_rdataset_isassociated(sigrdataset))
|
|
dns_rdataset_disassociate(sigrdataset);
|
|
- count = dns_name_countlabels(&name) - 1;
|
|
- dns_name_getlabelsequence(&name, 1, count, &name);
|
|
+ skip++;
|
|
+ dns_name_getlabelsequence(qname, skip, labels - skip,
|
|
+ &name);
|
|
ns_client_log(client, DNS_LOGCATEGORY_DNSSEC,
|
|
NS_LOGMODULE_QUERY, ISC_LOG_DEBUG(3),
|
|
"looking for closest provable encloser");
|
|
@@ -5333,7 +5334,11 @@ query_findclosestnsec3(dns_name_t *qname, dns_db_t
|
|
ns_client_log(client, DNS_LOGCATEGORY_DNSSEC,
|
|
NS_LOGMODULE_QUERY, ISC_LOG_WARNING,
|
|
"expected covering NSEC3, got an exact match");
|
|
- if (found != NULL)
|
|
+ if (found == qname) {
|
|
+ if (skip != 0U)
|
|
+ dns_name_getlabelsequence(qname, skip, labels - skip,
|
|
+ found);
|
|
+ } else if (found != NULL)
|
|
dns_name_copy(&name, found, NULL);
|
|
return;
|
|
}
|