commit ef2f9106614bd1d210a55c90d360b442f7f0300e
parent 802b1c39111db1398ef925fb422c69d624fce09d
Author: Roger Dingledine <arma@torproject.org>
Date: Mon, 12 Jan 2026 01:03:10 -0500
permit sendme version 0 on create_fast circuits
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.
Diffstat:
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/changes/bug41191 b/changes/bug41191
@@ -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.
+
diff --git a/src/core/or/sendme.c b/src/core/or/sendme.c
@@ -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;
}