From 679d87515d23ca31491effdc264edc81c695a72a Mon Sep 17 00:00:00 2001 From: David Benjamin Date: Thu, 17 Dec 2015 20:11:11 +0100 Subject: [PATCH] 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 --- crypto/dsa/dsa_ossl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/crypto/dsa/dsa_ossl.c b/crypto/dsa/dsa_ossl.c index 34b4a4ea4a..b4bb254a17 100644 --- a/crypto/dsa/dsa_ossl.c +++ b/crypto/dsa/dsa_ossl.c @@ -191,9 +191,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. @@ -205,11 +202,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); -- 2.34.1