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.
--- /dev/null
+ 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.
+
}
/* 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;
}