File bind-CVE-2021-25214.patch of Package bind.20643

diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c
index d218f747d6..b78053f766 100644
--- a/lib/dns/xfrin.c
+++ b/lib/dns/xfrin.c
@@ -498,6 +498,20 @@ xfr_rr(dns_xfrin_ctx_t *xfr, dns_name_t *name, uint32_t ttl,
 		FAIL(DNS_R_FORMERR);
 	}
 
+	/*
+	 * Immediately reject the entire transfer if the RR that is currently
+	 * being processed is an SOA record that is not placed at the zone
+	 * apex.
+	 */
+	if (rdata->type == dns_rdatatype_soa &&
+	    !dns_name_equal(&xfr->name, name)) {
+		char namebuf[DNS_NAME_FORMATSIZE];
+		dns_name_format(name, namebuf, sizeof(namebuf));
+		xfrin_log(xfr, ISC_LOG_DEBUG(3), "SOA name mismatch: '%s'",
+			  namebuf);
+		FAIL(DNS_R_NOTZONETOP);
+	}
+
 redo:
 	switch (xfr->state) {
 	case XFRST_SOAQUERY:
openSUSE Build Service is sponsored by