]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Bug 26259: Don't count 0-length RELAY_COMMAND_DATA in CIRC_BW OVERHEAD
authorMike Perry <mikeperry-git@torproject.org>
Fri, 1 Jun 2018 00:23:08 +0000 (00:23 +0000)
committerMike Perry <mikeperry-git@torproject.org>
Fri, 1 Jun 2018 00:23:08 +0000 (00:23 +0000)
This cell should be treated as invalid for purposes of CIRC_BW.

src/or/relay.c
src/test/test_relaycell.c

index 0aa15203f371bfd9deb9b15ff55e01c1d1f2c7d0..50f59d6b99f5523d83568c0ea343be8014c28653 100644 (file)
@@ -1556,7 +1556,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
         return -END_CIRC_REASON_TORPROTOCOL;
       }
       /* Total all valid application bytes delivered */
-      if (CIRCUIT_IS_ORIGIN(circ)) {
+      if (CIRCUIT_IS_ORIGIN(circ) && rh.length > 0) {
         circuit_read_valid_data(TO_ORIGIN_CIRCUIT(circ), rh.length);
       }
 
index 1db5202739faa90e7e13d46ffe872550ad8af062..52f4d6113e1ff6e87405d150b24dba7e6a40d8fb 100644 (file)
@@ -233,6 +233,13 @@ test_circbw_relay(void *arg)
                                      circ->cpath);
   ASSERT_COUNTED_BW();
 
+  /* Empty Data cell on open connection: not counted */
+  ENTRY_TO_CONN(entryconn)->marked_for_close = 0;
+  PACK_CELL(1, RELAY_COMMAND_DATA, "");
+  connection_edge_process_relay_cell(&cell, TO_CIRCUIT(circ), edgeconn,
+                                     circ->cpath);
+  ASSERT_UNCOUNTED_BW();
+
   /* Sendme on stream: not counted */
   ENTRY_TO_CONN(entryconn)->outbuf_flushlen = 0;
   PACK_CELL(1, RELAY_COMMAND_SENDME, "Data1234");