From: Mark Andrews Date: Thu, 29 Dec 2016 00:47:19 +0000 (+1100) Subject: 4510. [security] Named mishandled some responses where covering RRSIG X-Git-Tag: v9.12.0a1~575 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=6adf421e7eb7cac80bc91e1e600346517e980850;p=thirdparty%2Fbind9.git 4510. [security] Named mishandled some responses where covering RRSIG records are returned without the requested data resulting in a assertion failure. (CVE-2016-9147) [RT #43548] --- diff --git a/CHANGES b/CHANGES index 92660e3e96d..51b95137985 100644 --- a/CHANGES +++ b/CHANGES @@ -108,7 +108,10 @@ 4511. [bug] win32: mdig.exe-BNFT was missing Configure. [RT #43554] -4510. [placeholder] +4510. [security] Named mishandled some responses where covering RRSIG + records are returned without the requested data + resulting in a assertion failure. (CVE-2016-9147) + [RT #43548] 4509. [test] Make the rrl system test more reliable on slower machines by using mdig instead of dig. [RT #43280] diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index 83da471833c..699c805d0f4 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -6984,15 +6984,19 @@ answer_response(fetchctx_t *fctx) { * a CNAME or DNAME). */ INSIST(!external); - if ((rdataset->type != - dns_rdatatype_cname) || - !found_dname || - (aflag == - DNS_RDATASETATTR_ANSWER)) + /* + * Don't use found_cname here + * as we have just set it + * above. + */ + if (cname == NULL && + !found_dname && + aflag == + DNS_RDATASETATTR_ANSWER) { have_answer = ISC_TRUE; - if (rdataset->type == - dns_rdatatype_cname) + if (found_cname && + cname == NULL) cname = name; name->attributes |= DNS_NAMEATTR_ANSWER;