tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 578aaa7f122df32cdf4ffe713bc8aa179433fb0b
parent 54e25ab124b4ebb50f1577483ac5c08f67e8b114
Author: Mike Perry <mikeperry-git@torproject.org>
Date:   Tue, 13 Mar 2018 13:50:35 +0000

Bug 25505: Check circuitmux queues before padding.

Diffstat:
Achanges/bug25505 | 3+++
Msrc/or/channelpadding.c | 9+++++++--
2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/changes/bug25505 b/changes/bug25505 @@ -0,0 +1,3 @@ + o Minor bugfixes (netflow padding): + - Ensure circuitmux queues are empty before scheduling or sending padding. + Fixes bug 25505; bugfix on 0.3.1.1-alpha. diff --git a/src/or/channelpadding.c b/src/or/channelpadding.c @@ -379,7 +379,8 @@ channelpadding_send_padding_cell_for_callback(channel_t *chan) chan->pending_padding_callback = 0; if (monotime_coarse_is_zero(&chan->next_padding_time) || - chan->has_queued_writes(chan)) { + chan->has_queued_writes(chan) || + (chan->cmux && circuitmux_num_cells(chan->cmux))) { /* We must have been active before the timer fired */ monotime_coarse_zero(&chan->next_padding_time); return; @@ -755,7 +756,11 @@ channelpadding_decide_to_pad_channel(channel_t *chan) return CHANNELPADDING_WONTPAD; } - if (!chan->has_queued_writes(chan)) { + /* There should always be a cmux on the circuit. After that, + * only schedule padding if there are no queued writes and no + * queued cells in circuitmux queues. */ + if (chan->cmux && !chan->has_queued_writes(chan) && + !circuitmux_num_cells(chan->cmux)) { int is_client_channel = 0; if (CHANNEL_IS_CLIENT(chan, options)) {