]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug 25505: Check circuitmux queues before padding.
authorMike Perry <mikeperry-git@torproject.org>
Tue, 13 Mar 2018 13:50:35 +0000 (13:50 +0000)
committerNick Mathewson <nickm@torproject.org>
Tue, 11 Sep 2018 19:53:03 +0000 (15:53 -0400)
changes/bug25505 [new file with mode: 0644]
src/or/channelpadding.c

diff --git a/changes/bug25505 b/changes/bug25505
new file mode 100644 (file)
index 0000000..101c7d5
--- /dev/null
@@ -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.
index 5da3009e6710b9cdfd8ba58f484f79bfc0958147..ba432e716b604a61050b1b27fb55ea36db7b06c7 100644 (file)
@@ -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)) {