summaryrefslogtreecommitdiff
path: root/core/openssl
diff options
context:
space:
mode:
authorroot <root@rshg054.dnsready.net>2013-02-09 00:07:22 -0800
committerroot <root@rshg054.dnsready.net>2013-02-09 00:07:22 -0800
commite9c244cac8e5dc1c59c7e8b7bc885fef04224b70 (patch)
tree64f1532d7e6e652c2ea5a0bb5efd7ea36f431535 /core/openssl
parent7c92c5fcfb5653f63243842299e413672653d1ad (diff)
Sat Feb 9 00:07:22 PST 2013
Diffstat (limited to 'core/openssl')
-rw-r--r--core/openssl/Fix-IV-check-and-padding-removal.patch72
-rw-r--r--core/openssl/PKGBUILD17
2 files changed, 83 insertions, 6 deletions
diff --git a/core/openssl/Fix-IV-check-and-padding-removal.patch b/core/openssl/Fix-IV-check-and-padding-removal.patch
new file mode 100644
index 000000000..321791251
--- /dev/null
+++ b/core/openssl/Fix-IV-check-and-padding-removal.patch
@@ -0,0 +1,72 @@
+From 32cc2479b473c49ce869e57fded7e9a77b695c0d Mon Sep 17 00:00:00 2001
+From: "Dr. Stephen Henson" <steve@openssl.org>
+Date: Thu, 7 Feb 2013 21:06:37 +0000
+Subject: [PATCH] Fix IV check and padding removal.
+
+Fix the calculation that checks there is enough room in a record
+after removing padding and optional explicit IV. (by Steve)
+
+For AEAD remove the correct number of padding bytes (by Andy)
+---
+ ssl/s3_cbc.c | 33 ++++++++++++---------------------
+ 1 file changed, 12 insertions(+), 21 deletions(-)
+
+diff --git a/ssl/s3_cbc.c b/ssl/s3_cbc.c
+index ce77acd..0f60507 100644
+--- a/ssl/s3_cbc.c
++++ b/ssl/s3_cbc.c
+@@ -139,31 +139,22 @@ int tls1_cbc_remove_padding(const SSL* s,
+ unsigned mac_size)
+ {
+ unsigned padding_length, good, to_check, i;
+- const char has_explicit_iv =
+- s->version >= TLS1_1_VERSION || s->version == DTLS1_VERSION;
+- const unsigned overhead = 1 /* padding length byte */ +
+- mac_size +
+- (has_explicit_iv ? block_size : 0);
+-
+- /* These lengths are all public so we can test them in non-constant
+- * time. */
+- if (overhead > rec->length)
+- return 0;
+-
+- /* We can always safely skip the explicit IV. We check at the beginning
+- * of this function that the record has at least enough space for the
+- * IV, MAC and padding length byte. (These can be checked in
+- * non-constant time because it's all public information.) So, if the
+- * padding was invalid, then we didn't change |rec->length| and this is
+- * safe. If the padding was valid then we know that we have at least
+- * overhead+padding_length bytes of space and so this is still safe
+- * because overhead accounts for the explicit IV. */
+- if (has_explicit_iv)
++ const unsigned overhead = 1 /* padding length byte */ + mac_size;
++ /* Check if version requires explicit IV */
++ if (s->version >= TLS1_1_VERSION || s->version == DTLS1_VERSION)
+ {
++ /* These lengths are all public so we can test them in
++ * non-constant time.
++ */
++ if (overhead + block_size > rec->length)
++ return 0;
++ /* We can now safely skip explicit IV */
+ rec->data += block_size;
+ rec->input += block_size;
+ rec->length -= block_size;
+ }
++ else if (overhead > rec->length)
++ return 0;
+
+ padding_length = rec->data[rec->length-1];
+
+@@ -190,7 +181,7 @@ int tls1_cbc_remove_padding(const SSL* s,
+ if (EVP_CIPHER_flags(s->enc_read_ctx->cipher)&EVP_CIPH_FLAG_AEAD_CIPHER)
+ {
+ /* padding is already verified */
+- rec->length -= padding_length;
++ rec->length -= padding_length + 1;
+ return 1;
+ }
+
+--
+1.8.1.2
+
diff --git a/core/openssl/PKGBUILD b/core/openssl/PKGBUILD
index 29fd88509..4671cf21b 100644
--- a/core/openssl/PKGBUILD
+++ b/core/openssl/PKGBUILD
@@ -1,8 +1,8 @@
-# $Id: PKGBUILD 158833 2012-05-11 23:33:03Z pierre $
+# $Id: PKGBUILD 177772 2013-02-08 10:29:25Z pierre $
# Maintainer: Pierre Schmitz <pierre@archlinux.de>
pkgname=openssl
-_ver=1.0.1c
+_ver=1.0.1d
# use a pacman compatible version scheme
pkgver=${_ver/[a-z]/.${_ver//[0-9.]/}}
#pkgver=$_ver
@@ -19,12 +19,14 @@ source=("https://www.openssl.org/source/${pkgname}-${_ver}.tar.gz"
"https://www.openssl.org/source/${pkgname}-${_ver}.tar.gz.asc"
'fix-manpages.patch'
'no-rpath.patch'
- 'ca-dir.patch')
-md5sums=('ae412727c8c15b67880aef7bd2999b2e'
- 'a3d90bc42253def61cd1c4237f1ce5f7'
+ 'ca-dir.patch'
+ 'Fix-IV-check-and-padding-removal.patch')
+md5sums=('b92fc634f0f1f31a67ed4175adc5ba33'
+ 'f06c54781073ef57c01b593adf377759'
'5bbc0655bda2af95bc8eb568963ce8ba'
'dc78d3d06baffc16217519242ce92478'
- '3bf51be3a1bbd262be46dc619f92aa90')
+ '3bf51be3a1bbd262be46dc619f92aa90'
+ 'b92ec62a1f3e7fdc65481afff709cd8b')
build() {
cd $srcdir/$pkgname-$_ver
@@ -44,6 +46,9 @@ build() {
patch -p0 -i $srcdir/no-rpath.patch
# set ca dir to /etc/ssl by default
patch -p0 -i $srcdir/ca-dir.patch
+ # https://rt.openssl.org/Ticket/Display.html?id=2975
+ patch -p1 -i $srcdir/Fix-IV-check-and-padding-removal.patch
+
# mark stack as non-executable: http://bugs.archlinux.org/task/12434
# workaround for PR#2771: OPENSSL_NO_TLS1_2_CLIENT
./Configure --prefix=/usr --openssldir=/etc/ssl --libdir=lib \