The change fixes module print when specified module is unknown. On
example config:
server:
module-config: "respip valdator iterator"
Before the change printed error looked like:
error: Unknown value in module-config, module: ''. This module is
not present (not compiled in), See the list of linked modules with
unbound -V
After the change module is printed as expected:
error: Unknown value in module-config, module: 'valdator'. This
module is not present (not compiled in), See the list of linked
modules with unbound -V
Module truncation happens because parse error does not guarantee that
leading whitespace is removed by `module_factory()` call.
The change always removes leading whitespace (if present).
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.