[tor-commits] [tor/main] Code improvements

asn at torproject.org asn at torproject.org
Wed Jul 28 09:04:17 UTC 2021


commit 1f87269cf47e2c01ef500405a971b17130c8bb72
Author: George Kadianakis <desnacked at riseup.net>
Date:   Tue Jul 6 13:22:59 2021 +0300

    Code improvements
---
 src/feature/client/entrynodes.c | 17 ++++++++++++-----
 src/feature/client/entrynodes.h |  2 +-
 src/test/test_entrynodes.c      |  2 +-
 3 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/feature/client/entrynodes.c b/src/feature/client/entrynodes.c
index 58faa8033c..5c6152449a 100644
--- a/src/feature/client/entrynodes.c
+++ b/src/feature/client/entrynodes.c
@@ -3996,8 +3996,14 @@ get_max_lifetime_of_layer2_hs_guards(void)
 static int
 get_layer2_hs_guard_lifetime(void)
 {
-  return crypto_rand_int_range(get_min_lifetime_of_layer2_hs_guards(),
-                               get_max_lifetime_of_layer2_hs_guards());
+  int min = get_min_lifetime_of_layer2_hs_guards();
+  int max = get_max_lifetime_of_layer2_hs_guards();
+
+  if (BUG(min >= max)) {
+    return min;
+  }
+
+  return crypto_rand_int_range(min, max);
 }
 
 /** Maintain the L2 guard list. Make sure the list contains enough guards, do
@@ -4107,9 +4113,10 @@ purge_vanguards_lite(void)
 
 /** Return a routerset containing the L2 guards or NULL if it's not yet
  *  initialized. Callers must not free the routerset. Designed for use in
- *  pick_vanguard_middle_node() and should not be used anywhere else (because
- *  the routerset pointer can dangle under your feet) */
-routerset_t *
+ *  pick_vanguard_middle_node() and should not be used anywhere else. Do not
+ *  store this pointer -- any future calls to maintain_layer2_guards() and
+ *  purge_vanguards_lite() can invalidate it. */
+const routerset_t *
 get_layer2_guards(void)
 {
   if (!layer2_guards) {
diff --git a/src/feature/client/entrynodes.h b/src/feature/client/entrynodes.h
index c1bc5b41c1..9c38c2b5f8 100644
--- a/src/feature/client/entrynodes.h
+++ b/src/feature/client/entrynodes.h
@@ -651,7 +651,7 @@ guard_get_guardfraction_bandwidth(guardfraction_bandwidth_t *guardfraction_bw,
                                   int orig_bandwidth,
                                   uint32_t guardfraction_percentage);
 
-routerset_t *get_layer2_guards(void);
+const routerset_t *get_layer2_guards(void);
 void maintain_layer2_guards(void);
 void purge_vanguards_lite(void);
 
diff --git a/src/test/test_entrynodes.c b/src/test/test_entrynodes.c
index 785ce296d3..4d353e8480 100644
--- a/src/test/test_entrynodes.c
+++ b/src/test/test_entrynodes.c
@@ -3102,7 +3102,7 @@ test_entry_guard_layer2_guards(void *arg)
   /* Create the guardset */
   maintain_layer2_guards();
 
-  routerset_t *l2_guards = get_layer2_guards();
+  const routerset_t *l2_guards = get_layer2_guards();
   tt_assert(l2_guards);
   tt_int_op(routerset_len(l2_guards), OP_EQ, 4);
 





More information about the tor-commits mailing list