summaryrefslogtreecommitdiffstats
path: root/crypto/evp/pbe_scrypt.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2019-02-17 16:13:08 +0000
committerMatt Caswell <matt@openssl.org>2019-02-18 09:44:09 +0000
commit4c3941c2eb22c44398bccb50dbd019530bb01c7d (patch)
tree5d871a31c9f6ca7ef7ee790131812cd5968695f5 /crypto/evp/pbe_scrypt.c
parent3037d0aadf7c0230021aa73e1f3db0d9f25008a9 (diff)
Don't leak EVP_KDF_CTX on error
Found by Coverity Reviewed-by: Kurt Roeckx <kurt@roeckx.be> (Merged from https://github.com/openssl/openssl/pull/8260)
Diffstat (limited to 'crypto/evp/pbe_scrypt.c')
-rw-r--r--crypto/evp/pbe_scrypt.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/crypto/evp/pbe_scrypt.c b/crypto/evp/pbe_scrypt.c
index f8ea1fab38..722402528a 100644
--- a/crypto/evp/pbe_scrypt.c
+++ b/crypto/evp/pbe_scrypt.c
@@ -41,6 +41,11 @@ int EVP_PBE_scrypt(const char *pass, size_t passlen,
int rv = 1;
EVP_KDF_CTX *kctx;
+ if (r > UINT32_MAX || p > UINT32_MAX) {
+ EVPerr(EVP_F_EVP_PBE_SCRYPT, EVP_R_PARAMETER_TOO_LARGE);
+ return 0;
+ }
+
/* Maintain existing behaviour. */
if (pass == NULL) {
pass = empty;
@@ -53,10 +58,6 @@ int EVP_PBE_scrypt(const char *pass, size_t passlen,
if (kctx == NULL)
return 0;
- if (r > UINT32_MAX || p > UINT32_MAX) {
- EVPerr(EVP_F_EVP_PBE_SCRYPT, EVP_R_PARAMETER_TOO_LARGE);
- return 0;
- }
if (EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_PASS, pass, (size_t)passlen) != 1
|| EVP_KDF_ctrl(kctx, EVP_KDF_CTRL_SET_SALT,
salt, (size_t)saltlen) != 1