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); }