]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Restore locking in resume_dslookup()
authorMichał Kępień <michal@isc.org>
Tue, 23 Jul 2019 09:43:46 +0000 (11:43 +0200)
committerMichał Kępień <michal@isc.org>
Tue, 23 Jul 2019 09:43:46 +0000 (11:43 +0200)
Commit 9da902a201b6d0e1bdbac0af067a59bb0a489c9c removed locking around
the fctx_decreference() call inside resume_dslookup().  This allows
fctx_unlink() to be called without the bucket lock being held, which
must never happen.  Ensure the bucket lock is held by resume_dslookup()
before it calls fctx_decreference().

lib/dns/resolver.c

index c46abb5db3584f1e18be725d91ae1a241e390782..939df18ea31abe8170e2720097767288b034d8c6 100644 (file)
@@ -7186,7 +7186,9 @@ resume_dslookup(isc_task_t *task, isc_event_t *event) {
        if (dns_rdataset_isassociated(&nameservers)) {
                dns_rdataset_disassociate(&nameservers);
        }
+       LOCK(&res->buckets[fctx->bucketnum].lock);
        bucket_empty = fctx_decreference(fctx);
+       UNLOCK(&res->buckets[fctx->bucketnum].lock);
        if (bucket_empty) {
                empty_bucket(res);
        }