Module Name: src
Committed By: christos
Date: Tue Feb 13 15:27:21 UTC 2024
Modified Files:
src/external/mpl/bind/dist/lib/dns: dst_api.c resolver.c validator.c
src/external/mpl/bind/dist/lib/dns/include/dns: validator.h
src/external/mpl/bind/dist/lib/dns/include/dst: dst.h
src/external/mpl/bind/dist/lib/isc/include/isc: netmgr.h
src/external/mpl/bind/dist/lib/isc/netmgr: netmgr-int.h netmgr.c tcp.c
tcpdns.c udp.c
Log Message:
Apply patch for CVE-2023-50387 and CVE-2023-50868:
No public information has been posted (that I can find)
To generate a diff of this commit:
cvs rdiff -u -r1.13 -r1.14 src/external/mpl/bind/dist/lib/dns/dst_api.c \
src/external/mpl/bind/dist/lib/dns/validator.c
cvs rdiff -u -r1.17 -r1.18 src/external/mpl/bind/dist/lib/dns/resolver.c
cvs rdiff -u -r1.7 -r1.8 \
src/external/mpl/bind/dist/lib/dns/include/dns/validator.h
cvs rdiff -u -r1.9 -r1.10 \
src/external/mpl/bind/dist/lib/dns/include/dst/dst.h
cvs rdiff -u -r1.7 -r1.8 \
src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h
cvs rdiff -u -r1.8 -r1.9 \
src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h \
src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c \
src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c
cvs rdiff -u -r1.10 -r1.11 src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c
cvs rdiff -u -r1.11 -r1.12 src/external/mpl/bind/dist/lib/isc/netmgr/udp.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/mpl/bind/dist/lib/dns/dst_api.c
diff -u src/external/mpl/bind/dist/lib/dns/dst_api.c:1.13 src/external/mpl/bind/dist/lib/dns/dst_api.c:1.14
--- src/external/mpl/bind/dist/lib/dns/dst_api.c:1.13 Wed Jan 25 16:43:30 2023
+++ src/external/mpl/bind/dist/lib/dns/dst_api.c Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: dst_api.c,v 1.13 2023/01/25 21:43:30 christos Exp $ */
+/* $NetBSD: dst_api.c,v 1.14 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -166,7 +166,8 @@ computeid(dst_key_t *key);
static isc_result_t
frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
unsigned int protocol, dns_rdataclass_t rdclass,
- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp);
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
+ dst_key_t **keyp);
static isc_result_t
algorithm_status(unsigned int alg);
@@ -782,6 +783,13 @@ dst_key_todns(const dst_key_t *key, isc_
isc_result_t
dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass,
isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) {
+ return (dst_key_fromdns_ex(name, rdclass, source, mctx, false, keyp));
+}
+
+isc_result_t
+dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass,
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
+ dst_key_t **keyp) {
uint8_t alg, proto;
uint32_t flags, extflags;
dst_key_t *key = NULL;
@@ -812,7 +820,7 @@ dst_key_fromdns(const dns_name_t *name,
}
result = frombuffer(name, alg, flags, proto, rdclass, source, mctx,
- &key);
+ no_rdata, &key);
if (result != ISC_R_SUCCESS) {
return (result);
}
@@ -833,7 +841,7 @@ dst_key_frombuffer(const dns_name_t *nam
REQUIRE(dst_initialized);
result = frombuffer(name, alg, flags, protocol, rdclass, source, mctx,
- &key);
+ false, &key);
if (result != ISC_R_SUCCESS) {
return (result);
}
@@ -2339,7 +2347,8 @@ computeid(dst_key_t *key) {
static isc_result_t
frombuffer(const dns_name_t *name, unsigned int alg, unsigned int flags,
unsigned int protocol, dns_rdataclass_t rdclass,
- isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp) {
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
+ dst_key_t **keyp) {
dst_key_t *key;
isc_result_t ret;
@@ -2364,10 +2373,12 @@ frombuffer(const dns_name_t *name, unsig
return (DST_R_UNSUPPORTEDALG);
}
- ret = key->func->fromdns(key, source);
- if (ret != ISC_R_SUCCESS) {
- dst_key_free(&key);
- return (ret);
+ if (!no_rdata) {
+ ret = key->func->fromdns(key, source);
+ if (ret != ISC_R_SUCCESS) {
+ dst_key_free(&key);
+ return (ret);
+ }
}
}
Index: src/external/mpl/bind/dist/lib/dns/validator.c
diff -u src/external/mpl/bind/dist/lib/dns/validator.c:1.13 src/external/mpl/bind/dist/lib/dns/validator.c:1.14
--- src/external/mpl/bind/dist/lib/dns/validator.c:1.13 Mon Jun 26 18:03:00 2023
+++ src/external/mpl/bind/dist/lib/dns/validator.c Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: validator.c,v 1.13 2023/06/26 22:03:00 christos Exp $ */
+/* $NetBSD: validator.c,v 1.14 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -1106,8 +1106,8 @@ create_validator(dns_validator_t *val, d
* 'rdataset'. If found, build a dst_key_t for it and point val->key at
* it.
*
- * If val->key is already non-NULL, locate it in the rdataset and then
- * search past it for the *next* key that could have signed 'siginfo', then
+ * If val->key is already non-NULL, start searching from the next position in
+ * 'rdataset' to find the *next* key that could have signed 'siginfo', then
* set val->key to that.
*
* Returns ISC_R_SUCCESS if a possible matching key has been found,
@@ -1120,59 +1120,59 @@ select_signing_key(dns_validator_t *val,
isc_buffer_t b;
dns_rdata_t rdata = DNS_RDATA_INIT;
dst_key_t *oldkey = val->key;
- bool foundold;
+ bool no_rdata = false;
if (oldkey == NULL) {
- foundold = true;
+ result = dns_rdataset_first(rdataset);
} else {
- foundold = false;
+ dst_key_free(&oldkey);
val->key = NULL;
+ result = dns_rdataset_next(rdataset);
}
-
- result = dns_rdataset_first(rdataset);
if (result != ISC_R_SUCCESS) {
- goto failure;
+ goto done;
}
+
do {
dns_rdataset_current(rdataset, &rdata);
isc_buffer_init(&b, rdata.data, rdata.length);
isc_buffer_add(&b, rdata.length);
INSIST(val->key == NULL);
- result = dst_key_fromdns(&siginfo->signer, rdata.rdclass, &b,
- val->view->mctx, &val->key);
+ result = dst_key_fromdns_ex(&siginfo->signer, rdata.rdclass, &b,
+ val->view->mctx, no_rdata,
+ &val->key);
if (result == ISC_R_SUCCESS) {
if (siginfo->algorithm ==
(dns_secalg_t)dst_key_alg(val->key) &&
siginfo->keyid ==
(dns_keytag_t)dst_key_id(val->key) &&
+ (dst_key_flags(val->key) & DNS_KEYFLAG_REVOKE) ==
+ 0 &&
dst_key_iszonekey(val->key))
{
- if (foundold) {
- /*
- * This is the key we're looking for.
- */
- return (ISC_R_SUCCESS);
- } else if (dst_key_compare(oldkey, val->key)) {
- foundold = true;
- dst_key_free(&oldkey);
+ if (no_rdata) {
+ /* Retry with full key */
+ dns_rdata_reset(&rdata);
+ dst_key_free(&val->key);
+ no_rdata = false;
+ continue;
}
+ /* This is the key we're looking for. */
+ goto done;
}
dst_key_free(&val->key);
}
dns_rdata_reset(&rdata);
result = dns_rdataset_next(rdataset);
+ no_rdata = true;
} while (result == ISC_R_SUCCESS);
+done:
if (result == ISC_R_NOMORE) {
result = ISC_R_NOTFOUND;
}
-failure:
- if (oldkey != NULL) {
- dst_key_free(&oldkey);
- }
-
return (result);
}
@@ -1591,20 +1591,9 @@ validate_answer(dns_validator_t *val, bo
continue;
}
- do {
- isc_result_t tresult;
- vresult = verify(val, val->key, &rdata,
- val->siginfo->keyid);
- if (vresult == ISC_R_SUCCESS) {
- break;
- }
-
- tresult = select_signing_key(val, val->keyset);
- if (tresult != ISC_R_SUCCESS) {
- break;
- }
- } while (1);
+ vresult = verify(val, val->key, &rdata, val->siginfo->keyid);
if (vresult != ISC_R_SUCCESS) {
+ val->failed = true;
validator_log(val, ISC_LOG_DEBUG(3),
"failed to verify rdataset");
} else {
@@ -1641,9 +1630,13 @@ validate_answer(dns_validator_t *val, bo
} else {
validator_log(val, ISC_LOG_DEBUG(3),
"verify failure: %s",
- isc_result_totext(result));
+ isc_result_totext(vresult));
resume = false;
}
+ if (val->failed) {
+ result = ISC_R_NOMORE;
+ break;
+ }
}
if (result != ISC_R_NOMORE) {
validator_log(val, ISC_LOG_DEBUG(3),
Index: src/external/mpl/bind/dist/lib/dns/resolver.c
diff -u src/external/mpl/bind/dist/lib/dns/resolver.c:1.17 src/external/mpl/bind/dist/lib/dns/resolver.c:1.18
--- src/external/mpl/bind/dist/lib/dns/resolver.c:1.17 Mon Jun 26 18:03:00 2023
+++ src/external/mpl/bind/dist/lib/dns/resolver.c Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: resolver.c,v 1.17 2023/06/26 22:03:00 christos Exp $ */
+/* $NetBSD: resolver.c,v 1.18 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -10636,8 +10636,8 @@ dns_resolver_create(dns_view_t *view, is
* Since we have a pool of tasks we bind them to task queues
* to spread the load evenly
*/
- result = isc_task_create_bound(taskmgr, 0,
- &res->buckets[i].task, i);
+ result = isc_task_create_bound(
+ taskmgr, 0, &res->buckets[i].task, ISC_NM_TASK_SLOW(i));
if (result != ISC_R_SUCCESS) {
isc_mutex_destroy(&res->buckets[i].lock);
goto cleanup_buckets;
Index: src/external/mpl/bind/dist/lib/dns/include/dns/validator.h
diff -u src/external/mpl/bind/dist/lib/dns/include/dns/validator.h:1.7 src/external/mpl/bind/dist/lib/dns/include/dns/validator.h:1.8
--- src/external/mpl/bind/dist/lib/dns/include/dns/validator.h:1.7 Fri Sep 23 08:15:30 2022
+++ src/external/mpl/bind/dist/lib/dns/include/dns/validator.h Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: validator.h,v 1.7 2022/09/23 12:15:30 christos Exp $ */
+/* $NetBSD: validator.h,v 1.8 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -151,6 +151,7 @@ struct dns_validator {
unsigned int depth;
unsigned int authcount;
unsigned int authfail;
+ bool failed;
isc_stdtime_t start;
};
Index: src/external/mpl/bind/dist/lib/dns/include/dst/dst.h
diff -u src/external/mpl/bind/dist/lib/dns/include/dst/dst.h:1.9 src/external/mpl/bind/dist/lib/dns/include/dst/dst.h:1.10
--- src/external/mpl/bind/dist/lib/dns/include/dst/dst.h:1.9 Fri Sep 23 08:15:30 2022
+++ src/external/mpl/bind/dist/lib/dns/include/dst/dst.h Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: dst.h,v 1.9 2022/09/23 12:15:30 christos Exp $ */
+/* $NetBSD: dst.h,v 1.10 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -473,6 +473,10 @@ dst_key_tofile(const dst_key_t *key, int
*/
isc_result_t
+dst_key_fromdns_ex(const dns_name_t *name, dns_rdataclass_t rdclass,
+ isc_buffer_t *source, isc_mem_t *mctx, bool no_rdata,
+ dst_key_t **keyp);
+isc_result_t
dst_key_fromdns(const dns_name_t *name, dns_rdataclass_t rdclass,
isc_buffer_t *source, isc_mem_t *mctx, dst_key_t **keyp);
/*%<
Index: src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h
diff -u src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h:1.7 src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h:1.8
--- src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h:1.7 Fri Sep 23 08:15:33 2022
+++ src/external/mpl/bind/dist/lib/isc/include/isc/netmgr.h Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: netmgr.h,v 1.7 2022/09/23 12:15:33 christos Exp $ */
+/* $NetBSD: netmgr.h,v 1.8 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -484,6 +484,9 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_
* 'cb'.
*/
+#define ISC_NM_TASK_SLOW_OFFSET -2
+#define ISC_NM_TASK_SLOW(i) (ISC_NM_TASK_SLOW_OFFSET - 1 - i)
+
void
isc_nm_task_enqueue(isc_nm_t *mgr, isc_task_t *task, int threadid);
/*%<
Index: src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h:1.8 src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h:1.9
--- src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h:1.8 Fri Sep 23 08:15:34 2022
+++ src/external/mpl/bind/dist/lib/isc/netmgr/netmgr-int.h Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: netmgr-int.h,v 1.8 2022/09/23 12:15:34 christos Exp $ */
+/* $NetBSD: netmgr-int.h,v 1.9 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -655,6 +655,7 @@ struct isc_nm {
isc_refcount_t references;
isc_mem_t *mctx;
int nworkers;
+ int nlisteners;
isc_mutex_t lock;
isc_condition_t wkstatecond;
isc_condition_t wkpausecond;
Index: src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c:1.8 src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c:1.9
--- src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c:1.8 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/netmgr/tcp.c Tue Feb 13 10:27:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tcp.c,v 1.8 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: tcp.c,v 1.9 2024/02/13 15:27:21 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -325,7 +325,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_soc
isc__nm_connectcb(sock, req, result, false);
} else {
isc__nmsocket_clearcb(sock);
- sock->tid = isc_random_uniform(mgr->nworkers);
+ sock->tid = isc_random_uniform(mgr->nlisteners);
isc__nm_connectcb(sock, req, result, true);
}
atomic_store(&sock->closed, true);
@@ -343,7 +343,7 @@ isc_nm_tcpconnect(isc_nm_t *mgr, isc_soc
isc__nm_put_netievent_tcpconnect(mgr, ievent);
} else {
atomic_init(&sock->active, false);
- sock->tid = isc_random_uniform(mgr->nworkers);
+ sock->tid = isc_random_uniform(mgr->nlisteners);
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
(isc__netievent_t *)ievent);
}
@@ -447,7 +447,7 @@ isc_nm_listentcp(isc_nm_t *mgr, isc_sock
#if defined(WIN32)
sock->nchildren = 1;
#else
- sock->nchildren = mgr->nworkers;
+ sock->nchildren = mgr->nlisteners;
#endif
children_size = sock->nchildren * sizeof(sock->children[0]);
sock->children = isc_mem_get(mgr->mctx, children_size);
Index: src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c:1.8 src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c:1.9
--- src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c:1.8 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/netmgr/tcpdns.c Tue Feb 13 10:27:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: tcpdns.c,v 1.8 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: tcpdns.c,v 1.9 2024/02/13 15:27:21 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -305,7 +305,7 @@ isc_nm_tcpdnsconnect(isc_nm_t *mgr, isc_
isc__nm_put_netievent_tcpdnsconnect(mgr, ievent);
} else {
atomic_init(&sock->active, false);
- sock->tid = isc_random_uniform(mgr->nworkers);
+ sock->tid = isc_random_uniform(mgr->nlisteners);
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
(isc__netievent_t *)ievent);
}
@@ -412,7 +412,7 @@ isc_nm_listentcpdns(isc_nm_t *mgr, isc_s
#if defined(WIN32)
sock->nchildren = 1;
#else
- sock->nchildren = mgr->nworkers;
+ sock->nchildren = mgr->nlisteners;
#endif
children_size = sock->nchildren * sizeof(sock->children[0]);
sock->children = isc_mem_get(mgr->mctx, children_size);
Index: src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.10 src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.11
--- src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c:1.10 Mon Jun 26 18:03:01 2023
+++ src/external/mpl/bind/dist/lib/isc/netmgr/netmgr.c Tue Feb 13 10:27:20 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: netmgr.c,v 1.10 2023/06/26 22:03:01 christos Exp $ */
+/* $NetBSD: netmgr.c,v 1.11 2024/02/13 15:27:20 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -233,12 +233,12 @@ isc__nm_winsock_destroy(void) {
#endif /* WIN32 */
static void
-isc__nm_threadpool_initialize(uint32_t workers) {
+isc__nm_threadpool_initialize(uint32_t nworkers) {
char buf[11];
int r = uv_os_getenv("UV_THREADPOOL_SIZE", buf,
&(size_t){ sizeof(buf) });
if (r == UV_ENOENT) {
- snprintf(buf, sizeof(buf), "%" PRIu32, workers);
+ snprintf(buf, sizeof(buf), "%" PRIu32, nworkers);
uv_os_setenv("UV_THREADPOOL_SIZE", buf);
}
}
@@ -256,11 +256,11 @@ isc__nm_threadpool_initialize(uint32_t w
#endif
void
-isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) {
+isc__netmgr_create(isc_mem_t *mctx, uint32_t nworkers, isc_nm_t **netmgrp) {
isc_nm_t *mgr = NULL;
char name[32];
- REQUIRE(workers > 0);
+ REQUIRE(nworkers > 0);
#ifdef MAXIMAL_UV_VERSION
if (uv_version() > MAXIMAL_UV_VERSION) {
@@ -284,10 +284,13 @@ isc__netmgr_create(isc_mem_t *mctx, uint
isc__nm_winsock_initialize();
#endif /* WIN32 */
- isc__nm_threadpool_initialize(workers);
+ isc__nm_threadpool_initialize(nworkers);
mgr = isc_mem_get(mctx, sizeof(*mgr));
- *mgr = (isc_nm_t){ .nworkers = workers };
+ *mgr = (isc_nm_t){
+ .nworkers = nworkers * 2,
+ .nlisteners = nworkers,
+ };
isc_mem_attach(mctx, &mgr->mctx);
isc_mutex_init(&mgr->lock);
@@ -318,11 +321,12 @@ isc__netmgr_create(isc_mem_t *mctx, uint
atomic_init(&mgr->keepalive, 30000);
atomic_init(&mgr->advertised, 30000);
- isc_barrier_init(&mgr->pausing, workers);
- isc_barrier_init(&mgr->resuming, workers);
+ isc_barrier_init(&mgr->pausing, mgr->nworkers);
+ isc_barrier_init(&mgr->resuming, mgr->nworkers);
- mgr->workers = isc_mem_get(mctx, workers * sizeof(isc__networker_t));
- for (size_t i = 0; i < workers; i++) {
+ mgr->workers = isc_mem_get(mctx,
+ mgr->nworkers * sizeof(isc__networker_t));
+ for (int i = 0; i < mgr->nworkers; i++) {
isc__networker_t *worker = &mgr->workers[i];
int r;
@@ -842,9 +846,15 @@ isc_nm_task_enqueue(isc_nm_t *nm, isc_ta
isc__networker_t *worker = NULL;
if (threadid == -1) {
- tid = (int)isc_random_uniform(nm->nworkers);
+ tid = (int)isc_random_uniform(nm->nlisteners);
+ } else if (threadid == ISC_NM_TASK_SLOW_OFFSET) {
+ tid = nm->nlisteners +
+ (int)isc_random_uniform(nm->nworkers - nm->nlisteners);
+ } else if (threadid < ISC_NM_TASK_SLOW_OFFSET) {
+ tid = nm->nlisteners + (ISC_NM_TASK_SLOW(threadid) %
+ (nm->nworkers - nm->nlisteners));
} else {
- tid = threadid % nm->nworkers;
+ tid = threadid % nm->nlisteners;
}
worker = &nm->workers[tid];
Index: src/external/mpl/bind/dist/lib/isc/netmgr/udp.c
diff -u src/external/mpl/bind/dist/lib/isc/netmgr/udp.c:1.11 src/external/mpl/bind/dist/lib/isc/netmgr/udp.c:1.12
--- src/external/mpl/bind/dist/lib/isc/netmgr/udp.c:1.11 Wed Jan 25 16:43:31 2023
+++ src/external/mpl/bind/dist/lib/isc/netmgr/udp.c Tue Feb 13 10:27:21 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: udp.c,v 1.11 2023/01/25 21:43:31 christos Exp $ */
+/* $NetBSD: udp.c,v 1.12 2024/02/13 15:27:21 christos Exp $ */
/*
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
@@ -138,7 +138,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sock
uv_os_sock_t fd = -1;
/*
- * We are creating mgr->nworkers duplicated sockets, one
+ * We are creating mgr->nlisteners duplicated sockets, one
* socket for each worker thread.
*/
sock = isc_mem_get(mgr->mctx, sizeof(isc_nmsocket_t));
@@ -148,7 +148,7 @@ isc_nm_listenudp(isc_nm_t *mgr, isc_sock
#if defined(WIN32)
sock->nchildren = 1;
#else
- sock->nchildren = mgr->nworkers;
+ sock->nchildren = mgr->nlisteners;
#endif
children_size = sock->nchildren * sizeof(sock->children[0]);
@@ -849,7 +849,7 @@ isc_nm_udpconnect(isc_nm_t *mgr, isc_soc
isc__nm_put_netievent_udpconnect(mgr, event);
} else {
atomic_init(&sock->active, false);
- sock->tid = isc_random_uniform(mgr->nworkers);
+ sock->tid = isc_random_uniform(mgr->nlisteners);
isc__nm_enqueue_ievent(&mgr->workers[sock->tid],
(isc__netievent_t *)event);
}