[Bro-Dev] [Bro-Commits] [git/bro] fastpath: Fix memory leak in DNS TXT lookups. (62de567)
Siwek, Jonathan Luke
jsiwek at illinois.edu
Wed Sep 4 15:05:31 PDT 2013
This might be a significant leak since local.bro has the MHR and notary scripts loaded by default now and those use TXT lookups. Though, the leak is when there's a request for something that's already cached locally, that might happen often enough (same file/cert seen multiple times).
- Jon
On Sep 4, 2013, at 4:50 PM, Jonathan Siwek <jsiwek at ncsa.illinois.edu> wrote:
> Repository : ssh://git@bro-ids.icir.org/bro
>
> On branch : fastpath
> Link : https://github.com/bro/bro/commit/62de5678f7532fb4c31bd7dce481491f5d11128a
>
>> ---------------------------------------------------------------
>
> commit 62de5678f7532fb4c31bd7dce481491f5d11128a
> Author: Jon Siwek <jsiwek at illinois.edu>
> Date: Wed Sep 4 16:47:44 2013 -0500
>
> Fix memory leak in DNS TXT lookups.
>
>
>> ---------------------------------------------------------------
>
> 62de5678f7532fb4c31bd7dce481491f5d11128a
> src/DNS_Mgr.cc | 12 +++++++++-
> testing/btest/core/leaks/dns-txt.bro | 43 ++++++++++++++++++++++++++++++++++++
> 2 files changed, 54 insertions(+), 1 deletion(-)
>
> diff --git a/src/DNS_Mgr.cc b/src/DNS_Mgr.cc
> index 4596a7d..2005202 100644
> --- a/src/DNS_Mgr.cc
> +++ b/src/DNS_Mgr.cc
> @@ -713,6 +713,16 @@ void DNS_Mgr::AddResult(DNS_Mgr_Request* dr, struct nb_dns_result* r)
> TextMap::iterator it = text_mappings.find(dr->ReqHost());
> if ( it == text_mappings.end() )
> text_mappings[dr->ReqHost()] = new_dm;
> + else
> + {
> + if ( new_dm->Failed() && prev_dm && prev_dm->Valid() )
> + ++keep_prev;
> + else
> + {
> + prev_dm = it->second;
> + it->second = new_dm;
> + }
> + }
> }
> else
> {
> @@ -766,7 +776,7 @@ void DNS_Mgr::AddResult(DNS_Mgr_Request* dr, struct nb_dns_result* r)
> }
> }
>
> - if ( prev_dm )
> + if ( prev_dm && ! dr->ReqIsTxt() )
> CompareMappings(prev_dm, new_dm);
>
> if ( keep_prev )
> diff --git a/testing/btest/core/leaks/dns-txt.bro b/testing/btest/core/leaks/dns-txt.bro
> new file mode 100644
> index 0000000..44b7c04
> --- /dev/null
> +++ b/testing/btest/core/leaks/dns-txt.bro
> @@ -0,0 +1,43 @@
> +# Needs perftools support.
> +#
> +# @TEST-GROUP: leaks
> +#
> +# @TEST-REQUIRES: bro --help 2>&1 | grep -q mem-leaks
> +#
> +# @TEST-EXEC: HEAP_CHECK_DUMP_DIRECTORY=. HEAPCHECK=local btest-bg-run bro bro -b -m -r $TRACES/wikipedia.trace %INPUT
> +# @TEST-EXEC: btest-bg-wait 15
> +
> + at load base/frameworks/communication # keep network time running
> +redef exit_only_after_terminate = T;
> +
> +global n1 = 0;
> +
> +function check_term_conditions()
> + {
> + if ( n1 > 7 )
> + terminate();
> + }
> +
> +
> +event do_txt(s: string)
> + {
> + when ( local t1 = lookup_hostname_txt(s) )
> + {
> + print "t1", t1;
> + ++n1;
> + check_term_conditions();
> + }
> + timeout 100secs
> + {
> + print "t1 timeout";
> + ++n1;
> + check_term_conditions();
> + }
> + }
> +
> +event connection_established(c: connection)
> + {
> + event do_txt("localhost");
> + schedule 5sec { do_txt("localhost") };
> + }
> +
>
> _______________________________________________
> bro-commits mailing list
> bro-commits at bro.org
> http://mailman.icsi.berkeley.edu/mailman/listinfo/bro-commits
>
More information about the bro-dev
mailing list