Skip to content

[9.20] fix: dev: Fix a data race between dns_zone_getxfr() and dns_xfrin_create()

There is a data race between the statistics channel, which uses dns_zone_getxfr() to get a reference to zone->xfr, and the creation of zone->xfr, because the latter happens outside of a zone lock.

Split the dns_xfrin_create() function into two parts to separate the zone transfer starting part from the zone transfer object creation part. This allows us to attach the new object to a local variable first, then attach it to zone->xfr under a lock, and only then start the transfer.

Closes #5011 (closed)

Backport of MR !9716 (merged)

Merge request reports