[tor-commits] [tor/master] Use connection_or_change_state() in v3 handshaking state change

dgoulet at torproject.org dgoulet at torproject.org
Thu Nov 12 17:13:17 UTC 2020


commit 46ccde66a97d7985388eb54bc74a025402fb0a19
Author: Neel Chauhan <neel at neelc.org>
Date:   Mon Nov 9 14:31:01 2020 -0800

    Use connection_or_change_state() in v3 handshaking state change
---
 changes/bug32880            | 5 +++++
 src/core/or/channeltls.c    | 2 +-
 src/core/or/connection_or.c | 2 +-
 src/core/or/connection_or.h | 4 ++--
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/changes/bug32880 b/changes/bug32880
new file mode 100644
index 0000000000..a25cabb7dc
--- /dev/null
+++ b/changes/bug32880
@@ -0,0 +1,5 @@
+  o Minor bugfixes (circuit, handshake):
+    - In the v3 handshaking code, Use connection_or_change_state() to change
+      the state. Previously, we changed the state directly, but this did not
+      pass a state change to the pubsub or channel object. Fixes bug 32880;
+      bugfix on 0.2.3.6-alpha. Patch by Neel Chauhan.
diff --git a/src/core/or/channeltls.c b/src/core/or/channeltls.c
index 32723fed1e..b6fdbcc632 100644
--- a/src/core/or/channeltls.c
+++ b/src/core/or/channeltls.c
@@ -1428,7 +1428,7 @@ enter_v3_handshake_with_cell(var_cell_t *cell, channel_tls_t *chan)
            "OR_HANDSHAKING_V3, on a connection we originated.");
   }
   connection_or_block_renegotiation(chan->conn);
-  chan->conn->base_.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+  connection_or_change_state(chan->conn, OR_CONN_STATE_OR_HANDSHAKING_V3);
   if (connection_init_or_handshake_state(chan->conn, started_here) < 0) {
     connection_or_close_for_error(chan->conn, 0);
     return -1;
diff --git a/src/core/or/connection_or.c b/src/core/or/connection_or.c
index bf29cd2c3a..70cb19a3f3 100644
--- a/src/core/or/connection_or.c
+++ b/src/core/or/connection_or.c
@@ -414,7 +414,7 @@ connection_or_state_publish(const or_connection_t *conn, uint8_t state)
  * be notified.
  */
 
-MOCK_IMPL(STATIC void,
+MOCK_IMPL(void,
 connection_or_change_state,(or_connection_t *conn, uint8_t state))
 {
   tor_assert(conn);
diff --git a/src/core/or/connection_or.h b/src/core/or/connection_or.h
index b6aaa44df2..8cbe8c028b 100644
--- a/src/core/or/connection_or.h
+++ b/src/core/or/connection_or.h
@@ -120,14 +120,14 @@ void connection_or_group_set_badness_(smartlist_t *group, int force);
 #ifdef CONNECTION_OR_PRIVATE
 STATIC int should_connect_to_relay(const or_connection_t *or_conn);
 STATIC void note_or_connect_failed(const or_connection_t *or_conn);
+#endif /* defined(CONNECTION_OR_PRIVATE) */
 
 /*
  * Call this when changing connection state, so notifications to the owning
  * channel can be handled.
  */
-MOCK_DECL(STATIC void,connection_or_change_state,
+MOCK_DECL(void, connection_or_change_state,
           (or_connection_t *conn, uint8_t state));
-#endif /* defined(CONNECTION_OR_PRIVATE) */
 
 #ifdef TOR_UNIT_TESTS
 extern int testing__connection_or_pretend_TLSSECRET_is_supported;



More information about the tor-commits mailing list