summaryrefslogtreecommitdiffstats
path: root/net/third_party
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-01 00:39:00 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-05-01 00:39:00 +0000
commit21c88ef2167cb7f48c04b5ce4b9050c337bd61aa (patch)
tree658611cdaa908ef5ce8f108de41771ada2c0241d /net/third_party
parent846db3ba245807d02e4421777cc18b7e2dddbb6f (diff)
downloadchromium_src-21c88ef2167cb7f48c04b5ce4b9050c337bd61aa.zip
chromium_src-21c88ef2167cb7f48c04b5ce4b9050c337bd61aa.tar.gz
chromium_src-21c88ef2167cb7f48c04b5ce4b9050c337bd61aa.tar.bz2
Move signature_algorithm extension to the end in NSS.
WebSphere Application Server 7.0 appears to be intolerant of an empty extension at the end. To that end, also ensure we never send an empty padding extension. BUG=363583 Review URL: https://codereview.chromium.org/240633006 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@267396 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/third_party')
-rw-r--r--net/third_party/nss/README.chromium5
-rwxr-xr-xnet/third_party/nss/patches/applypatches.sh2
-rw-r--r--net/third_party/nss/patches/reorderextensions.patch34
-rw-r--r--net/third_party/nss/ssl/ssl3ext.c15
4 files changed, 51 insertions, 5 deletions
diff --git a/net/third_party/nss/README.chromium b/net/third_party/nss/README.chromium
index a43f818..e9b7ee8 100644
--- a/net/third_party/nss/README.chromium
+++ b/net/third_party/nss/README.chromium
@@ -100,6 +100,11 @@ Patches:
patches/paddingextvalue.patch
https://bugzilla.mozilla.org/show_bug.cgi?id=994883
+ * Move the signature_algorithms extension to the end of the extension list.
+ This works around a bug in WebSphere Application Server 7.0 which is
+ intolerant to the final extension having zero length.
+ patches/reorderextensions.patch
+
Apply the patches to NSS by running the patches/applypatches.sh script. Read
the comments at the top of patches/applypatches.sh for instructions.
diff --git a/net/third_party/nss/patches/applypatches.sh b/net/third_party/nss/patches/applypatches.sh
index c3daef0..b5f9d30 100755
--- a/net/third_party/nss/patches/applypatches.sh
+++ b/net/third_party/nss/patches/applypatches.sh
@@ -48,3 +48,5 @@ patch -p4 < $patches_dir/sessioncache.patch
patch -p4 < $patches_dir/nssrwlock.patch
patch -p4 < $patches_dir/paddingextvalue.patch
+
+patch -p4 < $patches_dir/reorderextensions.patch
diff --git a/net/third_party/nss/patches/reorderextensions.patch b/net/third_party/nss/patches/reorderextensions.patch
new file mode 100644
index 0000000..3572fb1
--- /dev/null
+++ b/net/third_party/nss/patches/reorderextensions.patch
@@ -0,0 +1,34 @@
+diff --git a/nss/lib/ssl/ssl3ext.c b/nss/lib/ssl/ssl3ext.c
+index 6f3fe2f..523e49a 100644
+--- a/nss/lib/ssl/ssl3ext.c
++++ b/nss/lib/ssl/ssl3ext.c
+@@ -295,9 +295,12 @@ ssl3HelloExtensionSender clientHelloSendersTLS[SSL_MAX_EXTENSIONS] = {
+ { ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn },
+ { ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn },
+ { ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn },
+- { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn },
+ { ssl_signed_certificate_timestamp_xtn,
+- &ssl3_ClientSendSignedCertTimestampXtn }
++ &ssl3_ClientSendSignedCertTimestampXtn },
++ /* WebSphere Application Server 7.0 is intolerant to the last extension
++ * being zero-length. It is not intolerant of TLS 1.2, so move
++ * signature_algorithms to the end. */
++ { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn }
+ /* any extra entries will appear as { 0, NULL } */
+ };
+
+@@ -2347,9 +2350,11 @@ ssl3_CalculatePaddingExtensionLength(unsigned int clientHelloLength)
+ }
+
+ extensionLength = 512 - recordLength;
+- /* Extensions take at least four bytes to encode. */
+- if (extensionLength < 4) {
+- extensionLength = 4;
++ /* Extensions take at least four bytes to encode. Always include at least
++ * one byte of data if including the extension. WebSphere Application Server
++ * 7.0 is intolerant to the last extension being zero-length. */
++ if (extensionLength < 4 + 1) {
++ extensionLength = 4 + 1;
+ }
+
+ return extensionLength;
diff --git a/net/third_party/nss/ssl/ssl3ext.c b/net/third_party/nss/ssl/ssl3ext.c
index 6f3fe2f..523e49a 100644
--- a/net/third_party/nss/ssl/ssl3ext.c
+++ b/net/third_party/nss/ssl/ssl3ext.c
@@ -295,9 +295,12 @@ ssl3HelloExtensionSender clientHelloSendersTLS[SSL_MAX_EXTENSIONS] = {
{ ssl_use_srtp_xtn, &ssl3_SendUseSRTPXtn },
{ ssl_channel_id_xtn, &ssl3_ClientSendChannelIDXtn },
{ ssl_cert_status_xtn, &ssl3_ClientSendStatusRequestXtn },
- { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn },
{ ssl_signed_certificate_timestamp_xtn,
- &ssl3_ClientSendSignedCertTimestampXtn }
+ &ssl3_ClientSendSignedCertTimestampXtn },
+ /* WebSphere Application Server 7.0 is intolerant to the last extension
+ * being zero-length. It is not intolerant of TLS 1.2, so move
+ * signature_algorithms to the end. */
+ { ssl_signature_algorithms_xtn, &ssl3_ClientSendSigAlgsXtn }
/* any extra entries will appear as { 0, NULL } */
};
@@ -2347,9 +2350,11 @@ ssl3_CalculatePaddingExtensionLength(unsigned int clientHelloLength)
}
extensionLength = 512 - recordLength;
- /* Extensions take at least four bytes to encode. */
- if (extensionLength < 4) {
- extensionLength = 4;
+ /* Extensions take at least four bytes to encode. Always include at least
+ * one byte of data if including the extension. WebSphere Application Server
+ * 7.0 is intolerant to the last extension being zero-length. */
+ if (extensionLength < 4 + 1) {
+ extensionLength = 4 + 1;
}
return extensionLength;