[tor-bugs] #23123 [Core Tor/Tor]: Cannibalized HS circuit don't have their timestamp_dirty updated
Tor Bug Tracker & Wiki
blackhole at torproject.org
Sun Aug 6 19:52:21 UTC 2017
#23123: Cannibalized HS circuit don't have their timestamp_dirty updated
------------------------------+---------------------------------
Reporter: dgoulet | Owner:
Type: defect | Status: new
Priority: Medium | Milestone: Tor: 0.3.2.x-final
Component: Core Tor/Tor | Version:
Severity: Normal | Keywords: tor-hs, tor-circuit
Actual Points: | Parent ID:
Points: | Reviewer:
Sponsor: |
------------------------------+---------------------------------
Today, I encountered this behavior on a prop224 client when connecting to
a service:
{{{
Aug 06 15:21:06.000 [info] connection_ap_handshake_attach_circuit():
pending-join circ 3551616045 already here, with intro ack. Stalling.
(stream 2 sec old)
Aug 06 15:21:07.000 [info] circuit_expire_building(): Marking circ
3551616045 (state 4:open, purpose 11) as timed-out HS circ;
}}}
So my client was able to establish a rendezvous point but then just before
being attached to a stream and ready to be used, it expires...
That specific circuit has been cannibalized and in
`circuit_launch_by_extend_info()`, a RP circuit calls
`circuit_extend_to_new_exit()` to extend to it which does not update the
`timestamp_dirty` and has this comment:
{{{
// XXX: Should cannibalized circuits be dirty or not? Not easy to say..
}}}
Sooooooo ultimately, down the rabbit hole, the `circuit_expire_building()`
function checks the `timestamp_dirty` and has that comment:
{{{
/* rend and intro circs become dirty each time they
* make an introduction attempt. so timestamp_dirty
* will reflect the time since the last attempt.
}}}
... but that is true only if `timestamp_dirty == 0` which is not true if
the circuit was cannibalized.
In `rend_service_rendezvous_has_opened()`, we have this:
{{{
if (!circuit->base_.timestamp_dirty)
circuit->base_.timestamp_dirty = time(NULL);
}}}
Ok, seems the solution is just to set the `timestamp_dirty` every time
when the RP/IP opens *or* we flag the circuit that it has been
cannibalized and we can update the timestamp accordingly?
Btw, this affects legacy system as well.
--
Ticket URL: <https://trac.torproject.org/projects/tor/ticket/23123>
Tor Bug Tracker & Wiki <https://trac.torproject.org/>
The Tor Project: anonymity online
More information about the tor-bugs
mailing list