[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[tor-commits] [tor] branch main updated: Trigger OOS on bind failures (fixes #40597)



This is an automated email from the git hooks/post-receive script.

nickm pushed a commit to branch main
in repository tor.

The following commit(s) were added to refs/heads/main by this push:
     new 87b2ce6f84 Trigger OOS on bind failures (fixes #40597)
87b2ce6f84 is described below

commit 87b2ce6f848ec3a65a7a06ef1edce5a0652ad9a3
Author: Alex Xu (Hello71) <alex_y_xu@xxxxxxxx>
AuthorDate: Sat May 21 15:52:31 2022 -0400

    Trigger OOS on bind failures (fixes #40597)
---
 changes/issue40597             |  4 ++++
 src/core/mainloop/connection.c | 24 +++++++++++++++---------
 2 files changed, 19 insertions(+), 9 deletions(-)

diff --git a/changes/issue40597 b/changes/issue40597
new file mode 100644
index 0000000000..db2220805e
--- /dev/null
+++ b/changes/issue40597
@@ -0,0 +1,4 @@
+  o Minor features (relays):
+    - Trigger OOS when bind fails with EADDRINUSE. This improves fairness when
+      a large number of exit connections are requested, and properly signals
+      exhaustion to the network. Fixes issue 40597; patch by Alex Xu (Hello71).
diff --git a/src/core/mainloop/connection.c b/src/core/mainloop/connection.c
index 9271a70914..75fc3c8918 100644
--- a/src/core/mainloop/connection.c
+++ b/src/core/mainloop/connection.c
@@ -2224,21 +2224,27 @@ connection_connect_sockaddr,(connection_t *conn,
              tor_socket_strerror(errno));
   }
 
-  /*
-   * We've got the socket open; give the OOS handler a chance to check
-   * against configured maximum socket number, but tell it no exhaustion
-   * failure.
-   */
-  connection_check_oos(get_n_open_sockets(), 0);
-
   if (bindaddr && bind(s, bindaddr, bindaddr_len) < 0) {
     *socket_error = tor_socket_errno(s);
-    log_warn(LD_NET,"Error binding network socket: %s",
-             tor_socket_strerror(*socket_error));
+    if (ERRNO_IS_EADDRINUSE(*socket_error)) {
+      socket_failed_from_resource_exhaustion();
+      connection_check_oos(get_n_open_sockets(), 1);
+    } else {
+      log_warn(LD_NET,"Error binding network socket: %s",
+               tor_socket_strerror(*socket_error));
+      connection_check_oos(get_n_open_sockets(), 0);
+    }
     tor_close_socket(s);
     return -1;
   }
 
+  /*
+   * We've got the socket open and bound; give the OOS handler a chance to
+   * check against configured maximum socket number, but tell it no exhaustion
+   * failure.
+   */
+  connection_check_oos(get_n_open_sockets(), 0);
+
   tor_assert(options);
   if (options->ConstrainedSockets)
     set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.
_______________________________________________
tor-commits mailing list
tor-commits@xxxxxxxxxxxxxxxxxxxx
https://lists.torproject.org/cgi-bin/mailman/listinfo/tor-commits