From 4cf4cc484d5eb53d21d1b176f59233ad4be3dead Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Mon, 18 Sep 2023 10:02:37 +0200 Subject: [PATCH] Use the new isc_sockaddr_hash_ex() to fix QID table hashing The QID table hashing used a custom merging of the sockaddr, port and id into a single hashvalue. Normalize the QID table hashing function to use isc_hash32 API for all the values. --- lib/dns/dispatch.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 3ba6d91b32..0b82990a1a 100644 --- a/lib/dns/dispatch.c +++ b/lib/dns/dispatch.c @@ -373,12 +373,15 @@ setup_socket(dns_dispatch_t *disp, dns_dispentry_t *resp, static uint32_t qid_hash(const dns_dispentry_t *dispentry) { - /* - * TODO(OS): Add incremental isc_sockaddr_hash() function and then use - * isc_hash32 API - */ - uint32_t hashval = isc_sockaddr_hash(&dispentry->peer, true); - return (hashval ^ (((uint32_t)dispentry->id << 16) | dispentry->port)); + isc_hash32_t hash; + + isc_hash32_init(&hash); + + isc_sockaddr_hash_ex(&hash, &dispentry->peer, true); + isc_hash32_hash(&hash, &dispentry->id, sizeof(dispentry->id), true); + isc_hash32_hash(&hash, &dispentry->port, sizeof(dispentry->port), true); + + return (isc_hash32_finalize(&hash)); } static int