From: Mark Andrews Date: Wed, 28 Aug 2024 03:07:54 +0000 (+1000) Subject: Move lock earlier in the call sequence X-Git-Tag: v9.21.1~8^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=43f0b0e8ebafb968ee135beb877c7aa102959949;p=thirdparty%2Fbind9.git Move lock earlier in the call sequence fctx->state should be read with the lock held. 1559 /* 1560 * Caller must be holding the fctx lock. 1561 */ CID 468796: (#1 of 1): Data race condition (MISSING_LOCK) 1. missing_lock: Accessing fctx->state without holding lock fetchctx.lock. Elsewhere, fetchctx.state is written to with fetchctx.lock held 2 out of 2 times. 1562 REQUIRE(fctx->state == fetchstate_done); 1563 1564 FCTXTRACE("sendevents"); 1565 1566 LOCK(&fctx->lock); 1567 --- diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index a6f12fe4aaa..6643bdc2338 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -1556,15 +1556,12 @@ fctx_sendevents(fetchctx_t *fctx, isc_result_t result) { unsigned int new_spillat = 0; /* initialized to silence * compiler warnings */ - /* - * Caller must be holding the fctx lock. - */ + LOCK(&fctx->lock); + REQUIRE(fctx->state == fetchstate_done); FCTXTRACE("sendevents"); - LOCK(&fctx->lock); - /* * Keep some record of fetch result for logging later (if required). */