Index: net/third_party/nss/patches/nssrwlock.patch |
=================================================================== |
--- net/third_party/nss/patches/nssrwlock.patch (revision 0) |
+++ net/third_party/nss/patches/nssrwlock.patch (revision 0) |
@@ -0,0 +1,235 @@ |
+diff -pu a/nss/lib/ssl/ssl3con.c b/nss/lib/ssl/ssl3con.c |
+--- a/nss/lib/ssl/ssl3con.c 2014-01-07 14:31:44.537621503 -0800 |
++++ b/nss/lib/ssl/ssl3con.c 2014-01-08 15:00:02.814706742 -0800 |
+@@ -5211,7 +5211,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ * the lock across the calls to ssl3_CallHelloExtensionSenders. |
+ */ |
+ if (sid->u.ssl3.lock) { |
+- PR_RWLock_Rlock(sid->u.ssl3.lock); |
++ NSSRWLock_LockRead(sid->u.ssl3.lock); |
+ } |
+ |
+ if (isTLS || (ss->firstHsDone && ss->peerRequestedProtection)) { |
+@@ -5220,7 +5220,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ |
+ extLen = ssl3_CallHelloExtensionSenders(ss, PR_FALSE, maxBytes, NULL); |
+ if (extLen < 0) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return SECFailure; |
+ } |
+ maxBytes -= extLen; |
+@@ -5248,7 +5248,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ /* how many suites are permitted by policy and user preference? */ |
+ num_suites = count_cipher_suites(ss, ss->ssl3.policy, PR_TRUE); |
+ if (!num_suites) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return SECFailure; /* count_cipher_suites has set error code. */ |
+ } |
+ |
+@@ -5293,7 +5293,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ |
+ rv = ssl3_AppendHandshakeHeader(ss, client_hello, length); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ |
+@@ -5312,21 +5312,21 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ rv = ssl3_AppendHandshakeNumber(ss, ss->clientHelloVersion, 2); |
+ } |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ |
+ if (!resending) { /* Don't re-generate if we are in DTLS re-sending mode */ |
+ rv = ssl3_GetNewRandom(&ss->ssl3.hs.client_random); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by GetNewRandom. */ |
+ } |
+ } |
+ rv = ssl3_AppendHandshake(ss, &ss->ssl3.hs.client_random, |
+ SSL3_RANDOM_LENGTH); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ |
+@@ -5336,7 +5336,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ else |
+ rv = ssl3_AppendHandshakeVariable(ss, NULL, 0, 1); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ |
+@@ -5344,14 +5344,14 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ rv = ssl3_AppendHandshakeVariable( |
+ ss, ss->ssl3.hs.cookie, ss->ssl3.hs.cookieLen, 1); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ } |
+ |
+ rv = ssl3_AppendHandshakeNumber(ss, num_suites*sizeof(ssl3CipherSuite), 2); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ |
+@@ -5360,7 +5360,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ rv = ssl3_AppendHandshakeNumber(ss, TLS_EMPTY_RENEGOTIATION_INFO_SCSV, |
+ sizeof(ssl3CipherSuite)); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ actual_count++; |
+@@ -5369,7 +5369,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ rv = ssl3_AppendHandshakeNumber(ss, TLS_FALLBACK_SCSV, |
+ sizeof(ssl3CipherSuite)); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ actual_count++; |
+@@ -5379,7 +5379,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ if (config_match(suite, ss->ssl3.policy, PR_TRUE, &ss->vrange)) { |
+ actual_count++; |
+ if (actual_count > num_suites) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ /* set error card removal/insertion error */ |
+ PORT_SetError(SSL_ERROR_TOKEN_INSERTION_REMOVAL); |
+ return SECFailure; |
+@@ -5387,7 +5387,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ rv = ssl3_AppendHandshakeNumber(ss, suite->cipher_suite, |
+ sizeof(ssl3CipherSuite)); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ } |
+@@ -5398,14 +5398,14 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ * the server.. */ |
+ if (actual_count != num_suites) { |
+ /* Card removal/insertion error */ |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ PORT_SetError(SSL_ERROR_TOKEN_INSERTION_REMOVAL); |
+ return SECFailure; |
+ } |
+ |
+ rv = ssl3_AppendHandshakeNumber(ss, numCompressionMethods, 1); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ for (i = 0; i < compressionMethodsCount; i++) { |
+@@ -5413,7 +5413,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ continue; |
+ rv = ssl3_AppendHandshakeNumber(ss, compressions[i], 1); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by ssl3_AppendHandshake* */ |
+ } |
+ } |
+@@ -5424,20 +5424,20 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ |
+ rv = ssl3_AppendHandshakeNumber(ss, maxBytes, 2); |
+ if (rv != SECSuccess) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return rv; /* err set by AppendHandshake. */ |
+ } |
+ |
+ extLen = ssl3_CallHelloExtensionSenders(ss, PR_TRUE, maxBytes, NULL); |
+ if (extLen < 0) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return SECFailure; |
+ } |
+ maxBytes -= extLen; |
+ |
+ extLen = ssl3_AppendPaddingExtension(ss, paddingExtensionLen, maxBytes); |
+ if (extLen < 0) { |
+- if (sid->u.ssl3.lock) { PR_RWLock_Unlock(sid->u.ssl3.lock); } |
++ if (sid->u.ssl3.lock) { NSSRWLock_UnlockRead(sid->u.ssl3.lock); } |
+ return SECFailure; |
+ } |
+ maxBytes -= extLen; |
+@@ -5446,7 +5446,7 @@ ssl3_SendClientHello(sslSocket *ss, PRBo |
+ } |
+ |
+ if (sid->u.ssl3.lock) { |
+- PR_RWLock_Unlock(sid->u.ssl3.lock); |
++ NSSRWLock_UnlockRead(sid->u.ssl3.lock); |
+ } |
+ |
+ if (ss->xtnData.sentSessionTicketInClientHello) { |
+diff -pu a/nss/lib/ssl/sslimpl.h b/nss/lib/ssl/sslimpl.h |
+--- a/nss/lib/ssl/sslimpl.h 2014-01-07 14:31:44.537621503 -0800 |
++++ b/nss/lib/ssl/sslimpl.h 2014-01-08 15:00:02.804706578 -0800 |
+@@ -728,7 +728,7 @@ struct sslSessionIDStr { |
+ * cached. Before then, there is no need to lock anything because |
+ * the sid isn't being shared by anything. |
+ */ |
+- PRRWLock *lock; |
++ NSSRWLock *lock; |
+ |
+ /* The lock must be held while reading or writing these members |
+ * because they change while the sid is cached. |
+diff -pu a/nss/lib/ssl/sslnonce.c b/nss/lib/ssl/sslnonce.c |
+--- a/nss/lib/ssl/sslnonce.c 2014-01-07 14:31:44.547621666 -0800 |
++++ b/nss/lib/ssl/sslnonce.c 2014-01-08 15:00:02.814706742 -0800 |
+@@ -138,7 +138,7 @@ ssl_DestroySID(sslSessionID *sid) |
+ } |
+ |
+ if (sid->u.ssl3.lock) { |
+- PR_DestroyRWLock(sid->u.ssl3.lock); |
++ NSSRWLock_Destroy(sid->u.ssl3.lock); |
+ } |
+ } |
+ |
+@@ -314,7 +314,7 @@ CacheSID(sslSessionID *sid) |
+ PRINT_BUF(8, (0, "sessionID:", |
+ sid->u.ssl3.sessionID, sid->u.ssl3.sessionIDLength)); |
+ |
+- sid->u.ssl3.lock = PR_NewRWLock(PR_RWLOCK_RANK_NONE, NULL); |
++ sid->u.ssl3.lock = NSSRWLock_New(NSS_RWLOCK_RANK_NONE, NULL); |
+ if (!sid->u.ssl3.lock) { |
+ return; |
+ } |
+@@ -454,7 +454,7 @@ ssl3_SetSIDSessionTicket(sslSessionID *s |
+ * yet, so no locking is needed. |
+ */ |
+ if (sid->u.ssl3.lock) { |
+- PR_RWLock_Wlock(sid->u.ssl3.lock); |
++ NSSRWLock_LockWrite(sid->u.ssl3.lock); |
+ |
+ /* A server might have sent us an empty ticket, which has the |
+ * effect of clearing the previously known ticket. |
+@@ -473,6 +473,6 @@ ssl3_SetSIDSessionTicket(sslSessionID *s |
+ newSessionTicket->ticket.len = 0; |
+ |
+ if (sid->u.ssl3.lock) { |
+- PR_RWLock_Unlock(sid->u.ssl3.lock); |
++ NSSRWLock_UnlockWrite(sid->u.ssl3.lock); |
+ } |
+ } |