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_2f~32 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1c7de36f621e753fd9e6b7a2342b95d0e2f52781;p=openssl 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 f0ec8faa84..efc4f1b6ae 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);