Skip to content

statistics: Properly count all rendezvous cells (avoid undercounting). [044+]

George Kadianakis requested to merge asn/tor:bug40117_044 into maint-0.4.4

tl;dr We were not counting cells flying from the client to the service, but we were counting cells flying from the service to the client.

When a rendezvous cell arrives from the client to the RP, the RP forwards it to the service.

For this to happen, the cell first passes through command_process_relay_cell() which normally does the statistics counting. However because the rend_circ circuit was not flagged with circuit_carries_hs_traffic_stats in rend_mid_rendezvous(), the cell is not counted there.

Then the cell goes to circuit_receive_relay_cell() which has a special code block based on rend_splice specifically for rendezvous cells, and the cell gets directly passed to rend_circ via a direct call to circuit_receive_relay_cell(). The cell never passes through command_process_relay_cell() ever again and hence is never counted by our rephist module.

The fix here is to flag the rend_circ circuit with circuit_carries_hs_traffic_stats so that the cell is counted as soon as it hits command_process_relay_cell().

Furthermore we avoid double-counting cells since the special code block of circuit_receive_relay_cell() makes us count rendezvous cells only as they enter the RP and not as they exit it.

Fixes #40117 (closed).

Edited by George Kadianakis

Merge request reports