]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Address race between zone_settimer and set_key_expiry_warning by
authorMark Andrews <marka@isc.org>
Wed, 2 Jun 2021 07:19:42 +0000 (17:19 +1000)
committerMark Andrews <marka@isc.org>
Wed, 9 Jun 2021 13:31:05 +0000 (13:31 +0000)
adding missing lock.

    WARNING: ThreadSanitizer: data race
    Read of size 4 at 0x000000000001 by thread T1 (mutexes: read M1, write M2):
    #0 isc_time_isepoch lib/isc/unix/time.c:110
    #1 zone_settimer lib/dns/zone.c:14649
    #2 dns_zone_maintenance lib/dns/zone.c:6281
    #3 dns_zonemgr_forcemaint lib/dns/zone.c:18190
    #4 view_loaded server.c:9654
    #5 call_loaddone lib/dns/zt.c:301
    #6 doneloading lib/dns/zt.c:575
    #7 zone_asyncload lib/dns/zone.c:2259
    #8 task_run lib/isc/task.c:845
    #9 isc_task_run lib/isc/task.c:938
    #10 isc__nm_async_task lib/isc/netmgr/netmgr.c:855
    #11 process_netievent lib/isc/netmgr/netmgr.c:934
    #12 process_queue lib/isc/netmgr/netmgr.c:1003
    #13 process_all_queues lib/isc/netmgr/netmgr.c:775
    #14 async_cb lib/isc/netmgr/netmgr.c:804
    #15 <null> <null>
    #16 isc__trampoline_run lib/isc/trampoline.c:191
    #17 <null> <null>

    Previous write of size 4 at 0x000000000001 by thread T2:
    #0 isc_time_set lib/isc/unix/time.c:93
    #1 set_key_expiry_warning lib/dns/zone.c:6430
    #2 del_sigs lib/dns/zone.c:6711
    #3 zone_resigninc lib/dns/zone.c:7113
    #4 zone_maintenance lib/dns/zone.c:11111
    #5 zone_timer lib/dns/zone.c:14588
    #6 task_run lib/isc/task.c:845
    #7 isc_task_run lib/isc/task.c:938
    #8 isc__nm_async_task lib/isc/netmgr/netmgr.c:855
    #9 process_netievent lib/isc/netmgr/netmgr.c:934
    #10 process_queue lib/isc/netmgr/netmgr.c:1003
    #11 process_all_queues lib/isc/netmgr/netmgr.c:775
    #12 async_cb lib/isc/netmgr/netmgr.c:804
    #13 <null> <null>
    #14 isc__trampoline_run lib/isc/trampoline.c:191
    #15 <null> <null>

    SUMMARY: ThreadSanitizer: data race lib/isc/unix/time.c:110 in isc_time_isepoch

lib/dns/zone.c

index 74dfa82c3c55d9645bdb6ac1364f35ebc0940738..f6e2d7556363cdb42514ca394973b9775af656e9 100644 (file)
@@ -6479,6 +6479,7 @@ set_key_expiry_warning(dns_zone_t *zone, isc_stdtime_t when,
        unsigned int delta;
        char timebuf[80];
 
+       LOCK_ZONE(zone);
        zone->key_expiry = when;
        if (when <= now) {
                dns_zone_log(zone, ISC_LOG_ERROR,
@@ -6502,6 +6503,7 @@ set_key_expiry_warning(dns_zone_t *zone, isc_stdtime_t when,
                dns_zone_log(zone, ISC_LOG_NOTICE, "setting keywarntime to %s",
                             timebuf);
        }
+       UNLOCK_ZONE(zone);
 }
 
 /*