[tor-commits] [tor/master] circuit: Change close reasons from uint16_t to int

nickm at torproject.org nickm at torproject.org
Fri Jan 13 22:03:14 UTC 2017


commit 955d4b7abdb1f4a3295e9c3ef5fa7abf6f71f057
Author: David Goulet <dgoulet at torproject.org>
Date:   Thu Dec 22 12:37:42 2016 -0500

    circuit: Change close reasons from uint16_t to int
    
    When marking for close a circuit, the reason value, a integer, was assigned to
    a uint16_t converting any negative reasons (internal) to the wrong value. On
    the HS side, this was causing the client to flag introduction points to be
    unreachable as the internal reason was wrongfully converted to a positive
    16bit value leading to flag 2 out of 3 intro points to be unreachable.
    
    Fixes #20307 and partially fixes #21056
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 changes/bug20307 | 7 +++++++
 src/or/or.h      | 4 ++--
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/changes/bug20307 b/changes/bug20307
new file mode 100644
index 0000000..6036b99
--- /dev/null
+++ b/changes/bug20307
@@ -0,0 +1,7 @@
+  o Minor bugfixes (circuit, hidden service)
+    - When closing a circuit, the reason for doing so was assigned from a int
+      value to a uint16_t which is quite a problem for negative value that are
+      our internal reasons (ex: END_CIRC_REASON_IP_NOW_REDUNDANT). On the HS
+      side, this was causing introduction point to be flagged as unusable
+      because the reason wasn't the right one due to the bad conversion.
+      Partially fixes #21056 and fixes #20307; Bugfix on tor-0.2.8.1-alpha.
diff --git a/src/or/or.h b/src/or/or.h
index 00031a8..c35e15e 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3039,11 +3039,11 @@ typedef struct circuit_t {
   /** For what reason (See END_CIRC_REASON...) is this circuit being closed?
    * This field is set in circuit_mark_for_close and used later in
    * circuit_about_to_free. */
-  uint16_t marked_for_close_reason;
+  int marked_for_close_reason;
   /** As marked_for_close_reason, but reflects the underlying reason for
    * closing this circuit.
    */
-  uint16_t marked_for_close_orig_reason;
+  int marked_for_close_orig_reason;
 
   /** Unique ID for measuring tunneled network status requests. */
   uint64_t dirreq_id;





More information about the tor-commits mailing list