From ae1aea4cc490658e917b0c08584c7115a57da00b Mon Sep 17 00:00:00 2001 From: Mike Perry Date: Tue, 13 Mar 2018 13:50:35 +0000 Subject: [PATCH] Bug 25505: Check circuitmux queues before padding. --- changes/bug25505 | 3 +++ src/or/channelpadding.c | 9 +++++++-- 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 changes/bug25505 diff --git a/changes/bug25505 b/changes/bug25505 new file mode 100644 index 0000000000..101c7d5246 --- /dev/null +++ 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 index 5da3009e67..ba432e716b 100644 --- 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)) {