mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 14:07:59 +00:00
Pause dbiterator to release rwlock to prevent lock-order-inversion.
WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock) Cycle in lock order graph: M1 (0x000000000001) => M2 (0x000000000002) => M3 (0x000000000000) => M1 Mutex M2 acquired here while holding mutex M1 in thread T1: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 findnodeintree lib/dns/rbtdb.c:2877:2 #3 findnode lib/dns/rbtdb.c:2941:10 #4 dns_db_findnode lib/dns/db.c:439:11 #5 copy_non_dnssec_records lib/dns/zone.c:16031:11 #6 receive_secure_db lib/dns/zone.c:16163:12 #7 dispatch lib/isc/task.c:1152:7 #8 run lib/isc/task.c:1344:2 Mutex M1 previously acquired by the same thread here: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 resume_iteration lib/dns/rbtdb.c:9357:2 #3 dbiterator_first lib/dns/rbtdb.c:9407:3 #4 dns_dbiterator_first lib/dns/dbiterator.c:43:10 #5 receive_secure_db lib/dns/zone.c:16160:16 #6 dispatch lib/isc/task.c:1152:7 #7 run lib/isc/task.c:1344:2 Mutex M3 acquired here while holding mutex M2 in thread T2: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 zone_sign lib/dns/zone.c:9244:3 #3 zone_maintenance lib/dns/zone.c:11044:4 #4 zone_timer lib/dns/zone.c:14087:2 #5 dispatch lib/isc/task.c:1152:7 #6 run lib/isc/task.c:1344:2 Mutex M2 previously acquired by the same thread here: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 resume_iteration lib/dns/rbtdb.c:9357:2 #3 dbiterator_next lib/dns/rbtdb.c:9647:3 #4 dns_dbiterator_next lib/dns/dbiterator.c:87:10 #5 zone_sign lib/dns/zone.c:9485:13 #6 zone_maintenance lib/dns/zone.c:11044:4 #7 zone_timer lib/dns/zone.c:14087:2 #8 dispatch lib/isc/task.c:1152:7 #9 run lib/isc/task.c:1344:2 Mutex M1 acquired here while holding mutex M3 in thread T3: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 findnodeintree lib/dns/rbtdb.c:2877:2 #3 findnode lib/dns/rbtdb.c:2941:10 #4 dns_db_findnode lib/dns/db.c:439:11 #5 zone_get_from_db lib/dns/zone.c:5602:11 #6 get_raw_serial lib/dns/zone.c:2520:12 #7 zone_gotwritehandle lib/dns/zone.c:2559:4 #8 dispatch lib/isc/task.c:1152:7 #9 run lib/isc/task.c:1344:2 Mutex M3 previously acquired by the same thread here: #0 pthread_rwlock_rdlock <null> #1 isc_rwlock_lock lib/isc/rwlock.c:48:3 #2 zone_gotwritehandle lib/dns/zone.c:2552:2 #3 dispatch lib/isc/task.c:1152:7 #4 run lib/isc/task.c:1344:2 Thread T1 (running) created by main thread at: #0 pthread_create <null> #1 isc_thread_create lib/isc/pthreads/thread.c:73:8 #2 isc_taskmgr_create lib/isc/task.c:1434:3 #3 create_managers bin/named/main.c:915:11 #4 setup bin/named/main.c:1223:11 #5 main bin/named/main.c:1523:2 Thread T2 (running) created by main thread at: #0 pthread_create <null> #1 isc_thread_create lib/isc/pthreads/thread.c:73:8 #2 isc_taskmgr_create lib/isc/task.c:1434:3 #3 create_managers bin/named/main.c:915:11 #4 setup bin/named/main.c:1223:11 #5 main bin/named/main.c:1523:2 Thread T3 (running) created by main thread at: #0 pthread_create <null> #1 isc_thread_create lib/isc/pthreads/thread.c:73:8 #2 isc_taskmgr_create lib/isc/task.c:1434:3 #3 create_managers bin/named/main.c:915:11 #4 setup bin/named/main.c:1223:11 #5 main bin/named/main.c:1523:2 SUMMARY: ThreadSanitizer: lock-order-inversion (potential deadlock) in pthread_rwlock_rdlock
This commit is contained in:
@@ -16028,6 +16028,8 @@ copy_non_dnssec_records(dns_zone_t *zone, dns_db_t *db, dns_db_t *version,
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
||||
dns_dbiterator_pause(dbiterator);
|
||||
|
||||
result = dns_db_findnode(db, name, true, &node);
|
||||
if (result != ISC_R_SUCCESS) {
|
||||
goto cleanup;
|
||||
|
Reference in New Issue
Block a user