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@yahoo.ca 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);
tor-commits@lists.torproject.org