]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Negotiated circuit parameters must pass from worker.
authorNick Mathewson <nickm@torproject.org>
Tue, 14 Sep 2021 21:06:30 +0000 (17:06 -0400)
committerMike Perry <mikeperry-git@torproject.org>
Tue, 22 Feb 2022 19:28:33 +0000 (19:28 +0000)
src/core/crypto/onion_crypto.c
src/core/mainloop/cpuworker.c

index b0808b80a81ec10c67fa5ad54c8e3e99cfba4b27..390151b5dfe247c0360615cb2bea8605fd04f7b5 100644 (file)
@@ -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);
     }
 
index 2f6dae36a8c17a8f951ab8b37e93f33501812b73..8da042aa57cddb33b246665ae5cf18eb51fa128d 100644 (file)
@@ -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;