tor

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

commit 46161b194f7a0ca7a2c83c36d1eb01f8110d80a1
parent 4edf0bf9601e725ae349f6da97da174b689a5f74
Author: David Goulet <dgoulet@torproject.org>
Date:   Thu, 27 Mar 2025 08:49:40 -0400

conflux: Avoid non fatal assert in CIRCUIT_IS_CONFLUX()

In the circuit_about_to_free(), we clear the circ->conflux object and then we
end up trying to emit an event on the control port which calls
CIRCUIT_IS_CONFLUX() and non fatal assert on the false branch.

Fixes #41037

Signed-off-by: David Goulet <dgoulet@torproject.org>

Diffstat:
Achanges/ticket41037 | 3+++
Msrc/core/or/conflux_util.h | 5+++--
2 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/changes/ticket41037 b/changes/ticket41037 @@ -0,0 +1,3 @@ + o Minor bugfix (conflux): + - Avoid a non fatal assert when describing a conflux circuit on the control + port after being prepped to be freed. Fixes bug 41037; bugfix on 0.4.8.15. diff --git a/src/core/or/conflux_util.h b/src/core/or/conflux_util.h @@ -28,8 +28,9 @@ CIRCUIT_IS_CONFLUX(const circuit_t *circ) tor_assert_nonfatal(circ->purpose == CIRCUIT_PURPOSE_CONFLUX_LINKED); return true; } else { - tor_assert_nonfatal(circ->purpose != CIRCUIT_PURPOSE_CONFLUX_LINKED); - tor_assert_nonfatal(circ->purpose != CIRCUIT_PURPOSE_CONFLUX_UNLINKED); + /* We don't assert on purposes here because we can end up in this branch + * with circ->conflux being NULL but for a conflux purpose. This happens in + * the about_to_free() code path. */ return false; } }