conflux: Avoid noting a cell was sent on a closed circuit
commit269b4561a17698732c6402e2b7a8aeb1f8e3c3bf
authorDavid Goulet <dgoulet@torproject.org>
Mon, 15 Apr 2024 18:24:45 +0000 (15 14:24 -0400)
committerDavid Goulet <dgoulet@torproject.org>
Mon, 15 Apr 2024 18:24:45 +0000 (15 14:24 -0400)
treed459664432fa0538eb4b7b3405d312b9e742cc30
parent6ebf4360840b173b92fcdb14ce22bd326cea652f
conflux: Avoid noting a cell was sent on a closed circuit

It turns out that circuit_package_relay_cell() returns 0 in order to drop a
cell but there is a code path, if the circuit queue is full, that also silently
closes the circuit and returns 0.

This lead to Conflux thinking a cell was sent but actually the cell was not and
the circuit was closed leading to the hard assert.

And so this function makes sure that circuit_package_relay_cell() and
append_cell_to_circuit_queue() returns a value that indicate what happened with
the cell and circuit so the caller can make an informed decision with it.

This change makes it that we do NOT enter the Conflux subsystem if the cell is
not queued on the circuit.

Fixes #40921

Signed-off-by: David Goulet <dgoulet@torproject.org>
changes/ticket40921 [new file with mode: 0644]
src/core/or/circuitbuild.c
src/core/or/conflux.c
src/core/or/relay.c
src/core/or/relay.h
src/feature/relay/circuitbuild_relay.c