Skip to content

Fix data races when accessing bit fields in qpznode_t

Arаm Sаrgsyаn requested to merge 4683-tsan-issue-in-qpzone.c into main

Use a read lock to access the 'node->nsec' bit field.

    WARNING: ThreadSanitizer: data race
      Read of size 1 at 0x000000000001 by thread T0001:
        #0 subtractrdataset lib/dns/qpzone.c:4773 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #1 dns__db_subtractrdataset lib/dns/db.c:731 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #2 diff_apply lib/dns/diff.c:388 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #3 dns_diff_apply lib/dns/diff.c:499 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #4 do_one_tuple lib/ns/update.c:458 (BuildId: 02876a69d51943944c3054ee2ed8a08e2a11b2b6)
        #5 update_soa_serial lib/ns/update.c:1583 (BuildId: 02876a69d51943944c3054ee2ed8a08e2a11b2b6)
        #6 update_action lib/ns/update.c:3342 (BuildId: 02876a69d51943944c3054ee2ed8a08e2a11b2b6)
        #7 isc__async_cb lib/isc/async.c:111 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #8 uv__async_io /usr/src/libuv-v1.48.0/src/unix/async.c:176 (BuildId: 0aec378ee79aadca0ac5ba43ada726c5cac8d3e4)
        #9 thread_body lib/isc/thread.c:85 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #10 thread_run lib/isc/thread.c:100 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)

      Previous write of size 1 at 0x000000000001 by thread T0002 (mutexes: write M0001):
        #0 clean_zone_node lib/dns/qpzone.c:885 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #1 decref lib/dns/qpzone.c:962
        #2 closeversion lib/dns/qpzone.c:1550 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #3 dns__db_closeversion lib/dns/db.c:415 (BuildId: 6bc86bdb26b377d8e0dc8d0ee944cade649d3e93)
        #4 xfrout_ctx_destroy lib/ns/xfrout.c:1674 (BuildId: 02876a69d51943944c3054ee2ed8a08e2a11b2b6)
        #5 xfrout_senddone lib/ns/xfrout.c:1741 (BuildId: 02876a69d51943944c3054ee2ed8a08e2a11b2b6)
        #6 streamdns_writecb netmgr/streamdns.c:648 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #7 isc___nm_sendcb netmgr/netmgr.c:1883 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #8 isc__job_cb lib/isc/job.c:78 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #9 uv__run_idle /usr/src/libuv-v1.48.0/src/unix/loop-watcher.c:68 (BuildId: 0aec378ee79aadca0ac5ba43ada726c5cac8d3e4)
        #10 thread_body lib/isc/thread.c:85 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)
        #11 thread_run lib/isc/thread.c:100 (BuildId: d178689f06914e2d8b3fe30185f0370abd3be5d5)

Closes #4683 (closed)

Merge request reports