From 732fc338a94d58f78a15e17225a94e1a5f868d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 4 Feb 2025 21:15:22 +0100 Subject: [PATCH] Switch the locknum generation for qpznode to random Instead of using on hash of the name modulo number of the buckets, assign the locknum randomly with isc_random_uniform(). This makes the locknum assignment aligned with qpcache and allows the bucket number to be non-prime in the future. --- lib/dns/qpzone.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/dns/qpzone.c b/lib/dns/qpzone.c index a1b7b97a20..e0ddab3bfb 100644 --- a/lib/dns/qpzone.c +++ b/lib/dns/qpzone.c @@ -595,10 +595,11 @@ new_qpznode(qpzonedb_t *qpdb, const dns_name_t *name) { *newdata = (qpznode_t){ .name = DNS_NAME_INITEMPTY, .references = ISC_REFCOUNT_INITIALIZER(1), + .locknum = isc_random_uniform(qpdb->buckets_count), }; - newdata->locknum = dns_name_hash(name) % qpdb->buckets_count; - dns_name_dupwithoffsets(name, qpdb->common.mctx, &newdata->name); + isc_mem_attach(qpdb->common.mctx, &newdata->mctx); + dns_name_dupwithoffsets(name, qpdb->common.mctx, &newdata->name); #if DNS_DB_NODETRACE fprintf(stderr, "new_qpznode:%s:%s:%d:%p->references = 1\n", __func__,