tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

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:
Achanges/bug41191 | 10++++++++++
Msrc/core/or/sendme.c | 7++++++-
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; }