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.
Changelog note for 1.17.1rc2 fix.
- Fix wildcard in hyperlocal zone service degradation, reported
by Sergey Kacheev. This fix is included in 1.17.1rc2.
- Fix to stop possible loops in the tcp reuse code (write_wait list
and tcp_wait list). Based on analysis and patch from Prad Seniappan
and Karthik Umashankar.
- Fix to stop responses with TC flag from resulting in partial
responses. It retries to fetch the data elsewhere, or fails the
query and in depth fix removes the TC flag from the cached item.