From: David Benjamin Date: Thu, 17 Dec 2015 19:11:11 +0000 (+0100) Subject: Fix memory leak in DSA redo case. X-Git-Tag: OpenSSL_1_0_1r~18 X-Git-Url: https://git.openssl.org/?p=openssl.git;a=commitdiff_plain;h=1967199f9f8ed3faf376ddbb077f41551541f08a Fix memory leak in DSA redo case. Found by clang scan-build. Signed-off-by: Kurt Roeckx Reviewed-by: Richard Levitte RT: #4184, MR: #1496 (cherry picked from commit 679d87515d23ca31491effdc264edc81c695a72a) --- diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index 6edb26d973..9a3772e00d 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -187,9 +187,6 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) if (!BN_mod_mul(s, s, kinv, dsa->q, ctx)) goto err; - ret = DSA_SIG_new(); - if (ret == NULL) - goto err; /* * Redo if r or s is zero as required by FIPS 186-3: this is very * unlikely. @@ -201,11 +198,14 @@ static DSA_SIG *dsa_do_sign(const unsigned char *dgst, int dlen, DSA *dsa) } goto redo; } + ret = DSA_SIG_new(); + if (ret == NULL) + goto err; ret->r = r; ret->s = s; err: - if (!ret) { + if (ret == NULL) { DSAerr(DSA_F_DSA_DO_SIGN, reason); BN_free(r); BN_free(s);