exist on server start, the server continues to start with
a warning log message. Thanks to Qifan Zhang, Palo Alto
Networks, for the report.
+ - Fix that after malloc failure in RPZ load a half built
+ list does not crash later. The newly created RRset is
+ linked after creation has succeeded. Thanks to Qifan Zhang,
+ Palo Alto Networks, for the report.
+
15 June 2026: Wouter
- Fix to add `max-transfer-size` and `max-transfer-time` that
/* from localzone.c; difference is we don't have a dname */
static struct local_rrset*
-rpz_clientip_new_rrset(struct regional* region,
- struct clientip_synthesized_rr* raddr, uint16_t rrtype, uint16_t rrclass)
+rpz_clientip_new_rrset(struct regional* region, uint16_t rrtype,
+ uint16_t rrclass)
{
struct packed_rrset_data* pd;
struct local_rrset* rrset = (struct local_rrset*)
log_err("out of memory");
return NULL;
}
- rrset->next = raddr->data;
- raddr->data = rrset;
rrset->rrset = (struct ub_packed_rrset_key*)
regional_alloc_zero(region, sizeof(*rrset->rrset));
if(rrset->rrset == NULL) {
return 0;
}
- rrset = rpz_clientip_new_rrset(region, raddr, rrtype, rrclass);
- if(raddr->data == NULL) {
+ rrset = rpz_clientip_new_rrset(region, rrtype, rrclass);
+ if(rrset == NULL) {
return 0;
}
- return rrset_insert_rr(region, rrset->rrset->entry.data, rdata, rdata_len, ttl, "");
+ if(!rrset_insert_rr(region, rrset->rrset->entry.data, rdata, rdata_len, ttl, ""))
+ return 0;
+
+ /* Link in now that the allocations have succeeded. */
+ rrset->next = raddr->data;
+ raddr->data = rrset;
+ return 1;
}
static int
lock_rw_wrlock(&node->lock);
lock_rw_unlock(&set->lock);
- node->action = a;
if(a == RPZ_LOCAL_DATA_ACTION) {
if(!rpz_clientip_enter_rr(set->region, node, rrtype,
rrclass, ttl, rdata, rdata_len)) {
}
}
+ node->action = a;
lock_rw_unlock(&node->lock);