diff options
author | Nick Mathewson <nickm@torproject.org> | 2020-10-07 08:10:08 -0400 |
---|---|---|
committer | Nick Mathewson <nickm@torproject.org> | 2020-10-07 08:10:08 -0400 |
commit | 9587512578e1c45d62e5e97dd9222fe891c835cd (patch) | |
tree | fb30628a8327efba5a29fcd7071a10d51f8056f6 | |
parent | 902944448206d359d3f799ecf8a504bdff493272 (diff) | |
parent | 968b6c30c1158fde003a99a7d22a575e3b211c91 (diff) | |
download | tor-9587512578e1c45d62e5e97dd9222fe891c835cd.tar.gz tor-9587512578e1c45d62e5e97dd9222fe891c835cd.zip |
Merge branch 'maint-0.3.5' into maint-0.4.3
-rw-r--r-- | changes/ticket40035 | 5 | ||||
-rw-r--r-- | src/lib/tls/tortls_nss.c | 10 |
2 files changed, 15 insertions, 0 deletions
diff --git a/changes/ticket40035 b/changes/ticket40035 new file mode 100644 index 0000000000..8cdd447199 --- /dev/null +++ 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 index 38c7efe107..559df36d7b 100644 --- a/src/lib/tls/tortls_nss.c +++ b/src/lib/tls/tortls_nss.c @@ -418,6 +418,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; |