From: Tim Duesterhus Date: Sat, 18 Jan 2020 01:04:12 +0000 (+0100) Subject: BUG/MINOR: dns: Make dns_query_id_seed unsigned X-Git-Tag: v2.2-dev1~80 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=fcac33d0c1138ef22914c3b36518c1df105c9b72;p=thirdparty%2Fhaproxy.git BUG/MINOR: dns: Make dns_query_id_seed unsigned Left shifting of large signed values and negative values is undefined. In a test script clang's ubsan rightfully complains: > runtime error: left shift of 1934242336581872173 by 13 places cannot be represented in type 'int64_t' (aka 'long') This bug was introduced in the initial version of the DNS resolver in 325137d603aa81bd24cbd8c99d816dd42291daa7. The fix must be backported to HAProxy 1.6+. --- diff --git a/src/dns.c b/src/dns.c index bc68a81c06..64bb0d15f1 100644 --- a/src/dns.c +++ b/src/dns.c @@ -54,7 +54,7 @@ struct list dns_resolvers = LIST_HEAD_INIT(dns_resolvers); struct list dns_srvrq_list = LIST_HEAD_INIT(dns_srvrq_list); -static THREAD_LOCAL int64_t dns_query_id_seed = 0; /* random seed */ +static THREAD_LOCAL uint64_t dns_query_id_seed = 0; /* random seed */ DECLARE_STATIC_POOL(dns_answer_item_pool, "dns_answer_item", sizeof(struct dns_answer_item)); DECLARE_STATIC_POOL(dns_resolution_pool, "dns_resolution", sizeof(struct dns_resolution));