BIND issues
https://gitlab.isc.org/isc-projects/bind9/-/issues
2024-02-24T07:54:00Z
https://gitlab.isc.org/isc-projects/bind9/-/issues/4475
Data races in isc_buffer_peekuint8, rdataset_settrust, and memmove
2024-02-24T07:54:00Z
Michal Nowak
Data races in isc_buffer_peekuint8, rdataset_settrust, and memmove
Job [#3848477](https://gitlab.isc.org/isc-projects/bind9/-/jobs/3848477) failed for c4fcdbefc5ac65e62f8d16ba78737aa6174c9592.
There are three new types of TSAN errors in the failed `respdiff-long:tsan` CI job.
I did not happen [yesterd...
Job [#3848477](https://gitlab.isc.org/isc-projects/bind9/-/jobs/3848477) failed for c4fcdbefc5ac65e62f8d16ba78737aa6174c9592.
There are three new types of TSAN errors in the failed `respdiff-long:tsan` CI job.
I did not happen [yesterday](https://gitlab.isc.org/isc-projects/bind9/-/jobs/3843810) on 64ef6968f379fa220c2a2d76311705b4e248e286, so should this be caused by a new code, the only theoretically relevant MR is !8515.
```
WARNING: ThreadSanitizer: data race
Read of size 1 at 0x000000000001 by main thread:
#0 isc_buffer_peekuint8 ../../lib/isc/include/isc/buffer.h:847
#1 isc_buffer_getuint8 ../../lib/isc/include/isc/buffer.h:854
#2 dns_ncache_getsigrdataset lib/dns/ncache.c:630
#3 validate_ncache lib/dns/validator.c:2388
#4 validate_nx lib/dns/validator.c:2431
#5 validator_start lib/dns/validator.c:2994
#6 isc__async_cb lib/isc/async.c:111
#7 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#8 thread_body lib/isc/thread.c:85
#9 isc_thread_main lib/isc/thread.c:116
#10 isc_loopmgr_run lib/isc/loop.c:454
#11 main bin/named/main.c:1574
Previous write of size 1 at 0x000000000001 by thread T0001:
#0 rdataset_settrust lib/dns/ncache.c:499
#1 dns_rdataset_settrust lib/dns/rdataset.c:597
#2 marksecure lib/dns/validator.c:202
#3 validate_answer lib/dns/validator.c:1528
#4 validator_start lib/dns/validator.c:2935
#5 isc__async_cb lib/isc/async.c:111
#6 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#7 thread_body lib/isc/thread.c:85
#8 thread_run lib/isc/thread.c:100
Location is heap block of size 1015 at 0x000000000020 allocated by main thread:
#0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647
#1 mallocx lib/isc/jemalloc_shim.h:67
#2 mem_get lib/isc/mem.c:303
#3 isc__mem_get lib/isc/mem.c:675
#4 dns_rdataslab_fromrdataset lib/dns/rdataslab.c:332
#5 dns__rbtdb_addrdataset lib/dns/rbtdb.c:3153
#6 dns__db_addrdataset lib/dns/db.c:681
#7 addoptout lib/dns/ncache.c:283
#8 dns_ncache_add lib/dns/ncache.c:103
#9 ncache_adderesult lib/dns/resolver.c:6358
#10 validated lib/dns/resolver.c:5385
#11 validator_done_cb lib/dns/validator.c:210
#12 isc__async_cb lib/isc/async.c:111
#13 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#14 thread_body lib/isc/thread.c:85
#15 isc_thread_main lib/isc/thread.c:116
#16 isc_loopmgr_run lib/isc/loop.c:454
#17 main bin/named/main.c:1574
Thread T0001 'isc-loop-0002' (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001
#1 isc_thread_create lib/isc/thread.c:139
#2 isc_loopmgr_run lib/isc/loop.c:448
#3 main bin/named/main.c:1574
SUMMARY: ThreadSanitizer: data race ../../lib/isc/include/isc/buffer.h:847 in isc_buffer_peekuint8
```
```
WARNING: ThreadSanitizer: data race
Write of size 1 at 0x000000000001 by main thread:
#0 rdataset_settrust lib/dns/ncache.c:499
#1 dns_rdataset_settrust lib/dns/rdataset.c:597
#2 marksecure lib/dns/validator.c:202
#3 validate_answer lib/dns/validator.c:1528
#4 validator_start lib/dns/validator.c:2935
#5 isc__async_cb lib/isc/async.c:111
#6 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#7 thread_body lib/isc/thread.c:85
#8 isc_thread_main lib/isc/thread.c:116
#9 isc_loopmgr_run lib/isc/loop.c:454
#10 main bin/named/main.c:1574
Previous write of size 1 at 0x000000000001 by thread T0001:
#0 rdataset_settrust lib/dns/ncache.c:499
#1 dns_rdataset_settrust lib/dns/rdataset.c:597
#2 marksecure lib/dns/validator.c:202
#3 validate_answer lib/dns/validator.c:1528
#4 validator_start lib/dns/validator.c:2935
#5 isc__async_cb lib/isc/async.c:111
#6 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#7 thread_body lib/isc/thread.c:85
#8 thread_run lib/isc/thread.c:100
Location is heap block of size 1015 at 0x000000000014 allocated by thread T0002:
#0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647
#1 mallocx lib/isc/jemalloc_shim.h:67
#2 mem_get lib/isc/mem.c:303
#3 isc__mem_get lib/isc/mem.c:675
#4 dns_rdataslab_fromrdataset lib/dns/rdataslab.c:332
#5 dns__rbtdb_addrdataset lib/dns/rbtdb.c:3153
#6 dns__db_addrdataset lib/dns/db.c:681
#7 addoptout lib/dns/ncache.c:283
#8 dns_ncache_add lib/dns/ncache.c:103
#9 ncache_adderesult lib/dns/resolver.c:6358
#10 validated lib/dns/resolver.c:5385
#11 validator_done_cb lib/dns/validator.c:210
#12 isc__async_cb lib/isc/async.c:111
#13 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#14 thread_body lib/isc/thread.c:85
#15 thread_run lib/isc/thread.c:100
Thread T0001 'isc-loop-0001' (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001
#1 isc_thread_create lib/isc/thread.c:139
#2 isc_loopmgr_run lib/isc/loop.c:448
#3 main bin/named/main.c:1574
Thread T0002 'isc-loop-0002' (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001
#1 isc_thread_create lib/isc/thread.c:139
#2 isc_loopmgr_run lib/isc/loop.c:448
#3 main bin/named/main.c:1574
SUMMARY: ThreadSanitizer: data race lib/dns/ncache.c:499 in rdataset_settrust
```
```
WARNING: ThreadSanitizer: data race
Read of size 8 at 0x000000000001 by main thread:
#0 memmove ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:810
#1 memmove ../../../../src/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc:808
#2 memmove /usr/include/x86_64-linux-gnu/bits/string_fortified.h:36
#3 dns_name_fromregion lib/dns/name.c:739
#4 dns_ncache_current lib/dns/ncache.c:701
#5 validate_ncache lib/dns/validator.c:2382
#6 validate_nx lib/dns/validator.c:2431
#7 validator_start lib/dns/validator.c:2994
#8 isc__async_cb lib/isc/async.c:111
#9 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#10 thread_body lib/isc/thread.c:85
#11 isc_thread_main lib/isc/thread.c:116
#12 isc_loopmgr_run lib/isc/loop.c:454
#13 main bin/named/main.c:1574
Previous write of size 1 at 0x000000000014 by thread T0001:
#0 rdataset_settrust lib/dns/ncache.c:499
#1 dns_rdataset_settrust lib/dns/rdataset.c:597
#2 marksecure lib/dns/validator.c:200
#3 validate_answer lib/dns/validator.c:1528
#4 validator_start lib/dns/validator.c:2935
#5 isc__async_cb lib/isc/async.c:111
#6 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#7 thread_body lib/isc/thread.c:85
#8 thread_run lib/isc/thread.c:100
Location is heap block of size 1047 at 0x000000000021 allocated by thread T0001:
#0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:647
#1 mallocx lib/isc/jemalloc_shim.h:67
#2 mem_get lib/isc/mem.c:303
#3 isc__mem_get lib/isc/mem.c:675
#4 dns_rdataslab_fromrdataset lib/dns/rdataslab.c:332
#5 dns__rbtdb_addrdataset lib/dns/rbtdb.c:3153
#6 dns__db_addrdataset lib/dns/db.c:681
#7 addoptout lib/dns/ncache.c:283
#8 dns_ncache_add lib/dns/ncache.c:103
#9 ncache_adderesult lib/dns/resolver.c:6358
#10 validated lib/dns/resolver.c:5385
#11 validator_done_cb lib/dns/validator.c:210
#12 isc__async_cb lib/isc/async.c:111
#13 uv__async_io /usr/src/libuv-v1.47.0/src/unix/async.c:176
#14 thread_body lib/isc/thread.c:85
#15 thread_run lib/isc/thread.c:100
Thread T0001 'isc-loop-0001' (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:1001
#1 isc_thread_create lib/isc/thread.c:139
#2 isc_loopmgr_run lib/isc/loop.c:448
#3 main bin/named/main.c:1574
SUMMARY: ThreadSanitizer: data race /usr/include/x86_64-linux-gnu/bits/string_fortified.h:36 in memmove
```
I restarted the job, and this is a [reproducible issue](https://gitlab.isc.org/isc-projects/bind9/-/jobs/3849392).
May 2024 (9.18.27, 9.18.27-S1, 9.19.24)
Mark Andrews
Mark Andrews
https://gitlab.isc.org/isc-projects/bind9/-/issues/4118
Data race lib/dns/adb.c:1537 in clean_finds_at_name
2023-09-04T09:09:22Z
Michal Nowak
Data race lib/dns/adb.c:1537 in clean_finds_at_name
Job [respdiff-long:tsan](https://gitlab.isc.org/isc-private/bind9/-/jobs/3440993) failed for [d2fbe443b833d093f68bf4f5a1736242fc8d18a1](https://gitlab.isc.org/isc-private/bind9/-/commit/d2fbe443b833d093f68bf4f5a1736242fc8d18a1) (~"v9.18-...
Job [respdiff-long:tsan](https://gitlab.isc.org/isc-private/bind9/-/jobs/3440993) failed for [d2fbe443b833d093f68bf4f5a1736242fc8d18a1](https://gitlab.isc.org/isc-private/bind9/-/commit/d2fbe443b833d093f68bf4f5a1736242fc8d18a1) (~"v9.18-S").
```
WARNING: ThreadSanitizer: data race
Write of size 4 at 0x000000000001 by thread T1 (mutexes: write M1, write M2):
#0 clean_finds_at_name lib/dns/adb.c:1537
#1 fetch_callback lib/dns/adb.c:4009
#2 task_run lib/isc/task.c:815
#3 isc_task_run lib/isc/task.c:896
#4 isc__nm_async_task netmgr/netmgr.c:848
#5 process_netievent netmgr/netmgr.c:920
#6 process_queue netmgr/netmgr.c:1013
#7 process_all_queues netmgr/netmgr.c:767
#8 async_cb netmgr/netmgr.c:796
#9 uv__async_io /usr/src/libuv-v1.44.1/src/unix/async.c:163
#10 isc__trampoline_run lib/isc/trampoline.c:189
Previous read of size 4 at 0x000000000001 by thread T2:
#0 findname lib/dns/resolver.c:3749
#1 fctx_getaddresses lib/dns/resolver.c:3993
#2 fctx_try lib/dns/resolver.c:4390
#3 rctx_nextserver lib/dns/resolver.c:10356
#4 rctx_done lib/dns/resolver.c:10503
#5 resquery_response lib/dns/resolver.c:8511
#6 udp_recv lib/dns/dispatch.c:638
#7 isc__nm_async_readcb netmgr/netmgr.c:2885
#8 isc__nm_readcb netmgr/netmgr.c:2858
#9 udp_recv_cb netmgr/udp.c:650
#10 isc__nm_udp_read_cb netmgr/udp.c:1057
#11 uv__udp_recvmsg /usr/src/libuv-v1.44.1/src/unix/udp.c:303
#12 isc__trampoline_run lib/isc/trampoline.c:189
Location is heap block of size 256 at 0x000000000025 allocated by thread T2:
#0 malloc ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:651
#1 mallocx lib/isc/jemalloc_shim.h:35
#2 mem_get lib/isc/mem.c:343
#3 isc__mem_get lib/isc/mem.c:761
#4 new_adbfind lib/dns/adb.c:1901
#5 dns_adb_createfind lib/dns/adb.c:2934
#6 findname lib/dns/resolver.c:3656
#7 fctx_getaddresses lib/dns/resolver.c:3993
#8 fctx_try lib/dns/resolver.c:4390
#9 rctx_nextserver lib/dns/resolver.c:10356
#10 rctx_done lib/dns/resolver.c:10503
#11 resquery_response lib/dns/resolver.c:8511
#12 udp_recv lib/dns/dispatch.c:638
#13 isc__nm_async_readcb netmgr/netmgr.c:2885
#14 isc__nm_readcb netmgr/netmgr.c:2858
#15 udp_recv_cb netmgr/udp.c:650
#16 isc__nm_udp_read_cb netmgr/udp.c:1057
#17 uv__udp_recvmsg /usr/src/libuv-v1.44.1/src/unix/udp.c:303
#18 isc__trampoline_run lib/isc/trampoline.c:189
Mutex M1 is already destroyed.
Mutex M2 is already destroyed.
Thread T1 (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:962
#1 isc_thread_create lib/isc/thread.c:73
#2 isc__netmgr_create netmgr/netmgr.c:311
#3 isc_managers_create lib/isc/managers.c:31
#4 create_managers bin/named/main.c:1042
#5 setup bin/named/main.c:1313
#6 main bin/named/main.c:1594
Thread T2 (running) created by main thread at:
#0 pthread_create ../../../../src/libsanitizer/tsan/tsan_interceptors_posix.cpp:962
#1 isc_thread_create lib/isc/thread.c:73
#2 isc__netmgr_create netmgr/netmgr.c:311
#3 isc_managers_create lib/isc/managers.c:31
#4 create_managers bin/named/main.c:1042
#5 setup bin/named/main.c:1313
#6 main bin/named/main.c:1594
SUMMARY: ThreadSanitizer: data race lib/dns/adb.c:1537 in clean_finds_at_name
```
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/3906
ThreadSanitizer: data race lib/dns/request.c:1020 in req_senddone (v9_18)
2023-03-01T16:11:39Z
Arаm Sаrgsyаn
ThreadSanitizer: data race lib/dns/request.c:1020 in req_senddone (v9_18)
TSAN report during the `xferquota` system test on commit 6b7d2df6 (based on `9_18`): https://gitlab.isc.org/isc-projects/bind9/-/jobs/3201521
```
==================
WARNING: ThreadSanitizer: data race (pid=24022)
Read of size 4 at 0x7...
TSAN report during the `xferquota` system test on commit 6b7d2df6 (based on `9_18`): https://gitlab.isc.org/isc-projects/bind9/-/jobs/3201521
```
==================
WARNING: ThreadSanitizer: data race (pid=24022)
Read of size 4 at 0x7b44000615a0 by thread T6:
#0 req_senddone /builds/isc-projects/bind9/lib/dns/request.c:1020 (libdns-9.18.13-dev.so+0x1814d3)
#1 send_done /builds/isc-projects/bind9/lib/dns/dispatch.c:2061 (libdns-9.18.13-dev.so+0x68967)
#2 isc__nm_async_sendcb netmgr/netmgr.c:2930 (libisc-9.18.13-dev.so+0x2967b)
#3 isc__nm_sendcb netmgr/netmgr.c:2906 (libisc-9.18.13-dev.so+0x298ec)
#4 udp_send_cb netmgr/udp.c:806 (libisc-9.18.13-dev.so+0x3f9ec)
#5 uv__udp_run_completed /usr/src/libuv-v1.44.1/src/unix/udp.c:155 (libuv.so.1+0x264f2)
#6 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.18.13-dev.so+0x80114)
Previous write of size 4 at 0x7b44000615a0 by thread T2 (mutexes: write M55023186806375632, write M56149086713218488):
#0 request_cancel /builds/isc-projects/bind9/lib/dns/request.c:889 (libdns-9.18.13-dev.so+0x181130)
#1 dns_request_cancel /builds/isc-projects/bind9/lib/dns/request.c:905 (libdns-9.18.13-dev.so+0x18191b)
#2 dns_requestmgr_shutdown /builds/isc-projects/bind9/lib/dns/request.c:230 (libdns-9.18.13-dev.so+0x181a9b)
#3 view_flushanddetach /builds/isc-projects/bind9/lib/dns/view.c:656 (libdns-9.18.13-dev.so+0x1ed89e)
#4 dns_view_detach /builds/isc-projects/bind9/lib/dns/view.c:716 (libdns-9.18.13-dev.so+0x1ed96f)
#5 ns_client_endrequest /builds/isc-projects/bind9/lib/ns/client.c:246 (libns-9.18.13-dev.so+0x13ceb)
#6 ns__client_reset_cb /builds/isc-projects/bind9/lib/ns/client.c:1621 (libns-9.18.13-dev.so+0x13ceb)
#7 nmhandle_detach_cb netmgr/netmgr.c:1851 (libisc-9.18.13-dev.so+0x279e5)
#8 isc__nm_async_detach netmgr/netmgr.c:2960 (libisc-9.18.13-dev.so+0x2ba57)
#9 process_netievent netmgr/netmgr.c:981 (libisc-9.18.13-dev.so+0x2ba57)
#10 process_queue netmgr/netmgr.c:1013 (libisc-9.18.13-dev.so+0x2bdce)
#11 process_all_queues netmgr/netmgr.c:767 (libisc-9.18.13-dev.so+0x2cb44)
#12 async_cb netmgr/netmgr.c:796 (libisc-9.18.13-dev.so+0x2cb44)
#13 uv__async_io /usr/src/libuv-v1.44.1/src/unix/async.c:163 (libuv.so.1+0x1118e)
#14 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.18.13-dev.so+0x80114)
Location is heap block of size 280 at 0x7b4400061580 allocated by thread T6:
#0 malloc <null> (libtsan.so.2+0x3f618)
#1 mallocx /builds/isc-projects/bind9/lib/isc/jemalloc_shim.h:35 (libisc-9.18.13-dev.so+0x5d262)
#2 mem_get /builds/isc-projects/bind9/lib/isc/mem.c:343 (libisc-9.18.13-dev.so+0x5d262)
#3 isc__mem_get /builds/isc-projects/bind9/lib/isc/mem.c:761 (libisc-9.18.13-dev.so+0x5dfea)
#4 new_request /builds/isc-projects/bind9/lib/dns/request.c:362 (libdns-9.18.13-dev.so+0x17e093)
#5 dns_request_create /builds/isc-projects/bind9/lib/dns/request.c:665 (libdns-9.18.13-dev.so+0x180749)
#6 notify_send_toaddr /builds/isc-projects/bind9/lib/dns/zone.c:12693 (libdns-9.18.13-dev.so+0x211206)
#7 task_run /builds/isc-projects/bind9/lib/isc/task.c:815 (libisc-9.18.13-dev.so+0x745c5)
#8 isc_task_run /builds/isc-projects/bind9/lib/isc/task.c:896 (libisc-9.18.13-dev.so+0x745c5)
#9 isc__nm_async_task netmgr/netmgr.c:848 (libisc-9.18.13-dev.so+0x1fdeb)
#10 process_netievent netmgr/netmgr.c:920 (libisc-9.18.13-dev.so+0x2b0fd)
#11 process_queue netmgr/netmgr.c:1013 (libisc-9.18.13-dev.so+0x2bdce)
#12 process_all_queues netmgr/netmgr.c:767 (libisc-9.18.13-dev.so+0x2cb44)
#13 async_cb netmgr/netmgr.c:796 (libisc-9.18.13-dev.so+0x2cb44)
#14 uv__async_io /usr/src/libuv-v1.44.1/src/unix/async.c:163 (libuv.so.1+0x1118e)
#15 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.18.13-dev.so+0x80114)
Mutex M55023186806375632 is already destroyed.
Mutex M56149086713218488 is already destroyed.
Thread T6 'isc-net-0005' (tid=24096, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.2+0x5f0e6)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:73 (libisc-9.18.13-dev.so+0x76b3a)
#2 isc__netmgr_create netmgr/netmgr.c:311 (libisc-9.18.13-dev.so+0x20890)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:31 (libisc-9.18.13-dev.so+0x5c8f3)
#4 create_managers /builds/isc-projects/bind9/bin/named/main.c:1029 (named+0x427f86)
#5 setup /builds/isc-projects/bind9/bin/named/main.c:1293 (named+0x427f86)
#6 main /builds/isc-projects/bind9/bin/named/main.c:1562 (named+0x427f86)
Thread T2 'isc-net-0001' (tid=24073, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.2+0x5f0e6)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:73 (libisc-9.18.13-dev.so+0x76b3a)
#2 isc__netmgr_create netmgr/netmgr.c:311 (libisc-9.18.13-dev.so+0x20890)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:31 (libisc-9.18.13-dev.so+0x5c8f3)
#4 create_managers /builds/isc-projects/bind9/bin/named/main.c:1029 (named+0x427f86)
#5 setup /builds/isc-projects/bind9/bin/named/main.c:1293 (named+0x427f86)
#6 main /builds/isc-projects/bind9/bin/named/main.c:1562 (named+0x427f86)
SUMMARY: ThreadSanitizer: data race /builds/isc-projects/bind9/lib/dns/request.c:1020 in req_senddone
==================
ThreadSanitizer: reported 1 warnings
```
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/3509
TSAN: TLS and DoH shutdown sequence
2023-05-23T15:25:04Z
Ondřej Surý
TSAN: TLS and DoH shutdown sequence
TSAN reports a warning where the underlying socket is not yet destroyed after `isc_nm_stoplistening()`, but the top socket already is.
The problem is that `isc_nm_stoplistening()` pretends to be synchronous, but it really isn't and we n...
TSAN reports a warning where the underlying socket is not yet destroyed after `isc_nm_stoplistening()`, but the top socket already is.
The problem is that `isc_nm_stoplistening()` pretends to be synchronous, but it really isn't and we need to add per-thread child socket for TLS(stream) and DoH code, so we don't destroy the top socket before the underlying socket gets destroyed. Alternatively, the `isc_nm_stoplistening()` needs to take a callback and be converted to asynchronous code.
```
WARNING: ThreadSanitizer: data race (pid=7728)
Write of size 8 at 0x7b080002cbc0 by thread T11:
#0 free <null> (libtsan.so.0+0x37a28)
#1 OPENSSL_sk_free <null> (libcrypto.so.1.1+0x18156a)
#2 isc__nm_tls_cleanup_data netmgr/tlsstream.c:1122 (libisc-9.19.5-dev.so+0x8bd0d)
#3 nmsocket_cleanup netmgr/netmgr.c:729 (libisc-9.19.5-dev.so+0x252fd)
#4 nmsocket_maybe_destroy netmgr/netmgr.c:799 (libisc-9.19.5-dev.so+0x2556b)
#5 isc___nmsocket_prep_destroy netmgr/netmgr.c:861 (libisc-9.19.5-dev.so+0x256de)
#6 isc___nmsocket_detach netmgr/netmgr.c:888 (libisc-9.19.5-dev.so+0x25818)
#7 isc__nm_tls_cleanup_data netmgr/tlsstream.c:1141 (libisc-9.19.5-dev.so+0x8bb84)
#8 nmsocket_cleanup netmgr/netmgr.c:729 (libisc-9.19.5-dev.so+0x252fd)
#9 nmsocket_maybe_destroy netmgr/netmgr.c:799 (libisc-9.19.5-dev.so+0x2556b)
#10 isc___nmsocket_prep_destroy netmgr/netmgr.c:861 (libisc-9.19.5-dev.so+0x256de)
#11 tcp_close_sock netmgr/tcp.c:1209 (libisc-9.19.5-dev.so+0x29a8e)
#12 tcp_close_cb netmgr/tcp.c:1217 (libisc-9.19.5-dev.so+0x29b43)
#13 uv__finish_close /usr/src/libuv-v1.44.1/src/unix/core.c:308 (libuv.so.1+0x119b9)
#14 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.19.5-dev.so+0x79d29)
Previous read of size 8 at 0x7b080002cbc0 by thread T16:
#0 memcpy <null> (libtsan.so.0+0x5da1e)
#1 OPENSSL_sk_dup <null> (libcrypto.so.1.1+0x183231)
#2 tls_readcb netmgr/tlsstream.c:606 (libisc-9.19.5-dev.so+0x89bbe)
#3 isc__nm_async_readcb netmgr/netmgr.c:2217 (libisc-9.19.5-dev.so+0x26e6b)
#4 isc__nm_readcb netmgr/netmgr.c:2190 (libisc-9.19.5-dev.so+0x2704f)
#5 isc__nm_tcp_read_cb netmgr/tcp.c:897 (libisc-9.19.5-dev.so+0x2bb8c)
#6 uv__read /usr/src/libuv-v1.44.1/src/unix/stream.c:1247 (libuv.so.1+0x22d21)
#7 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.19.5-dev.so+0x79d29)
Thread T11 'isc-loop-0007' (tid=8083, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:70 (libisc-9.19.5-dev.so+0x72017)
#2 isc_loopmgr_run /builds/isc-projects/bind9/lib/isc/loop.c:467 (libisc-9.19.5-dev.so+0x596b1)
#3 run_test_doh_recv_send_POST_TLS /builds/isc-projects/bind9/tests/isc/doh_test.c:1035 (doh_test+0x40d088)
#4 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x5cb0)
#5 __libc_start_call_main <null> (libc.so.6+0x4043f)
Thread T16 'isc-loop-0012' (tid=8088, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:70 (libisc-9.19.5-dev.so+0x72017)
#2 isc_loopmgr_run /builds/isc-projects/bind9/lib/isc/loop.c:467 (libisc-9.19.5-dev.so+0x596b1)
#3 run_test_doh_recv_send_POST_TLS /builds/isc-projects/bind9/tests/isc/doh_test.c:1035 (doh_test+0x40d088)
#4 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x5cb0)
#5 __libc_start_call_main <null> (libc.so.6+0x4043f)
SUMMARY: ThreadSanitizer: data race (/lib64/libtsan.so.0+0x37a28) in free
```
and
```
WARNING: ThreadSanitizer: data race (pid=7728)
Write of size 8 at 0x7b04000055e0 by thread T11:
#0 free <null> (libtsan.so.0+0x37a28)
#1 SSL_SESSION_free <null> (libssl.so.1.1+0x3fa88)
#2 isc__nm_tls_cleanup_data netmgr/tlsstream.c:1122 (libisc-9.19.5-dev.so+0x8bd0d)
#3 nmsocket_cleanup netmgr/netmgr.c:729 (libisc-9.19.5-dev.so+0x252fd)
#4 nmsocket_maybe_destroy netmgr/netmgr.c:799 (libisc-9.19.5-dev.so+0x2556b)
#5 isc___nmsocket_prep_destroy netmgr/netmgr.c:861 (libisc-9.19.5-dev.so+0x256de)
#6 isc___nmsocket_detach netmgr/netmgr.c:888 (libisc-9.19.5-dev.so+0x25818)
#7 isc__nm_tls_cleanup_data netmgr/tlsstream.c:1141 (libisc-9.19.5-dev.so+0x8bb84)
#8 nmsocket_cleanup netmgr/netmgr.c:729 (libisc-9.19.5-dev.so+0x252fd)
#9 nmsocket_maybe_destroy netmgr/netmgr.c:799 (libisc-9.19.5-dev.so+0x2556b)
#10 isc___nmsocket_prep_destroy netmgr/netmgr.c:861 (libisc-9.19.5-dev.so+0x256de)
#11 tcp_close_sock netmgr/tcp.c:1209 (libisc-9.19.5-dev.so+0x29a8e)
#12 tcp_close_cb netmgr/tcp.c:1217 (libisc-9.19.5-dev.so+0x29b43)
#13 uv__finish_close /usr/src/libuv-v1.44.1/src/unix/core.c:308 (libuv.so.1+0x119b9)
#14 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.19.5-dev.so+0x79d29)
Previous read of size 1 at 0x7b04000055e1 by thread T16:
#0 memcpy <null> (libtsan.so.0+0x5da1e)
#1 ssl_session_dup <null> (libssl.so.1.1+0x3fd8f)
#2 tls_readcb netmgr/tlsstream.c:606 (libisc-9.19.5-dev.so+0x89bbe)
#3 isc__nm_async_readcb netmgr/netmgr.c:2217 (libisc-9.19.5-dev.so+0x26e6b)
#4 isc__nm_readcb netmgr/netmgr.c:2190 (libisc-9.19.5-dev.so+0x2704f)
#5 isc__nm_tcp_read_cb netmgr/tcp.c:897 (libisc-9.19.5-dev.so+0x2bb8c)
#6 uv__read /usr/src/libuv-v1.44.1/src/unix/stream.c:1247 (libuv.so.1+0x22d21)
#7 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:189 (libisc-9.19.5-dev.so+0x79d29)
Thread T11 'isc-loop-0007' (tid=8083, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:70 (libisc-9.19.5-dev.so+0x72017)
#2 isc_loopmgr_run /builds/isc-projects/bind9/lib/isc/loop.c:467 (libisc-9.19.5-dev.so+0x596b1)
#3 run_test_doh_recv_send_POST_TLS /builds/isc-projects/bind9/tests/isc/doh_test.c:1035 (doh_test+0x40d088)
#4 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x5cb0)
#5 __libc_start_call_main <null> (libc.so.6+0x4043f)
Thread T16 'isc-loop-0012' (tid=8088, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:70 (libisc-9.19.5-dev.so+0x72017)
#2 isc_loopmgr_run /builds/isc-projects/bind9/lib/isc/loop.c:467 (libisc-9.19.5-dev.so+0x596b1)
#3 run_test_doh_recv_send_POST_TLS /builds/isc-projects/bind9/tests/isc/doh_test.c:1035 (doh_test+0x40d088)
#4 cmocka_run_one_test_or_fixture <null> (libcmocka.so.0+0x5cb0)
#5 __libc_start_call_main <null> (libc.so.6+0x4043f)
SUMMARY: ThreadSanitizer: data race (/lib64/libtsan.so.0+0x37a28) in free
```
This issue also affects 9.18, but is more prominent in 9.19 loopmgr code.
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/3315
ThreadSanitizer: data race lib/ns/client.c:2540 in ns_clientmgr_destroy (v9_16)
2024-02-20T09:37:58Z
Arаm Sаrgsyаn
ThreadSanitizer: data race lib/ns/client.c:2540 in ns_clientmgr_destroy (v9_16)
TSAN report at https://gitlab.isc.org/isc-projects/bind9/-/jobs/2481573 in an MR branched from ~v9.16, generated during shutdown in the `tcp` system test, no crashes.
```
==================
WARNING: ThreadSanitizer: data race (pid=21274...
TSAN report at https://gitlab.isc.org/isc-projects/bind9/-/jobs/2481573 in an MR branched from ~v9.16, generated during shutdown in the `tcp` system test, no crashes.
```
==================
WARNING: ThreadSanitizer: data race (pid=21274)
Write of size 8 at 0x7b6800000b50 by thread T1 (mutexes: write M84296756182972960):
#0 ns_clientmgr_destroy /builds/isc-projects/bind9/lib/ns/client.c:2540 (libns-9.16.29-dev.so+0x1123c)
#1 ns_interface_shutdown /builds/isc-projects/bind9/lib/ns/interfacemgr.c:570 (libns-9.16.29-dev.so+0x19358)
#2 purge_old_interfaces /builds/isc-projects/bind9/lib/ns/interfacemgr.c:660 (libns-9.16.29-dev.so+0x198ee)
#3 ns_interfacemgr_shutdown /builds/isc-projects/bind9/lib/ns/interfacemgr.c:388 (libns-9.16.29-dev.so+0x19b75)
#4 shutdown_server server.c:9847 (named+0x44fe42)
#5 task_run /builds/isc-projects/bind9/lib/isc/task.c:851 (libisc-9.16.29-dev.so+0x64b6d)
#6 isc_task_run /builds/isc-projects/bind9/lib/isc/task.c:944 (libisc-9.16.29-dev.so+0x64b6d)
#7 isc__nm_async_task /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:914 (libisc-9.16.29-dev.so+0x3cf51)
#8 process_netievent /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:992 (libisc-9.16.29-dev.so+0x45281)
#9 process_queue /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:1060 (libisc-9.16.29-dev.so+0x45a65)
#10 process_all_queues /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:834 (libisc-9.16.29-dev.so+0x46364)
#11 async_cb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:862 (libisc-9.16.29-dev.so+0x46364)
#12 uv__async_io /usr/src/libuv-v1.43.0/src/unix/async.c:163 (libuv.so.1+0x11194)
#13 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:209 (libisc-9.16.29-dev.so+0x67b72)
Previous read of size 8 at 0x7b6800000b50 by thread T2:
#0 ns__client_request /builds/isc-projects/bind9/lib/ns/client.c:1676 (libns-9.16.29-dev.so+0x134c7)
#1 isc__nm_async_readcb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2639 (libisc-9.16.29-dev.so+0x44bba)
#2 isc__nm_readcb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2612 (libisc-9.16.29-dev.so+0x44d63)
#3 isc__nm_tcpdns_processbuffer /builds/isc-projects/bind9/lib/isc/netmgr/tcpdns.c:822 (libisc-9.16.29-dev.so+0x53447)
#4 processbuffer /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2218 (libisc-9.16.29-dev.so+0x40b70)
#5 isc__nm_process_sock_buffer /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2240 (libisc-9.16.29-dev.so+0x40b70)
#6 isc__nm_resume_processing /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2296 (libisc-9.16.29-dev.so+0x40cff)
#7 nmhandle_detach_cb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:1798 (libisc-9.16.29-dev.so+0x43954)
#8 isc__nm_async_detach /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:2709 (libisc-9.16.29-dev.so+0x4587e)
#9 process_netievent /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:1026 (libisc-9.16.29-dev.so+0x4587e)
#10 process_queue /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:1060 (libisc-9.16.29-dev.so+0x45a65)
#11 process_all_queues /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:834 (libisc-9.16.29-dev.so+0x46364)
#12 async_cb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:862 (libisc-9.16.29-dev.so+0x46364)
#13 uv__async_io /usr/src/libuv-v1.43.0/src/unix/async.c:163 (libuv.so.1+0x11194)
#14 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:209 (libisc-9.16.29-dev.so+0x67b72)
Location is heap block of size 1385 at 0x7b6800000600 allocated by thread T1:
#0 malloc <null> (libtsan.so.0+0x32919)
#1 default_memalloc /builds/isc-projects/bind9/lib/isc/mem.c:715 (libisc-9.16.29-dev.so+0x37a62)
#2 mem_get /builds/isc-projects/bind9/lib/isc/mem.c:624 (libisc-9.16.29-dev.so+0x369c5)
#3 mem_allocateunlocked /builds/isc-projects/bind9/lib/isc/mem.c:1289 (libisc-9.16.29-dev.so+0x386a2)
#4 isc___mem_allocate /builds/isc-projects/bind9/lib/isc/mem.c:1309 (libisc-9.16.29-dev.so+0x386a2)
#5 isc__mem_allocate /builds/isc-projects/bind9/lib/isc/mem.c:2399 (libisc-9.16.29-dev.so+0x3bfa8)
#6 isc___mem_get /builds/isc-projects/bind9/lib/isc/mem.c:1059 (libisc-9.16.29-dev.so+0x3c328)
#7 isc__mem_get /builds/isc-projects/bind9/lib/isc/mem.c:2378 (libisc-9.16.29-dev.so+0x3b605)
#8 ns_interface_create /builds/isc-projects/bind9/lib/ns/interfacemgr.c:400 (libns-9.16.29-dev.so+0x19c9d)
#9 ns_interface_setup /builds/isc-projects/bind9/lib/ns/interfacemgr.c:515 (libns-9.16.29-dev.so+0x19c9d)
#10 do_scan /builds/isc-projects/bind9/lib/ns/interfacemgr.c:1047 (libns-9.16.29-dev.so+0x1b469)
#11 ns_interfacemgr_scan0 /builds/isc-projects/bind9/lib/ns/interfacemgr.c:1104 (libns-9.16.29-dev.so+0x1b91e)
#12 ns_interfacemgr_scan /builds/isc-projects/bind9/lib/ns/interfacemgr.c:1152 (libns-9.16.29-dev.so+0x1b91e)
#13 load_configuration server.c:8880 (named+0x452949)
#14 run_server server.c:9815 (named+0x457ed1)
#15 task_run /builds/isc-projects/bind9/lib/isc/task.c:851 (libisc-9.16.29-dev.so+0x64b6d)
#16 isc_task_run /builds/isc-projects/bind9/lib/isc/task.c:944 (libisc-9.16.29-dev.so+0x64b6d)
#17 isc__nm_async_task /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:914 (libisc-9.16.29-dev.so+0x3cf51)
#18 process_netievent /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:992 (libisc-9.16.29-dev.so+0x45281)
#19 process_queue /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:1060 (libisc-9.16.29-dev.so+0x45a65)
#20 process_all_queues /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:834 (libisc-9.16.29-dev.so+0x46364)
#21 async_cb /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:862 (libisc-9.16.29-dev.so+0x46364)
#22 uv__async_io /usr/src/libuv-v1.43.0/src/unix/async.c:163 (libuv.so.1+0x11194)
#23 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:209 (libisc-9.16.29-dev.so+0x67b72)
Mutex M84296756182972960 is already destroyed.
Thread T1 'isc-net-0000' (tid=21293, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/pthreads/thread.c:81 (libisc-9.16.29-dev.so+0x825d0)
#2 isc__netmgr_create /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:390 (libisc-9.16.29-dev.so+0x3d947)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:35 (libisc-9.16.29-dev.so+0x350cc)
#4 create_managers main.c:927 (named+0x427080)
#5 setup main.c:1252 (named+0x427080)
#6 main main.c:1569 (named+0x427080)
Thread T2 'isc-net-0001' (tid=21294, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bef5)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/pthreads/thread.c:81 (libisc-9.16.29-dev.so+0x825d0)
#2 isc__netmgr_create /builds/isc-projects/bind9/lib/isc/netmgr/netmgr.c:390 (libisc-9.16.29-dev.so+0x3d947)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:35 (libisc-9.16.29-dev.so+0x350cc)
#4 create_managers main.c:927 (named+0x427080)
#5 setup main.c:1252 (named+0x427080)
#6 main main.c:1569 (named+0x427080)
SUMMARY: ThreadSanitizer: data race /builds/isc-projects/bind9/lib/ns/client.c:2540 in ns_clientmgr_destroy
==================
ThreadSanitizer: reported 1 warnings
```
[named.run.gz](/uploads/ecc4eeb9c5f40141c73203e06cf8136c/named.run.gz)
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/3265
ThreadSanitizer: data race in __interceptor_memcmp & __interceptor_memset
2023-10-19T08:26:55Z
Michal Nowak
ThreadSanitizer: data race in __interceptor_memcmp & __interceptor_memset
Job [#2428973](https://gitlab.isc.org/isc-projects/bind9/-/jobs/2428973) failed for 4d57ef0c49e96d46a72f0d768d8973af76c9f691 in the `doth` system test:
```
WARNING: ThreadSanitizer: data race
Read of size 8 at 0x000000000001 by thread...
Job [#2428973](https://gitlab.isc.org/isc-projects/bind9/-/jobs/2428973) failed for 4d57ef0c49e96d46a72f0d768d8973af76c9f691 in the `doth` system test:
```
WARNING: ThreadSanitizer: data race
Read of size 8 at 0x000000000001 by thread T1:
#0 memcmp <null>
#1 ASN1_STRING_cmp <null>
#2 isc__nm_tlsdns_read_cb netmgr/tlsdns.c:1409
#3 uv__read /usr/src/libuv-v1.43.0/src/unix/stream.c:1247
#4 isc__trampoline_run lib/isc/trampoline.c:187
Previous write of size 8 at 0x000000000001 by thread T2 (mutexes: write M1):
#0 malloc <null>
#1 ASN1_STRING_set <null>
#2 isc__nm_tlsdns_read_cb netmgr/tlsdns.c:1409
#3 uv__read /usr/src/libuv-v1.43.0/src/unix/stream.c:1247
#4 isc__trampoline_run lib/isc/trampoline.c:187
Location is heap block of size 21 at 0x000000000001 allocated by thread T2:
#0 malloc <null>
#1 ASN1_STRING_set <null>
#2 isc__nm_tlsdns_read_cb netmgr/tlsdns.c:1409
#3 uv__read /usr/src/libuv-v1.43.0/src/unix/stream.c:1247
#4 isc__trampoline_run lib/isc/trampoline.c:187
Mutex M1 (0x000000000009) created at:
#0 pthread_rwlock_init <null>
#1 CRYPTO_THREAD_lock_new <null>
#2 listenelt_create lib/ns/listenlist.c:73
#3 ns_listenelt_create lib/ns/listenlist.c:193
#4 listenelt_fromconfig bin/named/server.c:11127
#5 listenlist_fromconfig bin/named/server.c:10863
#6 load_configuration bin/named/server.c:8895
#7 run_server bin/named/server.c:9835
#8 task_run lib/isc/task.c:711
#9 isc_task_run lib/isc/task.c:791
#10 isc__nm_async_task netmgr/netmgr.c:782
#11 process_netievent netmgr/netmgr.c:853
#12 process_queue netmgr/netmgr.c:944
#13 process_all_queues netmgr/netmgr.c:716
#14 async_cb netmgr/netmgr.c:745
#15 uv__async_io /usr/src/libuv-v1.43.0/src/unix/async.c:163
#16 isc__trampoline_run lib/isc/trampoline.c:187
Thread T1 (running) created by main thread at:
#0 pthread_create <null>
#1 isc_thread_create lib/isc/thread.c:81
#2 isc__netmgr_create netmgr/netmgr.c:291
#3 isc_managers_create lib/isc/managers.c:31
#4 create_managers bin/named/main.c:920
#5 setup bin/named/main.c:1184
#6 main bin/named/main.c:1452
Thread T2 (running) created by main thread at:
#0 pthread_create <null>
#1 isc_thread_create lib/isc/thread.c:81
#2 isc__netmgr_create netmgr/netmgr.c:291
#3 isc_managers_create lib/isc/managers.c:31
#4 create_managers bin/named/main.c:920
#5 setup bin/named/main.c:1184
#6 main bin/named/main.c:1452
SUMMARY: ThreadSanitizer: data race in __interceptor_memcmp
```
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/3058
SUMMARY: ThreadSanitizer: data race in read
2023-11-02T17:02:21Z
Ondřej Surý
SUMMARY: ThreadSanitizer: data race in read
This almost seems like we are passing some buffer to isc_task that libuv is still using.
```
==================
WARNING: ThreadSanitizer: data race (pid=22062)
Write of size 8 at 0x7fdcbeac0000 by thread T9:
#0 read <null> (libtsa...
This almost seems like we are passing some buffer to isc_task that libuv is still using.
```
==================
WARNING: ThreadSanitizer: data race (pid=22062)
Write of size 8 at 0x7fdcbeac0000 by thread T9:
#0 read <null> (libtsan.so.0+0x4ace2)
#1 uv__read /usr/src/libuv-v1.42.0/src/unix/stream.c:1164 (libuv.so.1+0x227e1)
#2 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:185 (libisc-9.17.20.so+0x7b0e1)
Previous read of size 8 at 0x7fdcbeac0000 by thread T8:
#0 memmove <null> (libtsan.so.0+0x5da6e)
#1 memmove /usr/include/bits/string_fortified.h:36 (libisc-9.17.20.so+0x453d9)
#2 isc_buffer_copyregion /builds/isc-projects/bind9/lib/isc/buffer.c:530 (libisc-9.17.20.so+0x453d9)
#3 dns_zone_forwardupdate /builds/isc-projects/bind9/lib/dns/zone.c:18408 (libdns-9.17.20.so+0x22081d)
#4 forward_action /builds/isc-projects/bind9/lib/ns/update.c:3748 (libns-9.17.20.so+0x516d6)
#5 task_run /builds/isc-projects/bind9/lib/isc/task.c:827 (libisc-9.17.20.so+0x7237a)
#6 isc_task_run /builds/isc-projects/bind9/lib/isc/task.c:907 (libisc-9.17.20.so+0x7237a)
#7 isc__nm_async_task netmgr/netmgr.c:835 (libisc-9.17.20.so+0x1e9ab)
#8 process_netievent netmgr/netmgr.c:914 (libisc-9.17.20.so+0x27efb)
#9 process_queue netmgr/netmgr.c:1008 (libisc-9.17.20.so+0x28a2a)
#10 process_all_queues netmgr/netmgr.c:754 (libisc-9.17.20.so+0x29353)
#11 async_cb netmgr/netmgr.c:783 (libisc-9.17.20.so+0x29353)
#12 uv__async_io /usr/src/libuv-v1.42.0/src/unix/async.c:163 (libuv.so.1+0x110ef)
#13 isc__trampoline_run /builds/isc-projects/bind9/lib/isc/trampoline.c:185 (libisc-9.17.20.so+0x7b0e1)
Location is heap block of size 1310720 at 0x7fdcbeac0000 allocated by main thread:
#0 malloc <null> (libtsan.so.0+0x32919)
#1 mallocx /builds/isc-projects/bind9/lib/isc/jemalloc_shim.h:33 (libisc-9.17.20.so+0x5b02a)
#2 mem_get /builds/isc-projects/bind9/lib/isc/mem.c:343 (libisc-9.17.20.so+0x5b02a)
#3 isc__mem_get /builds/isc-projects/bind9/lib/isc/mem.c:758 (libisc-9.17.20.so+0x5b02a)
#4 isc__netmgr_create netmgr/netmgr.c:319 (libisc-9.17.20.so+0x1f2a4)
#5 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:39 (libisc-9.17.20.so+0x59ef2)
#6 create_managers /builds/isc-projects/bind9/bin/named/main.c:920 (named+0x424a19)
#7 setup /builds/isc-projects/bind9/bin/named/main.c:1184 (named+0x424a19)
#8 main /builds/isc-projects/bind9/bin/named/main.c:1452 (named+0x424a19)
Thread T9 'isc-net-0008' (tid=22096, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bf45)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:79 (libisc-9.17.20.so+0x7466d)
#2 isc__netmgr_create netmgr/netmgr.c:328 (libisc-9.17.20.so+0x1f34b)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:39 (libisc-9.17.20.so+0x59ef2)
#4 create_managers /builds/isc-projects/bind9/bin/named/main.c:920 (named+0x424a19)
#5 setup /builds/isc-projects/bind9/bin/named/main.c:1184 (named+0x424a19)
#6 main /builds/isc-projects/bind9/bin/named/main.c:1452 (named+0x424a19)
Thread T8 'isc-net-0007' (tid=22094, running) created by main thread at:
#0 pthread_create <null> (libtsan.so.0+0x5bf45)
#1 isc_thread_create /builds/isc-projects/bind9/lib/isc/thread.c:79 (libisc-9.17.20.so+0x7466d)
#2 isc__netmgr_create netmgr/netmgr.c:328 (libisc-9.17.20.so+0x1f34b)
#3 isc_managers_create /builds/isc-projects/bind9/lib/isc/managers.c:39 (libisc-9.17.20.so+0x59ef2)
#4 create_managers /builds/isc-projects/bind9/bin/named/main.c:920 (named+0x424a19)
#5 setup /builds/isc-projects/bind9/bin/named/main.c:1184 (named+0x424a19)
#6 main /builds/isc-projects/bind9/bin/named/main.c:1452 (named+0x424a19)
SUMMARY: ThreadSanitizer: data race (/lib64/libtsan.so.0+0x4ace2) in read
==================
ThreadSanitizer: reported 1 warnings
```
Not planned
https://gitlab.isc.org/isc-projects/bind9/-/issues/2719
ThreadSanitizer: data race between ns_client_endrequest->rdataset_disassociat...
2022-03-01T09:56:24Z
Ondřej Surý
ThreadSanitizer: data race between ns_client_endrequest->rdataset_disassociate and rmzone->free_rbtdb
Full report here (it doesn't happen in the CI, just locally):
```
==================
WARNING: ThreadSanitizer: data race (pid=1434821)
Write of size 8 at 0x7b98000603a8 by thread T1 (mutexes: write M599395980743702552):
#0 memset <...
Full report here (it doesn't happen in the CI, just locally):
```
==================
WARNING: ThreadSanitizer: data race (pid=1434821)
Write of size 8 at 0x7b98000603a8 by thread T1 (mutexes: write M599395980743702552):
#0 memset <null> (named+0x445d29)
#1 mem_put /home/ondrej/Projects/bind9/lib/isc/mem.c:361:3 (libisc-9.17.13.so+0xd7a1c)
#2 isc__mem_free /home/ondrej/Projects/bind9/lib/isc/mem.c:1012:2 (libisc-9.17.13.so+0xd6f17)
#3 isc__mem_put /home/ondrej/Projects/bind9/lib/isc/mem.c:777:3 (libisc-9.17.13.so+0xd8ec8)
#4 free_rbtdb /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1203:2 (libdns-9.17.13.so+0x1c9a83)
#5 maybe_free_rbtdb /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1288:4 (libdns-9.17.13.so+0x1d9310)
#6 detach /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1300:3 (libdns-9.17.13.so+0x1cab3c)
#7 dns_db_detach /home/ondrej/Projects/bind9/lib/dns/db.c:155:2 (libdns-9.17.13.so+0x83d9b)
#8 zone_detachdb /home/ondrej/Projects/bind9/lib/dns/zone.c:17150:2 (libdns-9.17.13.so+0x40117e)
#9 zone_unload /home/ondrej/Projects/bind9/lib/dns/zone.c:11928:2 (libdns-9.17.13.so+0x3deee2)
#10 dns_zone_unload /home/ondrej/Projects/bind9/lib/dns/zone.c:11863:2 (libdns-9.17.13.so+0x3deca2)
#11 rmzone /home/ondrej/Projects/bind9/bin/named/server.c:14368:3 (named+0x4fbd3b)
#12 task_run /home/ondrej/Projects/bind9/lib/isc/task.c:816:5 (libisc-9.17.13.so+0xffd06)
#13 isc_task_run /home/ondrej/Projects/bind9/lib/isc/task.c:896:10 (libisc-9.17.13.so+0xff4f5)
#14 isc__nm_async_task /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:863:11 (libisc-9.17.13.so+0x47a8e)
#15 process_netievent /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:942:3 (libisc-9.17.13.so+0x3c0dc)
#16 process_queue /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1032:16 (libisc-9.17.13.so+0x4792a)
#17 process_all_queues /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:783:25 (libisc-9.17.13.so+0x4774f)
#18 async_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:812:6 (libisc-9.17.13.so+0x35482)
#19 uv__async_io /home/ondrej/Projects/tsan/libuv/src/unix/async.c:163:5 (libuv.so.1+0x15389)
#20 uv__io_poll /home/ondrej/Projects/tsan/libuv/src/unix/linux-core.c:462:11 (libuv.so.1+0x2ebb6)
#21 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:392:5 (libuv.so.1+0x159ac)
#22 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#23 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Previous atomic read of size 8 at 0x7b98000603a8 by thread T2:
#0 __tsan_atomic64_load <null> (named+0x487e0e)
#1 isc_rwlock_unlock /home/ondrej/Projects/bind9/lib/isc/rwlock.c:584:8 (libisc-9.17.13.so+0xf1287)
#2 detachnode /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:5508:2 (libdns-9.17.13.so+0x1d1c0d)
#3 rdataset_disassociate /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:8862:2 (libdns-9.17.13.so+0x1e4354)
#4 dns_rdataset_disassociate /home/ondrej/Projects/bind9/lib/dns/rdataset.c:111:2 (libdns-9.17.13.so+0x2d86cc)
#5 msgresetnames /home/ondrej/Projects/bind9/lib/dns/message.c:467:5 (libdns-9.17.13.so+0x142f07)
#6 msgreset /home/ondrej/Projects/bind9/lib/dns/message.c:542:2 (libdns-9.17.13.so+0x13613a)
#7 dns_message_reset /home/ondrej/Projects/bind9/lib/dns/message.c:762:2 (libdns-9.17.13.so+0x13609f)
#8 ns_client_endrequest /home/ondrej/Projects/bind9/lib/ns/client.c:212:2 (libns-9.17.13.so+0x16362)
#9 ns__client_reset_cb /home/ondrej/Projects/bind9/lib/ns/client.c:1536:2 (libns-9.17.13.so+0x155cd)
#10 nmhandle_detach_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1848:3 (libisc-9.17.13.so+0x40b3f)
#11 isc__nmhandle_detach /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1804:3 (libisc-9.17.13.so+0x39a4f)
#12 isc___nm_uvreq_put /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2462:3 (libisc-9.17.13.so+0x41b04)
#13 isc__nm_async_sendcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2748:2 (libisc-9.17.13.so+0x46837)
#14 isc__nm_sendcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2722:3 (libisc-9.17.13.so+0x41721)
#15 udp_send_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/udp.c:560:2 (libisc-9.17.13.so+0x75549)
#16 uv__udp_run_completed /home/ondrej/Projects/tsan/libuv/src/unix/udp.c (libuv.so.1+0x2b9f9)
#17 uv__udp_io /home/ondrej/Projects/tsan/libuv/src/unix/udp.c:184:5 (libuv.so.1+0x2c94c)
#18 uv__run_pending /home/ondrej/Projects/tsan/libuv/src/unix/core.c:825:5 (libuv.so.1+0x15b87)
#19 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:384:19 (libuv.so.1+0x15977)
#20 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#21 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Location is heap block of size 11464 at 0x7b9800060000 allocated by thread T1:
#0 malloc <null> (named+0x43a74b)
#1 default_memalloc /home/ondrej/Projects/bind9/lib/isc/mem.c:411:8 (libisc-9.17.13.so+0xddffe)
#2 mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:343:8 (libisc-9.17.13.so+0xd8331)
#3 mem_allocateunlocked /home/ondrej/Projects/bind9/lib/isc/mem.c:918:7 (libisc-9.17.13.so+0xd9810)
#4 isc__mem_allocate /home/ondrej/Projects/bind9/lib/isc/mem.c:935:7 (libisc-9.17.13.so+0xd8195)
#5 isc__mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:740:11 (libisc-9.17.13.so+0xd7f8f)
#6 dns_rbtdb_create /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:8631:22 (libdns-9.17.13.so+0x1c538e)
#7 dns_db_create /home/ondrej/Projects/bind9/lib/dns/db.c:118:13 (libdns-9.17.13.so+0x83693)
#8 axfr_makedb /home/ondrej/Projects/bind9/lib/dns/xfrin.c:292:11 (libdns-9.17.13.so+0x3c0105)
#9 axfr_init /home/ondrej/Projects/bind9/lib/dns/xfrin.c:280:2 (libdns-9.17.13.so+0x3bf8da)
#10 xfr_rr /home/ondrej/Projects/bind9/lib/dns/xfrin.c:597:4 (libdns-9.17.13.so+0x3beb45)
#11 xfrin_recv_done /home/ondrej/Projects/bind9/lib/dns/xfrin.c:1430:5 (libdns-9.17.13.so+0x3bd2fd)
#12 isc__nm_async_readcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2706:2 (libisc-9.17.13.so+0x463f8)
#13 isc__nm_readcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2681:3 (libisc-9.17.13.so+0x45eae)
#14 isc__nm_tcpdns_processbuffer /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:817:2 (libisc-9.17.13.so+0x574fd)
#15 processbuffer /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2257:11 (libisc-9.17.13.so+0x4413f)
#16 isc__nm_process_sock_buffer /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2282:25 (libisc-9.17.13.so+0x43fb5)
#17 isc__nm_tcpdns_read_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:880:2 (libisc-9.17.13.so+0x57c28)
#18 uv__read /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1239:7 (libuv.so.1+0x280bc)
#19 uv__stream_io /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1306:5 (libuv.so.1+0x25cef)
#20 uv__io_poll /home/ondrej/Projects/tsan/libuv/src/unix/linux-core.c:462:11 (libuv.so.1+0x2ebb6)
#21 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:392:5 (libuv.so.1+0x159ac)
#22 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#23 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Mutex M599395980743702552 is already destroyed.
Thread T1 'isc-net-0000' (tid=1434862, running) created by main thread at:
#0 pthread_create <null> (named+0x43bf6b)
#1 isc_thread_create /home/ondrej/Projects/bind9/lib/isc/pthreads/thread.c:79:8 (libisc-9.17.13.so+0x10b706)
#2 isc__netmgr_create /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:347:3 (libisc-9.17.13.so+0x3535e)
#3 isc_managers_create /home/ondrej/Projects/bind9/lib/isc/managers.c:39:2 (libisc-9.17.13.so+0xd433e)
#4 create_managers /home/ondrej/Projects/bind9/bin/named/main.c:941:11 (named+0x4e4c71)
#5 setup /home/ondrej/Projects/bind9/bin/named/main.c:1216:11 (named+0x4e26d5)
#6 main /home/ondrej/Projects/bind9/bin/named/main.c:1507:2 (named+0x4e0e2b)
Thread T2 'isc-net-0001' (tid=1434882, running) created by main thread at:
#0 pthread_create <null> (named+0x43bf6b)
#1 isc_thread_create /home/ondrej/Projects/bind9/lib/isc/pthreads/thread.c:79:8 (libisc-9.17.13.so+0x10b706)
#2 isc__netmgr_create /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:347:3 (libisc-9.17.13.so+0x3535e)
#3 isc_managers_create /home/ondrej/Projects/bind9/lib/isc/managers.c:39:2 (libisc-9.17.13.so+0xd433e)
#4 create_managers /home/ondrej/Projects/bind9/bin/named/main.c:941:11 (named+0x4e4c71)
#5 setup /home/ondrej/Projects/bind9/bin/named/main.c:1216:11 (named+0x4e26d5)
#6 main /home/ondrej/Projects/bind9/bin/named/main.c:1507:2 (named+0x4e0e2b)
SUMMARY: ThreadSanitizer: data race (/home/ondrej/Projects/bind9/bin/named/.libs/named+0x445d29) in memset
==================
==================
WARNING: ThreadSanitizer: data race (pid=1434821)
Write of size 8 at 0x7b98000603b0 by thread T1 (mutexes: write M599395980743702552):
#0 memset <null> (named+0x445d29)
#1 mem_put /home/ondrej/Projects/bind9/lib/isc/mem.c:361:3 (libisc-9.17.13.so+0xd7a1c)
#2 isc__mem_free /home/ondrej/Projects/bind9/lib/isc/mem.c:1012:2 (libisc-9.17.13.so+0xd6f17)
#3 isc__mem_put /home/ondrej/Projects/bind9/lib/isc/mem.c:777:3 (libisc-9.17.13.so+0xd8ec8)
#4 free_rbtdb /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1203:2 (libdns-9.17.13.so+0x1c9a83)
#5 maybe_free_rbtdb /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1288:4 (libdns-9.17.13.so+0x1d9310)
#6 detach /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:1300:3 (libdns-9.17.13.so+0x1cab3c)
#7 dns_db_detach /home/ondrej/Projects/bind9/lib/dns/db.c:155:2 (libdns-9.17.13.so+0x83d9b)
#8 zone_detachdb /home/ondrej/Projects/bind9/lib/dns/zone.c:17150:2 (libdns-9.17.13.so+0x40117e)
#9 zone_unload /home/ondrej/Projects/bind9/lib/dns/zone.c:11928:2 (libdns-9.17.13.so+0x3deee2)
#10 dns_zone_unload /home/ondrej/Projects/bind9/lib/dns/zone.c:11863:2 (libdns-9.17.13.so+0x3deca2)
#11 rmzone /home/ondrej/Projects/bind9/bin/named/server.c:14368:3 (named+0x4fbd3b)
#12 task_run /home/ondrej/Projects/bind9/lib/isc/task.c:816:5 (libisc-9.17.13.so+0xffd06)
#13 isc_task_run /home/ondrej/Projects/bind9/lib/isc/task.c:896:10 (libisc-9.17.13.so+0xff4f5)
#14 isc__nm_async_task /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:863:11 (libisc-9.17.13.so+0x47a8e)
#15 process_netievent /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:942:3 (libisc-9.17.13.so+0x3c0dc)
#16 process_queue /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1032:16 (libisc-9.17.13.so+0x4792a)
#17 process_all_queues /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:783:25 (libisc-9.17.13.so+0x4774f)
#18 async_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:812:6 (libisc-9.17.13.so+0x35482)
#19 uv__async_io /home/ondrej/Projects/tsan/libuv/src/unix/async.c:163:5 (libuv.so.1+0x15389)
#20 uv__io_poll /home/ondrej/Projects/tsan/libuv/src/unix/linux-core.c:462:11 (libuv.so.1+0x2ebb6)
#21 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:392:5 (libuv.so.1+0x159ac)
#22 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#23 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Previous atomic read of size 8 at 0x7b98000603b0 by thread T2:
#0 __tsan_atomic64_load <null> (named+0x487e0e)
#1 isc_rwlock_unlock /home/ondrej/Projects/bind9/lib/isc/rwlock.c:583:7 (libisc-9.17.13.so+0xf1247)
#2 detachnode /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:5508:2 (libdns-9.17.13.so+0x1d1c0d)
#3 rdataset_disassociate /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:8862:2 (libdns-9.17.13.so+0x1e4354)
#4 dns_rdataset_disassociate /home/ondrej/Projects/bind9/lib/dns/rdataset.c:111:2 (libdns-9.17.13.so+0x2d86cc)
#5 msgresetnames /home/ondrej/Projects/bind9/lib/dns/message.c:467:5 (libdns-9.17.13.so+0x142f07)
#6 msgreset /home/ondrej/Projects/bind9/lib/dns/message.c:542:2 (libdns-9.17.13.so+0x13613a)
#7 dns_message_reset /home/ondrej/Projects/bind9/lib/dns/message.c:762:2 (libdns-9.17.13.so+0x13609f)
#8 ns_client_endrequest /home/ondrej/Projects/bind9/lib/ns/client.c:212:2 (libns-9.17.13.so+0x16362)
#9 ns__client_reset_cb /home/ondrej/Projects/bind9/lib/ns/client.c:1536:2 (libns-9.17.13.so+0x155cd)
#10 nmhandle_detach_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1848:3 (libisc-9.17.13.so+0x40b3f)
#11 isc__nmhandle_detach /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:1804:3 (libisc-9.17.13.so+0x39a4f)
#12 isc___nm_uvreq_put /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2462:3 (libisc-9.17.13.so+0x41b04)
#13 isc__nm_async_sendcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2748:2 (libisc-9.17.13.so+0x46837)
#14 isc__nm_sendcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2722:3 (libisc-9.17.13.so+0x41721)
#15 udp_send_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/udp.c:560:2 (libisc-9.17.13.so+0x75549)
#16 uv__udp_run_completed /home/ondrej/Projects/tsan/libuv/src/unix/udp.c (libuv.so.1+0x2b9f9)
#17 uv__udp_io /home/ondrej/Projects/tsan/libuv/src/unix/udp.c:184:5 (libuv.so.1+0x2c94c)
#18 uv__run_pending /home/ondrej/Projects/tsan/libuv/src/unix/core.c:825:5 (libuv.so.1+0x15b87)
#19 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:384:19 (libuv.so.1+0x15977)
#20 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#21 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Location is heap block of size 11464 at 0x7b9800060000 allocated by thread T1:
#0 malloc <null> (named+0x43a74b)
#1 default_memalloc /home/ondrej/Projects/bind9/lib/isc/mem.c:411:8 (libisc-9.17.13.so+0xddffe)
#2 mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:343:8 (libisc-9.17.13.so+0xd8331)
#3 mem_allocateunlocked /home/ondrej/Projects/bind9/lib/isc/mem.c:918:7 (libisc-9.17.13.so+0xd9810)
#4 isc__mem_allocate /home/ondrej/Projects/bind9/lib/isc/mem.c:935:7 (libisc-9.17.13.so+0xd8195)
#5 isc__mem_get /home/ondrej/Projects/bind9/lib/isc/mem.c:740:11 (libisc-9.17.13.so+0xd7f8f)
#6 dns_rbtdb_create /home/ondrej/Projects/bind9/lib/dns/rbtdb.c:8631:22 (libdns-9.17.13.so+0x1c538e)
#7 dns_db_create /home/ondrej/Projects/bind9/lib/dns/db.c:118:13 (libdns-9.17.13.so+0x83693)
#8 axfr_makedb /home/ondrej/Projects/bind9/lib/dns/xfrin.c:292:11 (libdns-9.17.13.so+0x3c0105)
#9 axfr_init /home/ondrej/Projects/bind9/lib/dns/xfrin.c:280:2 (libdns-9.17.13.so+0x3bf8da)
#10 xfr_rr /home/ondrej/Projects/bind9/lib/dns/xfrin.c:597:4 (libdns-9.17.13.so+0x3beb45)
#11 xfrin_recv_done /home/ondrej/Projects/bind9/lib/dns/xfrin.c:1430:5 (libdns-9.17.13.so+0x3bd2fd)
#12 isc__nm_async_readcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2706:2 (libisc-9.17.13.so+0x463f8)
#13 isc__nm_readcb /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2681:3 (libisc-9.17.13.so+0x45eae)
#14 isc__nm_tcpdns_processbuffer /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:817:2 (libisc-9.17.13.so+0x574fd)
#15 processbuffer /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2257:11 (libisc-9.17.13.so+0x4413f)
#16 isc__nm_process_sock_buffer /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:2282:25 (libisc-9.17.13.so+0x43fb5)
#17 isc__nm_tcpdns_read_cb /home/ondrej/Projects/bind9/lib/isc/netmgr/tcpdns.c:880:2 (libisc-9.17.13.so+0x57c28)
#18 uv__read /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1239:7 (libuv.so.1+0x280bc)
#19 uv__stream_io /home/ondrej/Projects/tsan/libuv/src/unix/stream.c:1306:5 (libuv.so.1+0x25cef)
#20 uv__io_poll /home/ondrej/Projects/tsan/libuv/src/unix/linux-core.c:462:11 (libuv.so.1+0x2ebb6)
#21 uv_run /home/ondrej/Projects/tsan/libuv/src/unix/core.c:392:5 (libuv.so.1+0x159ac)
#22 nm_thread /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:718:11 (libisc-9.17.13.so+0x3555e)
#23 isc__trampoline_run /home/ondrej/Projects/bind9/lib/isc/trampoline.c:184:11 (libisc-9.17.13.so+0x108746)
Mutex M599395980743702552 is already destroyed.
Thread T1 'isc-net-0000' (tid=1434862, running) created by main thread at:
#0 pthread_create <null> (named+0x43bf6b)
#1 isc_thread_create /home/ondrej/Projects/bind9/lib/isc/pthreads/thread.c:79:8 (libisc-9.17.13.so+0x10b706)
#2 isc__netmgr_create /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:347:3 (libisc-9.17.13.so+0x3535e)
#3 isc_managers_create /home/ondrej/Projects/bind9/lib/isc/managers.c:39:2 (libisc-9.17.13.so+0xd433e)
#4 create_managers /home/ondrej/Projects/bind9/bin/named/main.c:941:11 (named+0x4e4c71)
#5 setup /home/ondrej/Projects/bind9/bin/named/main.c:1216:11 (named+0x4e26d5)
#6 main /home/ondrej/Projects/bind9/bin/named/main.c:1507:2 (named+0x4e0e2b)
Thread T2 'isc-net-0001' (tid=1434882, running) created by main thread at:
#0 pthread_create <null> (named+0x43bf6b)
#1 isc_thread_create /home/ondrej/Projects/bind9/lib/isc/pthreads/thread.c:79:8 (libisc-9.17.13.so+0x10b706)
#2 isc__netmgr_create /home/ondrej/Projects/bind9/lib/isc/netmgr/netmgr.c:347:3 (libisc-9.17.13.so+0x3535e)
#3 isc_managers_create /home/ondrej/Projects/bind9/lib/isc/managers.c:39:2 (libisc-9.17.13.so+0xd433e)
#4 create_managers /home/ondrej/Projects/bind9/bin/named/main.c:941:11 (named+0x4e4c71)
#5 setup /home/ondrej/Projects/bind9/bin/named/main.c:1216:11 (named+0x4e26d5)
#6 main /home/ondrej/Projects/bind9/bin/named/main.c:1507:2 (named+0x4e0e2b)
SUMMARY: ThreadSanitizer: data race (/home/ondrej/Projects/bind9/bin/named/.libs/named+0x445d29) in memset
==================
ThreadSanitizer: reported 2 warnings
Not planned
Mark Andrews
Mark Andrews
https://gitlab.isc.org/isc-projects/bind9/-/issues/1642
lib/dns/zone.c refactoring
2023-11-02T16:51:54Z
Ondřej Surý
lib/dns/zone.c refactoring
While reviewing a MR that touches `lib/dns/zone.c`, I have notice several things:
- [ ] `zone_postload()` needs to be refactored, the functions spans from line 4696 to to line 5290 (e.g. 400 lines)
- [ ] `zone_rekey()` also need to be re...
While reviewing a MR that touches `lib/dns/zone.c`, I have notice several things:
- [ ] `zone_postload()` needs to be refactored, the functions spans from line 4696 to to line 5290 (e.g. 400 lines)
- [ ] `zone_rekey()` also need to be refactored as it spans from line 19317 to line 19734
- [ ] `keyfetch_done()` spans from line 9993 to line 10647 (600 lines)
- [ ] `zone_nsec3chain()` ~900 lines
- [ ] The locked parameter in `zone_locked()` should be removed in favor of just locking the zone prior to the call
- [ ] There's probably a missing lock in `dns_zone_catz_enable_db()`
- [ ] There's probably a missing lock around `dns_zone_rpz_disable_db()` and `dns_zone_catz_disable_db()` call
- [ ] There's lot of unlocked access to dns_zone_t members in `zone_nsec3chain()` and `zone_sign()` at the top of the function
- [ ] There's unlocked access to dns_zone_t members in `zone_maintenance()` (`zone->view`, `zone->type`, `zone->masters`, ...)
- [ ] There's unlocked access to `zone->maxrecords` in `dns_zone_getmaxrecords()` and `dns_zone_setmaxrecords()`
- [ ] There's unlocked access to `zone->origin`, `zone->flags`, `zone->dblock`, and other members of dns_zone_t in `zone_notify()`
- [ ] `zone_rekey()` contains unlocked access to `zone->mctx`, `zone->origin`, `zone->rdclass` and other members
The list here is neither complete or necessarily correct. Some of the struct members might be read-only (e.g. protected by reference counting), but the struct comment is saying "/* Locked */", so if they are truly read-only, perhaps casting them to `const` would be a right thing to do. Also I mostly checked only static functions and looked only at `dns_zone_t *` accesses.
Not planned