not set up a half-built reply for cache store, that could
lead to a crash. Thanks to Qifan Zhang, Palo Alto Networks,
for the report.
+ - Fix that malloc failure for new_local_rrset for RPZ qname
+ trigger RR insert does not crash. It does not link a
+ partial RRset, and logs an error on failure, and cleans
+ up the dname allocation. Thanks to Qifan Zhang, Palo Alto
+ Networks, for the report.
16 June 2026: Wouter
- Fix to disallow $INCLUDE for secondary zones. Start up
log_err("out of memory");
return NULL;
}
- rrset->next = node->rrsets;
- node->rrsets = rrset;
rrset->rrset = (struct ub_packed_rrset_key*)
regional_alloc_zero(region, sizeof(*rrset->rrset));
if(!rrset->rrset) {
rrset->rrset->rk.dname_len = node->namelen;
rrset->rrset->rk.type = htons(rrtype);
rrset->rrset->rk.rrset_class = htons(rrclass);
+ rrset->next = node->rrsets;
+ node->rrsets = rrset;
return rrset;
}
char* rrstr = sldns_wire2str_rr(rr, rr_len);
if(rrstr == NULL) {
log_err("malloc error while inserting rpz nsdname trigger");
- free(dname);
+ if(!newzone)
+ free(dname);
lock_rw_unlock(&lz->lock);
return;
}
lock_rw_wrlock(&z->lock);
- local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype,
- rrclass, ttl, rdata, rdata_len, rrstr);
+ if(!local_zone_enter_rr(z, dname, dnamelen, dnamelabs, rrtype,
+ rrclass, ttl, rdata, rdata_len, rrstr)) {
+ log_err("rpz: could not enter local-data: %s", rrstr);
+ if(!newzone)
+ free(dname);
+ lock_rw_unlock(&z->lock);
+ lock_rw_unlock(&lz->lock);
+ free(rrstr);
+ return;
+ }
lock_rw_unlock(&z->lock);
free(rrstr);
}