diff options
author | Xin LI <delphij@FreeBSD.org> | 2013-04-02 17:34:42 +0000 |
---|---|---|
committer | Xin LI <delphij@FreeBSD.org> | 2013-04-02 17:34:42 +0000 |
commit | 0d9d75b124880ee5a3aeb5c2af92a04340c02bef (patch) | |
tree | 953639ad57c000dc6351819b4798541490d39802 /crypto/openssl/crypto/pkcs7/pk7_smime.c | |
parent | 660eb4006e69a82831062be4a4af070afccf64bc (diff) | |
download | src-0d9d75b124880ee5a3aeb5c2af92a04340c02bef.tar.gz src-0d9d75b124880ee5a3aeb5c2af92a04340c02bef.zip |
Fix OpenSSL multiple vulnerabilities. [13:03]releng/9.0
Fix BIND remote denial of service. [13:04]
Security: CVE-2013-0166, CVE-2013-0169
Security: FreeBSD-SA-13:03.openssl
Security: CVE-2013-2266
Security: FreeBSD-SA-13:04.bind
Approved by: so
Notes
Notes:
svn path=/releng/9.0/; revision=249029
Diffstat (limited to 'crypto/openssl/crypto/pkcs7/pk7_smime.c')
-rw-r--r-- | crypto/openssl/crypto/pkcs7/pk7_smime.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/crypto/openssl/crypto/pkcs7/pk7_smime.c b/crypto/openssl/crypto/pkcs7/pk7_smime.c index fd18ec3d95cf..6b458af3d795 100644 --- a/crypto/openssl/crypto/pkcs7/pk7_smime.c +++ b/crypto/openssl/crypto/pkcs7/pk7_smime.c @@ -486,15 +486,34 @@ int PKCS7_decrypt(PKCS7 *p7, EVP_PKEY *pkey, X509 *cert, BIO *data, int flags) return 0; } ret = SMIME_text(bread, data); + if (ret > 0 && BIO_method_type(tmpmem) == BIO_TYPE_CIPHER) + { + if (!BIO_get_cipher_status(tmpmem)) + ret = 0; + } BIO_free_all(bread); return ret; } else { for(;;) { i = BIO_read(tmpmem, buf, sizeof(buf)); - if(i <= 0) break; - BIO_write(data, buf, i); + if(i <= 0) + { + ret = 1; + if (BIO_method_type(tmpmem) == BIO_TYPE_CIPHER) + { + if (!BIO_get_cipher_status(tmpmem)) + ret = 0; + } + + break; + } + if (BIO_write(data, buf, i) != i) + { + ret = 0; + break; + } } BIO_free_all(tmpmem); - return 1; + return ret; } } |