From: Uwe Kleine-König Date: Sat, 8 Oct 2022 19:22:52 +0200 Subject: [PATCH] nslookup: ensure unique transaction IDs for the DNS queries The transaction IDs generated by res_mkquery() for both glibc and musl only depends on the state of the monotonic clock. For some machines (here: a TP-Link RE200 powered by a MediaTek MT7620A) the monotonic clock has a coarse resolution (here: 20 µs) and it can happen that the requests for A and AAAA share the same transaction ID. In that case the mapping from received responses to the sent queries doesn't work and name resolution fails as follows: # /bin/busybox nslookup heise.de Server: 127.0.0.1 Address: 127.0.0.1:53 Non-authoritative answer: Name: heise.de Address: 193.99.144.80 *** Can't find heise.de: No answer because the AAAA reply is dropped as a duplicate reply to the A query. To prevent this make sure the transaction IDs are unique. Forwarded: http://lists.busybox.net/pipermail/busybox/2022-October/089911.html --- --- a/networking/nslookup.c +++ b/networking/nslookup.c @@ -978,6 +978,10 @@ int nslookup_main(int argc UNUSED_PARAM, } } + /* Ensure the Transaction IDs are unique */ + for (rc = 1; rc < G.query_count; rc++) + G.query[rc].query[1] = G.query[rc - 1].query[1] + 1; + for (rc = 0; rc < G.serv_count;) { int c;