tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 07f3345e11530b14c719f8a776f15b943d2fef91
parent 515d4f1e93bcf9160c8b41d5a90b3144388f706f
Author: Alexander Færøy <ahf@torproject.org>
Date:   Tue, 14 Jul 2020 14:47:48 +0000

Merge remote-tracking branch 'tor-gitlab/merge-requests/43' into maint-0.4.4

Diffstat:
Achanges/ticket40035 | 5+++++
Msrc/lib/tls/tortls_nss.c | 10++++++++++
2 files changed, 15 insertions(+), 0 deletions(-)

diff --git a/changes/ticket40035 b/changes/ticket40035 @@ -0,0 +1,5 @@ + o Major bugfixes (NSS): + - When running with NSS enabled, make sure that NSS knows to expect + nonblocking sockets. Previously, we set our TCP sockets as blocking, + but did not tell NSS about the fact, which in turn could lead to + unexpected blocking behavior. Fixes bug 40035; bugfix on 0.3.5.1-alpha. diff --git a/src/lib/tls/tortls_nss.c b/src/lib/tls/tortls_nss.c @@ -431,6 +431,16 @@ tor_tls_new(tor_socket_t sock, int is_server) return NULL; } + /* even if though the socket is already nonblocking, we need to tell NSS + * about the fact, so that it knows what to do when it says EAGAIN. */ + PRSocketOptionData data; + data.option = PR_SockOpt_Nonblocking; + data.value.non_blocking = 1; + if (PR_SetSocketOption(ssl, &data) != PR_SUCCESS) { + PR_Close(ssl); + return NULL; + } + tor_tls_t *tls = tor_malloc_zero(sizeof(tor_tls_t)); tls->magic = TOR_TLS_MAGIC; tls->context = ctx;