for DNS UDP replies larger than 512 bytes, fallback to TCP is used. For example 'host toomany.ddstreet.org'.
Due to a bug in resolved in refcounting DNS stream types, the refcount underflows for type 0 streams (which resolved uses to talk to upstream nameservers), resulting in resolved being unable to fallback to TCP to handle truncated UDP replies.
; <<>> DiG 9.11.3-1ubuntu1.9-Ubuntu <<>> +noanswer +noedns toomany.ddstreet.org
;; global options: +cmd
;; connection timed out; no servers could be reached
[regression potential]
very low, as this only properly sets the stream type in the DnsStream object; any regression would be a failure to be able to use TCP for DNS requests or replies.
[impact]
for DNS UDP replies larger than 512 bytes, fallback to TCP is used. For example 'host toomany. ddstreet. org'.
Due to a bug in resolved in refcounting DNS stream types, the refcount underflows for type 0 streams (which resolved uses to talk to upstream nameservers), resulting in resolved being unable to fallback to TCP to handle truncated UDP replies.
[test case]
ubuntu@ sf247344- upstream: ~$ dig +noanswer +noedns toomany. ddstreet. org
;; Truncated, retrying in TCP mode.
; <<>> DiG 9.11.3- 1ubuntu1. 9-Ubuntu <<>> +noanswer +noedns toomany. ddstreet. org
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2683
;; flags: qr rd ra; QUERY: 1, ANSWER: 40, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION: ddstreet. org. IN A
;toomany.
;; Query time: 0 msec 53#53(127. 0.0.53)
;; SERVER: 127.0.0.
;; WHEN: Thu Oct 24 11:40:29 UTC 2019
;; MSG SIZE rcvd: 678
ubuntu@ sf247344- upstream: ~$ sudo resolvectl flush-caches sf247344- upstream: ~$ dig +noanswer +noedns toomany. ddstreet. org
ubuntu@
; <<>> DiG 9.11.3- 1ubuntu1. 9-Ubuntu <<>> +noanswer +noedns toomany. ddstreet. org
;; global options: +cmd
;; connection timed out; no servers could be reached
[regression potential]
very low, as this only properly sets the stream type in the DnsStream object; any regression would be a failure to be able to use TCP for DNS requests or replies.
[other info]
https:/ /github. com/systemd/ systemd/ pull/13838