fix memory leak. 01/70701/1 accepted/tizen/common/20160530.132240 accepted/tizen/mobile/20160523.103232 accepted/tizen/wearable/20160524.005254 submit/tizen_common/20160530.122415 submit/tizen_mobile/20160523.042720 submit/tizen_wearable/20160523.042730
authorjiseob.jang <jiseob.jang@samsung.com>
Fri, 20 May 2016 07:09:39 +0000 (16:09 +0900)
committerjiseob.jang <jiseob.jang@samsung.com>
Fri, 20 May 2016 07:09:39 +0000 (16:09 +0900)
Change-Id: I41061d3db7b6ad2c27e52d96a1ed5fbfe88ef0a7
Signed-off-by: jiseob.jang <jiseob.jang@samsung.com>
common/src/account_crypto_service.c
common/src/account_key_handler.c

index 6be7642..ccec2b8 100644 (file)
@@ -129,6 +129,8 @@ error:
                EVP_CIPHER_CTX_free(ctx);
        if (ret != CRYPTO_ERROR_NONE && ciphertext != NULL)
                free(ciphertext);
+
+       EVP_cleanup();
        return ret;
 }
 
@@ -210,6 +212,8 @@ error:
                EVP_CIPHER_CTX_free(ctx);
        if (ret != CRYPTO_ERROR_NONE && plaintext != NULL)
                free(plaintext);
+
+       EVP_cleanup();
        return ret;
 }
 
@@ -233,9 +237,12 @@ static int _encrypt_data(unsigned char *data, const int data_len, char **pp_encr
        _INFO("before _encrypt_aes_cbc");
 
        ret = _encrypt_aes_cbc(key, key_len, data, data_len, pp_encrypted_data, &enc_data_len);
+       _ACCOUNT_FREE(key);
+
        if (ret != _ACCOUNT_ERROR_NONE) {
                /* To Do : fail */
                _ERR("_encrypt_aes_cbc failed");
+               _ACCOUNT_FREE(*pp_encrypted_data);
        }
 
        _INFO("after _encrypt_aes_cbc");
@@ -266,6 +273,7 @@ static int _decrypt_data(unsigned char *data, const int data_len, char **pp_decr
                _ERR("_decrypt_aes_cbc failed");
        }
        _INFO("after _decrypt_aes_cbc, dec_data = %s", *pp_decrypted_data);
+       _ACCOUNT_FREE(key);
 
        return _ACCOUNT_ERROR_NONE;
 }
index fe55a74..0f673f2 100644 (file)
@@ -163,12 +163,13 @@ static int _get_app_dek(char *mkey, const char *pkg_id, unsigned char **dek, int
        *dek = (unsigned char *)malloc((*dek_len)+1);
        if (*dek == NULL) {
                ACCOUNT_FATAL("Memory Allocation Failed");
+               _ACCOUNT_FREE(dek_buffer->data);
+               ckmc_buffer_free(dek_buffer);
                return CKMC_ERROR_OUT_OF_MEMORY;
        }
 
-       _INFO("before memcpy dek_buffer");
        memcpy(*dek, dek_buffer->data, (*dek_len)+1);
-       _INFO("before dek_buffer free");
+       _ACCOUNT_FREE(dek_buffer->data);
        ckmc_buffer_free(dek_buffer);
 
        _INFO("end _get_app_dek");
@@ -240,8 +241,7 @@ int account_key_handler_get_account_dek(const char *alias, unsigned char **accou
                ret = _create_app_mkey(&account_mkey, &mkey_len);
                if (ret != CKMC_ERROR_NONE) {
                        _ERR("_create_app_mkey failed ret=[%d]", ret);
-                       if (account_mkey)
-                               free(account_mkey);
+                       _ACCOUNT_FREE(account_mkey);
                        return ret;
                }
        }
@@ -251,12 +251,13 @@ int account_key_handler_get_account_dek(const char *alias, unsigned char **accou
        _INFO("after _get_app_mkey, ret=[%d]", ret);
        if (ret != CKMC_ERROR_NONE) {
                ret = _create_app_dek((char *)account_mkey, alias, account_dek, dek_len);
-               _ACCOUNT_FREE(account_mkey);
                if (ret != CKMC_ERROR_NONE) {
                        _ERR("_create_app_dek failed ret=[%d]", ret);
+                       _ACCOUNT_FREE(account_mkey);
                        return ret;
                }
        }
+       _ACCOUNT_FREE(account_mkey);
 
        _INFO("end account_key_hander_get_account_dek");