[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[tor-bugs] #6480 [Tor Relay]: double connection_free() in dns_resolve()
#6480: double connection_free() in dns_resolve()
-----------------------+----------------------------------------------------
Reporter: arma | Owner:
Type: defect | Status: new
Priority: normal | Milestone: Tor: 0.2.4.x-final
Component: Tor Relay | Version:
Keywords: | Parent:
Points: | Actualpoints:
-----------------------+----------------------------------------------------
If dns_resolve()'s call to dns_resolve_impl() returns -1, it ends up
running
{{{
dns_cancel_pending_resolve(exitconn->_base.address);
if (!exitconn->_base.marked_for_close) {
connection_free(TO_CONN(exitconn));
}}}
But dns_cancel_pending_resolve() runs
{{{
while (resolve->pending_connections) {
...
if (!pendconn->_base.marked_for_close)
connection_free(TO_CONN(pendconn));
}}}
So we would end up calling connection_free() on it twice. But we don't in
practice, since the first connection_free() scribbles 0xCC on it, which
sets marked_for_close to true, so we don't free it the second time! Cue
Nick's circus music.
Our friendly irc person says "fix not so easy btw, connection_free() still
need to call if no it was attached to pending resolve list."
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/6480>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
_______________________________________________
tor-bugs mailing list
tor-bugs@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-bugs