Add counter `num_queries_timed_out` meaning queries that were sitting in the
socket queue and waiting to being processed too long. There is no reason
to process such queries, so let's drop it in the very beginning of the
pipeline.
Add special field in comm_point to store the software receive timestamp
for every particular UDP packet. Aux data parser is updated to read
values and the whole callback is switched to use recvmsg form.
Remove config parser/lexer code as it's rebuilded every time but can
break adding new config options.
Also clean up the code base to avoid mixing actual code changes and lint
issues.
unbound-anchor is compliant with RFC 7958, and the XML format remains unchanged between the old draft and RFC 7958. Update the comments to improve clarity.
eaglegai [Tue, 7 Mar 2023 13:49:54 +0000 (21:49 +0800)]
fix memory leak in unbound-streamtcp when open_svr failed
==1927474== Memcheck, a memory error detector
==1927474== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1927474== Using Valgrind-3.16.0 and LibVEX; rerun with -h for copyright info
==1927474== Command: unbound-streamtcp -f localhost
==1927474==
fatal: bad server specs 'localhost'
==1927474==
==1927474== HEAP SUMMARY:
==1927474== in use at exit: 131,186 bytes in 4 blocks
==1927474== total heap usage: 5 allocs, 1 frees, 132,210 bytes allocated
==1927474==
==1927474== 40 bytes in 1 blocks are still reachable in loss record 1 of 4
==1927474== at 0x483F751: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1927474== by 0x1E0573: sldns_buffer_new (sbuffer.c:21)
==1927474== by 0x11ECED: send_em (streamtcp.c:374)
==1927474== by 0x11E6C1: main (streamtcp.c:585)
==1927474==
==1927474== 40 bytes in 1 blocks are still reachable in loss record 2 of 4
==1927474== at 0x483F751: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1927474== by 0x1E0573: sldns_buffer_new (sbuffer.c:21)
==1927474== by 0x11ECFA: send_em (streamtcp.c:375)
==1927474== by 0x11E6C1: main (streamtcp.c:585)
==1927474==
==1927474== 65,553 bytes in 1 blocks are still reachable in loss record 3 of 4
==1927474== at 0x483F751: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1927474== by 0x1E0583: sldns_buffer_new (sbuffer.c:27)
==1927474== by 0x11ECED: send_em (streamtcp.c:374)
==1927474== by 0x11E6C1: main (streamtcp.c:585)
==1927474==
==1927474== 65,553 bytes in 1 blocks are still reachable in loss record 4 of 4
==1927474== at 0x483F751: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==1927474== by 0x1E0583: sldns_buffer_new (sbuffer.c:27)
==1927474== by 0x11ECFA: send_em (streamtcp.c:375)
==1927474== by 0x11E6C1: main (streamtcp.c:585)
==1927474==
==1927474== LEAK SUMMARY:
==1927474== definitely lost: 0 bytes in 0 blocks
==1927474== indirectly lost: 0 bytes in 0 blocks
==1927474== possibly lost: 0 bytes in 0 blocks
==1927474== still reachable: 131,186 bytes in 4 blocks
==1927474== suppressed: 0 bytes in 0 blocks
==1927474==
==1927474== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
eaglegai [Mon, 6 Mar 2023 14:04:06 +0000 (22:04 +0800)]
fix potential memory leak in unbound-host when errors happen
==3709953== HEAP SUMMARY:
==3709953== in use at exit: 276,541 bytes in 23 blocks
==3709953== total heap usage: 29 allocs, 6 frees, 280,682 bytes allocated
==3709953==
==3709953== 1 bytes in 1 blocks are still reachable in loss record 1 of 23
==3709953== at 0x4866EC0: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-arm64-linux.so)
==3709953== by 0x48E2BC3: ub_initstate (random.c:85)
==3709953== by 0x489B067: ub_ctx_create_nopipe (libunbound.c:114)
==3709953== by 0x489B31F: ub_ctx_create (libunbound.c:180)
==3709953== by 0x10E203: main (unbound-host.c:433)
==3709953==
......
==3709953== 8,192 bytes in 1 blocks are still reachable in loss record 22 of 23
==3709953== at 0x4866EC0: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-arm64-linux.so)
==3709953== by 0x48E427B: regional_create_custom (regional.c:94)
==3709953== by 0x48DEA03: edns_strings_create (edns.c:57)
==3709953== by 0x489B0F3: ub_ctx_create_nopipe (libunbound.c:157)
==3709953== by 0x489B31F: ub_ctx_create (libunbound.c:180)
==3709953== by 0x10E203: main (unbound-host.c:433)
==3709953==
==3709953== 262,144 bytes in 1 blocks are still reachable in loss record 23 of 23
==3709953== at 0x486933C: calloc (in /usr/lib64/valgrind/vgpreload_memcheck-arm64-linux.so)
==3709953== by 0x48C826F: config_create (config_file.c:179)
==3709953== by 0x48C85AF: config_create_forlib (config_file.c:383)
==3709953== by 0x489B0BB: ub_ctx_create_nopipe (libunbound.c:130)
==3709953== by 0x489B31F: ub_ctx_create (libunbound.c:180)
==3709953== by 0x10E203: main (unbound-host.c:433)
==3709953==
==3709953== LEAK SUMMARY:
==3709953== definitely lost: 0 bytes in 0 blocks
==3709953== indirectly lost: 0 bytes in 0 blocks
==3709953== possibly lost: 0 bytes in 0 blocks
==3709953== still reachable: 276,541 bytes in 23 blocks
==3709953== suppressed: 0 bytes in 0 blocks
==3709953==
==3709953== For lists of detected and suppressed errors, rerun with: -s
==3709953== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Changelog entry for
- Clean up iterator/iterator.c::error_response_cache() and allow for
better interaction with serve-expired, prefetch and cached error
responses.
- Fix to ignore entirely empty responses, and try at another authority.
This turns completely empty responses, a type of noerror/nodata into
a servfail, but they do not conform to RFC2308, and the retry can
fetch improved content.
Changelog note for #819, generate configparser.c and comment syntax change.
- Merge #819: Added new static zone type block_a to suppress all A
queries for specific zones.
- Add harden-unknown-additional option. Default on and it removes
unknown records from the authority section and additional section.
Thanks to Xiang Li, from NISL Lab, Tsinghua University.
- Set max-udp-size default to 1232. This is the same default value as
the default value for edns-buffer-size. It restricts client edns
buffer size choices, and makes unbound behave similar to other DNS
resolvers. The new choice, down from 4096 means it is harder to get
large responses from Unbound. Thanks to Xiang Li, from NISL Lab,
Tsinghua University.
- Fix not following cleared RD flags potentially enables amplification
DDoS attacks, reported by Xiang Li and Wei Xu from NISL Lab,
Tsinghua University. The fix stops query loops, by refusing to send
RD=0 queries to a forwarder, they still get answered from cache.