]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
permit sendme version 0 on create_fast circuits
authorRoger Dingledine <arma@torproject.org>
Mon, 12 Jan 2026 06:03:10 +0000 (01:03 -0500)
committerRoger Dingledine <arma@torproject.org>
Wed, 21 Jan 2026 03:30:44 +0000 (22:30 -0500)
Allow old clients to fetch the consensus even if they use version 0
of the SENDME protocol. In mid 2025 we changed the required
minimum version of the "FlowCtrl" protocol to 1, meaning directory
caches hang up on clients that send a version 0 SENDME cell. Since
old clients were no longer able to retrieve the consensus, they
couldn't learn about this required minimum version -- meaning
we've had many many old clients loading down directory servers
for the past months.

Fixes bug 41191; bugfix on 0.4.1.1-alpha.

changes/bug41191 [new file with mode: 0644]
src/core/or/sendme.c

diff --git a/changes/bug41191 b/changes/bug41191
new file mode 100644 (file)
index 0000000..c4bad19
--- /dev/null
@@ -0,0 +1,10 @@
+  o Major bugfixes (directory servers):
+    - Allow old clients to fetch the consensus even if they use version 0
+      of the SENDME protocol. In mid 2025 we changed the required
+      minimum version of the "FlowCtrl" protocol to 1, meaning directory
+      caches hang up on clients that send a version 0 SENDME cell. Since
+      old clients were no longer able to retrieve the consensus, they
+      couldn't learn about this required minimum version -- meaning
+      we've had many many old clients loading down directory servers
+      for the past months. Fixes bug 41191; bugfix on 0.4.1.1-alpha.
+
index 03af99048447f09d6d1aaaadf2c46d822da68139..20f3e5a7144fec3e0a02628a583eaa3165eac4f9 100644 (file)
@@ -182,7 +182,12 @@ sendme_is_valid(const circuit_t *circ, const uint8_t *cell_payload,
   }
 
   /* Validate that we can handle this cell version. */
-  if (!cell_version_can_be_handled(cell_version)) {
+  if (CIRCUIT_IS_ORCIRC(circ) &&
+      CONST_TO_OR_CIRCUIT(circ)->used_legacy_circuit_handshake &&
+      cell_version == 0) {
+    /* exception, allow v0 sendmes on circuits made with CREATE_FAST */
+    log_info(LD_CIRC, "Permitting sendme version 0 on legacy circuit.");
+  } else if (!cell_version_can_be_handled(cell_version)) {
     goto invalid;
   }