bind/backport-0017-Obtain-a-lock-on-the-quota-structure.patch
jiangheng ad37c37958 backport some patches from community
(cherry picked from commit a9fd9ece9b9436b6103d084920c6897ef1adbae6)
2022-09-03 21:36:21 +08:00

49 lines
2.4 KiB
Diff

From be4ed416117bb155aae899cdeb644a8fd4e6457f Mon Sep 17 00:00:00 2001
From: Mark Andrews <marka@isc.org>
Date: Thu, 27 Aug 2020 18:53:06 +1000
Subject: [PATCH] Obtain a lock on the quota structure.
WARNING: ThreadSanitizer: data race (pid=15228)
Read of size 4 at 0x7b5c00000444 by thread T8:
#0 ns_server_status /builds/isc-projects/bind9/bin/named/./server.c:10935:31 (named+0x514671)
#1 ns_control_docommand /builds/isc-projects/bind9/bin/named/control.c:263:12 (named+0x4e4726)
#2 control_recvmessage /builds/isc-projects/bind9/bin/named/controlconf.c:465:13 (named+0x4e9046)
#3 dispatch /builds/isc-projects/bind9/lib/isc/task.c:1157:7 (libisc.so.1107+0x50845)
#4 run /builds/isc-projects/bind9/lib/isc/task.c:1331:2 (libisc.so.1107+0x4d799)
Previous write of size 4 at 0x7b5c00000444 by thread T9 (mutexes: write M1082):
#0 isc_quota_release /builds/isc-projects/bind9/lib/isc/quota.c:73:13 (libisc.so.1107+0x3bf10)
#1 isc_quota_detach /builds/isc-projects/bind9/lib/isc/quota.c:111:2 (libisc.so.1107+0x3c12b)
#2 ns_client_endrequest /builds/isc-projects/bind9/bin/named/client.c:896:3 (named+0x4dcad1)
#3 exit_check /builds/isc-projects/bind9/bin/named/client.c:512:3 (named+0x4d570d)
#4 ns_client_detach /builds/isc-projects/bind9/bin/named/client.c:3687:8 (named+0x4d7732)
#5 query_find /builds/isc-projects/bind9/bin/named/query.c (named+0x4f8ff1)
#6 query_resume /builds/isc-projects/bind9/bin/named/query.c:4164:12 (named+0x509b38)
#7 dispatch /builds/isc-projects/bind9/lib/isc/task.c:1157:7 (libisc.so.1107+0x50845)
#8 run /builds/isc-projects/bind9/lib/isc/task.c:1331:2 (libisc.so.1107+0x4d799)
Conflict: NA
Reference: https://gitlab.isc.org/isc-projects/bind9/-/commit/be4ed416117bb155aae899cdeb644a8fd4e6457f
---
bin/named/server.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/bin/named/server.c b/bin/named/server.c
index 6aca0224c7..1ece13b31e 100644
--- a/bin/named/server.c
+++ b/bin/named/server.c
@@ -10931,9 +10931,11 @@ ns_server_status(ns_server_t *server, isc_buffer_t **text) {
server->log_queries ? "ON" : "OFF");
CHECK(putstr(text, line));
+ LOCK(&server->recursionquota.lock);
snprintf(line, sizeof(line), "recursive clients: %d/%d/%d\n",
server->recursionquota.used, server->recursionquota.soft,
server->recursionquota.max);
+ UNLOCK(&server->recursionquota.lock);
CHECK(putstr(text, line));
snprintf(line, sizeof(line), "tcp clients: %d/%d\n",
--
2.23.0