[tor-commits] [tor/main] Negotiated circuit parameters must pass from worker.

dgoulet at torproject.org dgoulet at torproject.org
Tue Feb 22 20:48:20 UTC 2022


commit a511718a30796e9441cdd066bdce1ad00aaec046
Author: Nick Mathewson <nickm at torproject.org>
Date:   Tue Sep 14 17:06:30 2021 -0400

    Negotiated circuit parameters must pass from worker.
---
 src/core/crypto/onion_crypto.c |  8 ++++++++
 src/core/mainloop/cpuworker.c  | 11 +++++++----
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/src/core/crypto/onion_crypto.c b/src/core/crypto/onion_crypto.c
index b0808b80a8..390151b5df 100644
--- a/src/core/crypto/onion_crypto.c
+++ b/src/core/crypto/onion_crypto.c
@@ -312,6 +312,14 @@ onion_skin_server_handshake(int type,
        * parameters we've just negotiated
        */
 
+      /* NOTE! DANGER, DANGER, DANGER!
+
+         Remember that this function can be run in a worker thread, and so
+         therefore you can't access "global" state that isn't lock-protected.
+
+         CAVEAT HAXX0R!
+      */
+
       tor_free(client_msg);
     }
 
diff --git a/src/core/mainloop/cpuworker.c b/src/core/mainloop/cpuworker.c
index 2f6dae36a8..8da042aa57 100644
--- a/src/core/mainloop/cpuworker.c
+++ b/src/core/mainloop/cpuworker.c
@@ -158,6 +158,8 @@ typedef struct cpuworker_reply_t {
   uint8_t keys[CPATH_KEY_MATERIAL_LEN];
   /** Input to use for authenticating introduce1 cells. */
   uint8_t rend_auth_material[DIGEST_LEN];
+  /** Negotiated circuit parameters. */
+  circuit_params_t circ_params;
 } cpuworker_reply_t;
 
 typedef struct cpuworker_job_u_t {
@@ -387,6 +389,10 @@ cpuworker_onion_handshake_replyfn(void *work_)
     circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
     goto done_processing;
   }
+
+  /* TODO! We need to use rpl.circ_params here to initialize the congestion
+     control parameters of the circuit. */
+
   log_debug(LD_OR,"onionskin_answer succeeded. Yay.");
 
  done_processing:
@@ -416,7 +422,6 @@ cpuworker_onion_handshake_threadfn(void *state_, void *work_)
   const create_cell_t *cc = &req.create_cell;
   created_cell_t *cell_out = &rpl.created_cell;
   struct timeval tv_start = {0,0}, tv_end;
-  circuit_params_t params;
   int n;
   rpl.timed = req.timed;
   rpl.started_at = req.started_at;
@@ -430,7 +435,7 @@ cpuworker_onion_handshake_threadfn(void *state_, void *work_)
                                   sizeof(cell_out->reply),
                                   rpl.keys, CPATH_KEY_MATERIAL_LEN,
                                   rpl.rend_auth_material,
-                                  &params);
+                                  &rpl.circ_params);
   if (n < 0) {
     /* failure */
     log_debug(LD_OR,"onion_skin_server_handshake failed.");
@@ -454,8 +459,6 @@ cpuworker_onion_handshake_threadfn(void *state_, void *work_)
     rpl.success = 1;
   }
 
-  // TODO: pass the parameters back up so we can initialize the cc paremeters.
-
   rpl.magic = CPUWORKER_REPLY_MAGIC;
   if (req.timed) {
     struct timeval tv_diff;





More information about the tor-commits mailing list