[tor-commits] [tor/master] conn: Remove assert on new listener connection when retrying

ahf at torproject.org ahf at torproject.org
Fri Sep 18 14:52:29 UTC 2020


commit ea339227c27c03d7ced9e526d9e945708f432b22
Author: David Goulet <dgoulet at torproject.org>
Date:   Tue Sep 1 09:54:48 2020 -0400

    conn: Remove assert on new listener connection when retrying
    
    Opening a new listener connection can fail in many ways like a bind()
    permission denied on a low port for instance.
    
    And thus, we should expect to handle an error when creating a new one instead
    of assert() on it.
    
    To hit the removed assert:
    
      ORPort 80
      KeepBindCapabilities 0
    
    Start tor. Then edit torrc:
    
      ORPort <some-IP>:80
    
    HUP tor and the assert is hit.
    
    Fixes #40073
    
    Signed-off-by: David Goulet <dgoulet at torproject.org>
---
 changes/ticket40073            | 3 +++
 src/core/mainloop/connection.c | 9 ++++++++-
 2 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/changes/ticket40073 b/changes/ticket40073
new file mode 100644
index 0000000000..30b028c042
--- /dev/null
+++ b/changes/ticket40073
@@ -0,0 +1,3 @@
+  o Minor bugfixes (relay configuration, crash):
+    - Avoid a fatal assert() when failing to create a listener connection for an
+      address that was in use. Fixes bug 40073; bugfix on 0.3.5.1-alpha.
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index 3595bba85c..dcd4ec492f 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -2923,7 +2923,14 @@ retry_all_listeners(smartlist_t *new_conns, int close_all_noncontrol)
                                                   &skip, &addr_in_use);
     }
 
-    tor_assert(new_conn);
+    /* There are many reasons why we can't open a new listener port so in case
+     * we hit those, bail early so tor can stop. */
+    if (!new_conn) {
+      log_warn(LD_NET, "Unable to create listener port: %s:%d",
+               fmt_addr(&r->new_port->addr), r->new_port->port);
+      retval = -1;
+      break;
+    }
 
     smartlist_add(new_conns, new_conn);
 





More information about the tor-commits mailing list