[gnutls/f16] fix CVE-2012-1573 - incorrect checks when parsing packets (#805432)
Tomáš Mráz
tmraz at fedoraproject.org
Fri Mar 23 13:37:48 UTC 2012
commit 1c18b8293973ceb11cea12d05fc909b95be244c0
Author: Tomas Mraz <tmraz at fedoraproject.org>
Date: Fri Mar 23 14:37:39 2012 +0100
fix CVE-2012-1573 - incorrect checks when parsing packets (#805432)
- fix memory leak when generating keys (#796302)
gnutls-2.12.14-cve-2012-1573.patch | 23 +++++++++++++++
gnutls-2.12.14-leak.patch | 56 ++++++++++++++++++++++++++++++++++++
gnutls.spec | 10 ++++++-
3 files changed, 88 insertions(+), 1 deletions(-)
---
diff --git a/gnutls-2.12.14-cve-2012-1573.patch b/gnutls-2.12.14-cve-2012-1573.patch
new file mode 100644
index 0000000..a1710f6
--- /dev/null
+++ b/gnutls-2.12.14-cve-2012-1573.patch
@@ -0,0 +1,23 @@
+diff -up gnutls-2.12.14/lib/gnutls_cipher.c.packet gnutls-2.12.14/lib/gnutls_cipher.c
+--- gnutls-2.12.14/lib/gnutls_cipher.c.packet 2011-09-18 00:16:53.000000000 +0200
++++ gnutls-2.12.14/lib/gnutls_cipher.c 2012-03-23 13:29:24.077877489 +0100
+@@ -511,14 +511,13 @@ _gnutls_ciphertext2compressed (gnutls_se
+ {
+ ciphertext.size -= blocksize;
+ ciphertext.data += blocksize;
+-
+- if (ciphertext.size == 0)
+- {
+- gnutls_assert ();
+- return GNUTLS_E_DECRYPTION_FAILED;
+- }
+ }
+
++ if (ciphertext.size < hash_size)
++ {
++ gnutls_assert ();
++ return GNUTLS_E_DECRYPTION_FAILED;
++ }
+ pad = ciphertext.data[ciphertext.size - 1] + 1; /* pad */
+
+ if ((int) pad > (int) ciphertext.size - hash_size)
diff --git a/gnutls-2.12.14-leak.patch b/gnutls-2.12.14-leak.patch
new file mode 100644
index 0000000..0a649df
--- /dev/null
+++ b/gnutls-2.12.14-leak.patch
@@ -0,0 +1,56 @@
+diff -up gnutls-2.12.14/lib/gcrypt/pk.c.leak gnutls-2.12.14/lib/gcrypt/pk.c
+--- gnutls-2.12.14/lib/gcrypt/pk.c.leak 2011-09-18 00:16:53.000000000 +0200
++++ gnutls-2.12.14/lib/gcrypt/pk.c 2012-03-08 17:54:16.821192070 +0100
+@@ -627,7 +627,6 @@ _rsa_generate_params (bigint_t * resarr,
+
+ int ret, i;
+ gcry_sexp_t parms, key, list;
+- bigint_t tmp;
+
+ if (*resarr_len < RSA_PRIVATE_PARAMS)
+ {
+@@ -733,14 +732,6 @@ _rsa_generate_params (bigint_t * resarr,
+
+ *resarr_len = 6;
+
+- tmp = _gnutls_mpi_alloc_like (resarr[0]);
+- if (tmp == NULL)
+- {
+- gnutls_assert ();
+- ret = GNUTLS_E_MEMORY_ERROR;
+- goto cleanup;
+- }
+-
+ ret = _gnutls_calc_rsa_exp (resarr, 2 + *resarr_len);
+ if (ret < 0)
+ {
+diff -up gnutls-2.12.14/lib/gnutls_pk.c.leak gnutls-2.12.14/lib/gnutls_pk.c
+--- gnutls-2.12.14/lib/gnutls_pk.c.leak 2011-09-18 00:16:53.000000000 +0200
++++ gnutls-2.12.14/lib/gnutls_pk.c 2012-03-08 17:40:58.725314720 +0100
+@@ -544,6 +544,7 @@ _generate_params (int algo, bigint_t * r
+ }
+ else
+ {
++ gnutls_pk_params_release(¶ms);
+ gnutls_assert ();
+ return GNUTLS_E_INVALID_REQUEST;
+ }
+diff -up gnutls-2.12.14/lib/x509/privkey.c.leak gnutls-2.12.14/lib/x509/privkey.c
+--- gnutls-2.12.14/lib/x509/privkey.c.leak 2011-09-18 00:16:54.000000000 +0200
++++ gnutls-2.12.14/lib/x509/privkey.c 2012-03-08 17:45:55.467830355 +0100
+@@ -1466,6 +1466,7 @@ gnutls_x509_privkey_generate (gnutls_x50
+ {
+ gnutls_assert ();
+ ret = GNUTLS_E_INTERNAL_ERROR;
++ goto cleanup;
+ }
+
+ if (ret < 0)
+@@ -1490,6 +1491,7 @@ gnutls_x509_privkey_generate (gnutls_x50
+ {
+ gnutls_assert ();
+ ret = GNUTLS_E_INTERNAL_ERROR;
++ goto cleanup;
+ }
+ if (ret < 0)
+ {
diff --git a/gnutls.spec b/gnutls.spec
index 9aaf238..a3c1a89 100644
--- a/gnutls.spec
+++ b/gnutls.spec
@@ -1,7 +1,7 @@
Summary: A TLS protocol implementation
Name: gnutls
Version: 2.12.14
-Release: 1%{?dist}
+Release: 2%{?dist}
# The libgnutls library is LGPLv2+, utilities and remaining libraries are GPLv3+
License: GPLv3+ and LGPLv2+
Group: System Environment/Libraries
@@ -21,6 +21,8 @@ Patch2: gnutls-2.8.6-link-libgcrypt.patch
Patch3: gnutls-2.12.2-nosrp.patch
# Skip tests that are expected to fail on libgcrypt build
Patch4: gnutls-2.12.7-dsa-skiptests.patch
+Patch5: gnutls-2.12.14-leak.patch
+Patch6: gnutls-2.12.14-cve-2012-1573.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
Requires: libgcrypt >= 1.2.2
@@ -88,6 +90,8 @@ This package contains Guile bindings for the library.
%patch2 -p1 -b .link
%patch3 -p1 -b .nosrp
%patch4 -p1 -b .skiptests
+%patch5 -p1 -b .leak
+%patch6 -p1 -b .packet
for i in auth_srp_rsa.c auth_srp_sb64.c auth_srp_passwd.c auth_srp.c gnutls_srp.c ext_srp.c; do
touch lib/$i
@@ -184,6 +188,10 @@ fi
%{_datadir}/guile/site/gnutls.scm
%changelog
+* Fri Mar 23 2012 Tomas Mraz <tmraz at redhat.com> 2.12.14-2
+- fix CVE-2012-1573 - incorrect checks when parsing packets (#805432)
+- fix memory leak when generating keys (#796302)
+
* Mon Nov 8 2011 Tomas Mraz <tmraz at redhat.com> 2.12.14-1
- new upstream version
More information about the scm-commits
mailing list