From a39b4552a931b7def8bb77e8ba7ec86b878adb34 Mon Sep 17 00:00:00 2001 From: Mark Andrews Date: Wed, 28 Aug 2024 13:07:54 +1000 Subject: [PATCH] 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 (cherry picked from commit 43f0b0e8ebafb968ee135beb877c7aa102959949) --- lib/dns/resolver.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/lib/dns/resolver.c b/lib/dns/resolver.c index ded2e296fb..b557b5ac60 100644 --- a/lib/dns/resolver.c +++ b/lib/dns/resolver.c @@ -1562,15 +1562,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). */