summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2020-10-07 08:10:08 -0400
committerNick Mathewson <nickm@torproject.org>2020-10-07 08:10:08 -0400
commit02f88523864960f8ef6666968a824e4f7863b5ad (patch)
tree5ab7dfa15c9779edb2d7a6663775a84169940786
parente60d62e50d347c4db7356429835f52f502e5fa01 (diff)
parent9587512578e1c45d62e5e97dd9222fe891c835cd (diff)
downloadtor-02f88523864960f8ef6666968a824e4f7863b5ad.tar.gz
tor-02f88523864960f8ef6666968a824e4f7863b5ad.zip
Merge branch 'maint-0.4.3' into release-0.4.3
-rw-r--r--changes/ticket400355
-rw-r--r--src/lib/tls/tortls_nss.c10
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;