mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-08-30 05:57:52 +00:00
Only test node->data if we care about whether data is present or not.
WARNING: ThreadSanitizer: data race (pid=28788) Write of size 8 at 0x7b200002e060 by thread T1 (mutexes: write M2947): #0 add32 /builds/isc-projects/bind9/lib/dns/rbtdb.c:6638:18 (libdns.so.1110+0xe7843) #1 addrdataset /builds/isc-projects/bind9/lib/dns/rbtdb.c:6975:12 (libdns.so.1110+0xe4185) #2 dns_db_addrdataset /builds/isc-projects/bind9/lib/dns/db.c:783:10 (libdns.so.1110+0x650ee) #3 validated /builds/isc-projects/bind9/lib/dns/resolver.c:5140:11 (libdns.so.1110+0x1909f7) #4 dispatch /builds/isc-projects/bind9/lib/isc/task.c:1157:7 (libisc.so.1107+0x507f5) #5 run /builds/isc-projects/bind9/lib/isc/task.c:1331:2 (libisc.so.1107+0x4d749) Previous read of size 8 at 0x7b200002e060 by thread T5 (mutexes: write M521146194917735760): #0 dns_rbt_findnode /builds/isc-projects/bind9/lib/dns/rbt.c:1708:9 (libdns.so.1110+0xd910d) #1 cache_find /builds/isc-projects/bind9/lib/dns/rbtdb.c:5098:11 (libdns.so.1110+0xe188e) #2 dns_db_find /builds/isc-projects/bind9/lib/dns/db.c:554:11 (libdns.so.1110+0x642bb) #3 dns_view_find2 /builds/isc-projects/bind9/lib/dns/view.c:1068:11 (libdns.so.1110+0x1cc2c4) #4 dbfind_name /builds/isc-projects/bind9/lib/dns/adb.c:3714:11 (libdns.so.1110+0x46a4b) #5 dns_adb_createfind2 /builds/isc-projects/bind9/lib/dns/adb.c:3133:12 (libdns.so.1110+0x45278) #6 findname /builds/isc-projects/bind9/lib/dns/resolver.c:3166:11 (libdns.so.1110+0x1827f0) #7 fctx_getaddresses /builds/isc-projects/bind9/lib/dns/resolver.c:3462:3 (libdns.so.1110+0x18032d) #8 fctx_try /builds/isc-projects/bind9/lib/dns/resolver.c:3819:12 (libdns.so.1110+0x17e174) #9 fctx_start /builds/isc-projects/bind9/lib/dns/resolver.c:4219:4 (libdns.so.1110+0x1787a3) #10 dispatch /builds/isc-projects/bind9/lib/isc/task.c:1157:7 (libisc.so.1107+0x507f5) #11 run /builds/isc-projects/bind9/lib/isc/task.c:1331:2 (libisc.so.1107+0x4d749)
This commit is contained in:
parent
992a79a14b
commit
71ef3a8038
@ -230,6 +230,9 @@ getdata(dns_rbtnode_t *node, file_header_t *header) {
|
||||
#define IS_ROOT(node) ((node)->is_root)
|
||||
#define FINDCALLBACK(node) ((node)->find_callback)
|
||||
|
||||
#define WANTEMPTYDATA_OR_DATA(options, node) \
|
||||
((options & DNS_RBTFIND_EMPTYDATA) != 0 || DATA(node) != NULL)
|
||||
|
||||
/*%
|
||||
* Structure elements from the rbtdb.c, not
|
||||
* used as part of the rbt.c algorithms.
|
||||
@ -1702,8 +1705,7 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
|
||||
/*
|
||||
* This might be the closest enclosing name.
|
||||
*/
|
||||
if ((options & DNS_RBTFIND_EMPTYDATA) != 0 ||
|
||||
DATA(current) != NULL) {
|
||||
if (WANTEMPTYDATA_OR_DATA(options, current)) {
|
||||
*node = current;
|
||||
}
|
||||
|
||||
@ -1775,7 +1777,7 @@ dns_rbt_findnode(dns_rbt_t *rbt, const dns_name_t *name, dns_name_t *foundname,
|
||||
* ISC_R_SUCCESS to indicate an exact match.
|
||||
*/
|
||||
if (current != NULL && (options & DNS_RBTFIND_NOEXACT) == 0 &&
|
||||
((options & DNS_RBTFIND_EMPTYDATA) != 0 || DATA(current) != NULL))
|
||||
WANTEMPTYDATA_OR_DATA(options, current))
|
||||
{
|
||||
/*
|
||||
* Found an exact match.
|
||||
@ -2010,9 +2012,7 @@ dns_rbt_findname(dns_rbt_t *rbt, const dns_name_t *name, unsigned int options,
|
||||
result = dns_rbt_findnode(rbt, name, foundname, &node, NULL, options,
|
||||
NULL, NULL);
|
||||
|
||||
if (node != NULL &&
|
||||
(DATA(node) != NULL || (options & DNS_RBTFIND_EMPTYDATA) != 0))
|
||||
{
|
||||
if (node != NULL && WANTEMPTYDATA_OR_DATA(options, node)) {
|
||||
*data = DATA(node);
|
||||
} else {
|
||||
result = ISC_R_NOTFOUND;
|
||||
@ -2880,7 +2880,7 @@ deletetreeflat(dns_rbt_t *rbt, unsigned int quantum, bool unhash,
|
||||
dns_rbtnode_t *node = root;
|
||||
root = PARENT(root);
|
||||
|
||||
if (DATA(node) != NULL && rbt->data_deleter != NULL) {
|
||||
if (rbt->data_deleter != NULL && DATA(node) != NULL) {
|
||||
rbt->data_deleter(DATA(node), rbt->deleter_arg);
|
||||
}
|
||||
if (unhash) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user