[tor-commits] [tor/release-0.4.5] relay: Don't BUG() if we can't find authority descriptor

nickm at torproject.org nickm at torproject.org
Tue Jan 19 17:03:48 UTC 2021


commit f0c29f0883045283d86b584f1634770358d84f41
Author: David Goulet <dgoulet at torproject.org>
Date:   Thu Jan 14 09:56:11 2021 -0500

    relay: Don't BUG() if we can't find authority descriptor
    
    We can end up trying to find our address from an authority while we don't have
    yet its descriptor.
    
    In this case, don't BUG() and just come back later.
    
    Closes #40231
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 changes/ticket40231                 |  4 ++++
 src/feature/relay/relay_find_addr.c | 10 +++++++---
 2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/changes/ticket40231 b/changes/ticket40231
new file mode 100644
index 0000000000..a5ba598fd1
--- /dev/null
+++ b/changes/ticket40231
@@ -0,0 +1,4 @@
+  o Minor bugfixes (relay):
+    - If we were unable to build our descriptor, don't mark that we've
+      advertised our descriptor. Also remove an harmless BUG(). Fixes bug 40231;
+      bugfix on 0.4.5.1-alpha.
diff --git a/src/feature/relay/relay_find_addr.c b/src/feature/relay/relay_find_addr.c
index 9c2c8b281c..2da2328b14 100644
--- a/src/feature/relay/relay_find_addr.c
+++ b/src/feature/relay/relay_find_addr.c
@@ -198,9 +198,13 @@ relay_addr_learn_from_dirauth(void)
       return;
     }
     const node_t *node = node_get_by_id(rs->identity_digest);
-    if (BUG(!node)) {
-      /* If there is a routerstatus_t, there is a node_t thus this should
-       * never fail. */
+    if (!node) {
+      /* This can happen if we are still in the early starting stage where no
+       * descriptors we actually fetched and thus we have the routerstatus_t
+       * for the authority but not its descriptor which is needed to build a
+       * circuit and thus learn our address. */
+      log_info(LD_GENERAL, "Can't build a circuit to an authority. Unable to "
+                           "learn for now our address from them.");
       return;
     }
     extend_info_t *ei = extend_info_from_node(node, 1);





More information about the tor-commits mailing list