From: Ondřej Surý Date: Mon, 18 Sep 2023 08:02:37 +0000 (+0200) Subject: Use the new isc_sockaddr_hash_ex() to fix QID table hashing X-Git-Tag: v9.19.18~75^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4cf4cc484d5eb53d21d1b176f59233ad4be3dead;p=thirdparty%2Fbind9.git 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. --- diff --git a/lib/dns/dispatch.c b/lib/dns/dispatch.c index 3ba6d91b328..0b82990a1a2 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