fix leak properly this time...
authorDr. Stephen Henson <steve@openssl.org>
Mon, 10 Oct 2011 14:08:55 +0000 (14:08 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 10 Oct 2011 14:08:55 +0000 (14:08 +0000)
crypto/engine/eng_rsax.c

index ef29f33edca8f31417095967ed80ab496108432d..e7b661165fd54da7e8bf2b9b29e18890784c5fe7 100644 (file)
@@ -307,12 +307,17 @@ static E_RSAX_MOD_CTX *e_rsax_get_ctx(RSA *rsa, int idx, BIGNUM* m)
 static int e_rsax_rsa_finish(RSA *rsa)
        {
        E_RSAX_MOD_CTX *hptr = RSA_get_ex_data(rsa, rsax_ex_data_idx);
-       if(!hptr) return 0;
-
-       OPENSSL_free(hptr);
-       RSA_set_ex_data(rsa, rsax_ex_data_idx, NULL);
-       if (def_rsa_finish)
-               def_rsa_finish(rsa);
+       if(hptr)
+               {
+               OPENSSL_free(hptr);
+               RSA_set_ex_data(rsa, rsax_ex_data_idx, NULL);
+               }
+       if (rsa->_method_mod_n)
+               BN_MONT_CTX_free(rsa->_method_mod_n);
+       if (rsa->_method_mod_p)
+               BN_MONT_CTX_free(rsa->_method_mod_p);
+       if (rsa->_method_mod_q)
+               BN_MONT_CTX_free(rsa->_method_mod_q);
        return 1;
        }
 
@@ -396,7 +401,7 @@ static int mod_exp_pre_compute_data_512(UINT64 *m, struct mod_ctx_512 *data)
     /* Some tmps */
     UINT64 _t[8];
     int i, j, ret = 0;
-
+CRYPTO_push_info("precomp");
     /* Init _m with m */
     BN_init(&_m);
     interleaved_array_to_bn_512(&_m, m);
@@ -480,6 +485,8 @@ err:
     BN_free(&tmp2);
     BN_free(&_m);
 
+    CRYPTO_pop_info();
+
     return ret;
 }
 
@@ -490,7 +497,7 @@ static int e_rsax_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx
        BIGNUM local_dmp1,local_dmq1,local_c,local_r1;
        BIGNUM *dmp1,*dmq1,*c,*pr1;
        int ret=0;
-
+CRYPTO_push_info("start");
        BN_CTX_start(ctx);
        r1 = BN_CTX_get(ctx);
        m1 = BN_CTX_get(ctx);
@@ -657,6 +664,7 @@ static int e_rsax_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx
        ret=1;
 
 err:
+       CRYPTO_pop_info();
        BN_CTX_end(ctx);
 
        return ret;