[openssl] master update
Dr. Paul Dale
pauli at openssl.org
Wed May 8 01:03:21 UTC 2019
The branch master has been updated
via 36e619d70f86f9dd52c57b6ac8a3bfea3c0a2745 (commit)
from 0dc6bf3c39732aea7bc049d145c395bbec895f52 (commit)
- Log -----------------------------------------------------------------
commit 36e619d70f86f9dd52c57b6ac8a3bfea3c0a2745
Author: Guido Vranken <guidovranken at gmail.com>
Date: Fri May 3 15:44:38 2019 +0200
EVP_EncryptUpdate, EVP_EncryptFinal_ex: don't branch on uninitialized memory
If ctx->cipher->cupdate/ctx->cipher->cfinal failed, 'soutl' is left
uninitialized.
This patch incorporates the same logic as present in EVP_DecryptUpdate and
EVP_DecryptFinal_ex: only branch on 'soutl' if the preceding call succeeded.
Bug found by OSS-Fuzz.
Signed-off-by: Guido Vranken <guidovranken at gmail.com>
Reviewed-by: Matt Caswell <matt at openssl.org>
Reviewed-by: Paul Dale <paul.dale at oracle.com>
(Merged from https://github.com/openssl/openssl/pull/8874)
-----------------------------------------------------------------------
Summary of changes:
crypto/evp/evp_enc.c | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/crypto/evp/evp_enc.c b/crypto/evp/evp_enc.c
index 4bc6370..29b707a 100644
--- a/crypto/evp/evp_enc.c
+++ b/crypto/evp/evp_enc.c
@@ -590,11 +590,14 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl,
inl + (blocksize == 1 ? 0 : blocksize), in,
(size_t)inl);
- if (soutl > INT_MAX) {
- EVPerr(EVP_F_EVP_ENCRYPTUPDATE, EVP_R_UPDATE_ERROR);
- return 0;
+ if (ret) {
+ if (soutl > INT_MAX) {
+ EVPerr(EVP_F_EVP_ENCRYPTUPDATE, EVP_R_UPDATE_ERROR);
+ return 0;
+ }
+ *outl = soutl;
}
- *outl = soutl;
+
return ret;
/* TODO(3.0): Remove legacy code below */
@@ -640,11 +643,13 @@ int EVP_EncryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl)
ret = ctx->cipher->cfinal(ctx->provctx, out, &soutl,
blocksize == 1 ? 0 : blocksize);
- if (soutl > INT_MAX) {
- EVPerr(EVP_F_EVP_ENCRYPTFINAL_EX, EVP_R_FINAL_ERROR);
- return 0;
+ if (ret) {
+ if (soutl > INT_MAX) {
+ EVPerr(EVP_F_EVP_ENCRYPTFINAL_EX, EVP_R_FINAL_ERROR);
+ return 0;
+ }
+ *outl = soutl;
}
- *outl = soutl;
return ret;
More information about the openssl-commits
mailing list