diff --git a/common/inc/memory.h b/common/inc/memory.h index 31bca35ab651b046e4075d7af03b63f40dd8e086..199afc7f19a18e7f6255e86ffdfc775bf84a98f7 100644 --- a/common/inc/memory.h +++ b/common/inc/memory.h @@ -25,6 +25,16 @@ extern "C" { void* HcfMalloc(uint32_t size, char val); void HcfFree(void* addr); +#define SELF_FREE_PTR(PTR, FREE_FUNC) \ +{ \ + if ((PTR) != NULL) { \ + FREE_FUNC(PTR); \ + (PTR) = NULL; \ + } \ +} + +#define HCF_FREE_PTR(p) SELF_FREE_PTR(p, HcfFree) + #ifdef __cplusplus } #endif diff --git a/common/src/hcf_parcel.c b/common/src/hcf_parcel.c index 9573128a64f4f4154eabf3e564c2c5ec8ac4e2f9..fa8b56e6666c4b6fd651460fc247f5ad82f4ecc0 100644 --- a/common/src/hcf_parcel.c +++ b/common/src/hcf_parcel.c @@ -83,9 +83,11 @@ static bool ParcelRealloc(HcParcel *parcel, uint32_t size) } if (memcpy_s(newData, size, parcel->data, parcel->length) != EOK) { HcfFree(newData); + newData = NULL; return false; } HcfFree(parcel->data); + parcel->data = NULL; parcel->data = newData; parcel->length = size; return true; diff --git a/frameworks/cj/src/asy_key_generator_impl.cpp b/frameworks/cj/src/asy_key_generator_impl.cpp index 2e6663991a8cf75559dfc5dbf3a9a7f82b13065a..c34fbc3cb2b0a6b21aa473e7b3bd3ed2d559a271 100644 --- a/frameworks/cj/src/asy_key_generator_impl.cpp +++ b/frameworks/cj/src/asy_key_generator_impl.cpp @@ -24,6 +24,7 @@ AsyKeyGeneratorImpl::AsyKeyGeneratorImpl(HcfAsyKeyGenerator *generator) AsyKeyGeneratorImpl::~AsyKeyGeneratorImpl() { HcfObjDestroy(this->generator_); + this->generator_ = nullptr; } HcfAsyKeyGenerator *AsyKeyGeneratorImpl::GetAsyKeyGenerator() diff --git a/frameworks/cj/src/cipher_impl.cpp b/frameworks/cj/src/cipher_impl.cpp index 44fc470be8e9c2a33145fb7e145286bb2af71b7a..e240b5325f3b3e67bde67fccfef4a278a3f64a39 100644 --- a/frameworks/cj/src/cipher_impl.cpp +++ b/frameworks/cj/src/cipher_impl.cpp @@ -25,6 +25,7 @@ namespace OHOS { CipherImpl::~CipherImpl() { HcfObjDestroy(this->cipher_); + this->cipher_ = nullptr; } HcfResult CipherImpl::CipherInit(HcfCryptoMode opMode, HcfKey *key, HcfParamsSpec *params) diff --git a/frameworks/cj/src/crypto_ffi.cpp b/frameworks/cj/src/crypto_ffi.cpp index 75e038f69f488f2ff4ed26fcb064338eb21b8d0c..fd803f23e510487ea89456386e9b9daa01fd6114 100644 --- a/frameworks/cj/src/crypto_ffi.cpp +++ b/frameworks/cj/src/crypto_ffi.cpp @@ -431,6 +431,7 @@ namespace OHOS { authTag.data = static_cast(HcfMalloc(GCM_AUTH_TAG_LEN, 0)); if (authTag.data == nullptr) { HcfFree(gcmParamsSpec); + gcmParamsSpec = nullptr; return HCF_INVALID_PARAMS; } authTag.len = GCM_AUTH_TAG_LEN; @@ -475,6 +476,7 @@ namespace OHOS { authTag.data = static_cast(HcfMalloc(CCM_AUTH_TAG_LEN, 0)); if (authTag.data == nullptr) { HcfFree(ccmParamsSpec); + ccmParamsSpec = nullptr; return HCF_INVALID_PARAMS; } authTag.len = CCM_AUTH_TAG_LEN; diff --git a/frameworks/cj/src/mac_impl.cpp b/frameworks/cj/src/mac_impl.cpp index eb27e3aea052df4ce84d70d76ee2490132c77bd2..d9079c284b5cb2326b03bf7c5e005f58c597d727 100644 --- a/frameworks/cj/src/mac_impl.cpp +++ b/frameworks/cj/src/mac_impl.cpp @@ -25,6 +25,7 @@ namespace OHOS { MacImpl::~MacImpl() { HcfObjDestroy(this->macObj_); + this->macObj_ = nullptr; } HcfResult MacImpl::MacInit(HcfSymKey *symKey) diff --git a/frameworks/cj/src/md_impl.cpp b/frameworks/cj/src/md_impl.cpp index 543a3b07435e5b55b0a25db7ba812ca0274eb88f..747dae76d4bb83e3eb32ffea7b2244763f58736b 100644 --- a/frameworks/cj/src/md_impl.cpp +++ b/frameworks/cj/src/md_impl.cpp @@ -34,6 +34,7 @@ namespace OHOS { MdImpl::~MdImpl() { HcfObjDestroy(this->mdObj_); + this->mdObj_ = nullptr; } HcfResult MdImpl::MdDoFinal(HcfBlob *output) diff --git a/frameworks/cj/src/random_impl.cpp b/frameworks/cj/src/random_impl.cpp index c97b2ab4bdb220dae75e62d177747cc15b9b1554..b4e2155fec076e247e6075aa913f23be4d3a430b 100644 --- a/frameworks/cj/src/random_impl.cpp +++ b/frameworks/cj/src/random_impl.cpp @@ -24,6 +24,7 @@ namespace OHOS { RandomImpl::~RandomImpl() { HcfObjDestroy(this->randObj_); + this->randObj_ = nullptr; } const char* RandomImpl::GetAlgName(int32_t* errCode) diff --git a/frameworks/cj/src/sign_impl.cpp b/frameworks/cj/src/sign_impl.cpp index 719e168f883347888253039e2b9920bb28a31697..6db3450e706fadd4e4cec0e9f48931b244b593d7 100644 --- a/frameworks/cj/src/sign_impl.cpp +++ b/frameworks/cj/src/sign_impl.cpp @@ -25,6 +25,7 @@ SignImpl::SignImpl(HcfSign *signObj) SignImpl::~SignImpl() { HcfObjDestroy(this->signObj_); + this->signObj_ = nullptr; } HcfResult SignImpl::Init(HcfPriKey *priKey) diff --git a/frameworks/cj/src/sym_key_generator_impl.cpp b/frameworks/cj/src/sym_key_generator_impl.cpp index 9d13539480ec00c26aaa3b5f639ff474f9603d52..a60408194fe11ec5883f4c37953cb92ac9e4ea80 100644 --- a/frameworks/cj/src/sym_key_generator_impl.cpp +++ b/frameworks/cj/src/sym_key_generator_impl.cpp @@ -24,6 +24,7 @@ namespace OHOS { SymKeyGeneratorImpl::~SymKeyGeneratorImpl() { HcfObjDestroy(this->generator_); + this->generator_ = nullptr; } const char *SymKeyGeneratorImpl::GetAlgName(int32_t* errCode) diff --git a/frameworks/cj/src/verify_impl.cpp b/frameworks/cj/src/verify_impl.cpp index 1c9c0db290d3ba46c4a9b960454ec3fd1650d4a1..ccdd3622853662c30456428038427a6bc4ae63bd 100644 --- a/frameworks/cj/src/verify_impl.cpp +++ b/frameworks/cj/src/verify_impl.cpp @@ -25,6 +25,7 @@ VerifyImpl::VerifyImpl(HcfVerify *verify) VerifyImpl::~VerifyImpl() { HcfObjDestroy(this->verify_); + this->verify_ = nullptr; } HcfResult VerifyImpl::Init(HcfPubKey *pubKey) diff --git a/frameworks/crypto_operation/cipher.c b/frameworks/crypto_operation/cipher.c index e524bbef7f059309c8e9b1407aabac0c9326a459..9e7e063e6fd297928e73134c511893192a4af85f 100644 --- a/frameworks/crypto_operation/cipher.c +++ b/frameworks/crypto_operation/cipher.c @@ -375,6 +375,7 @@ HcfResult HcfCipherCreate(const char *transformation, HcfCipher **returnObj) if (strcpy_s(returnGenerator->algoName, HCF_MAX_ALGO_NAME_LEN, transformation) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnGenerator); + returnGenerator = NULL; return HCF_INVALID_PARAMS; } HcfCipherGeneratorSpi *spiObj = NULL; @@ -382,6 +383,7 @@ HcfResult HcfCipherCreate(const char *transformation, HcfCipher **returnObj) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; return res; } returnGenerator->spiObj = spiObj; diff --git a/frameworks/crypto_operation/kdf.c b/frameworks/crypto_operation/kdf.c index 7d806c9cb29d4e9352165ef495bda8b24637d970..1d8cc95a74ce6d19dcf17a688fe50cd6b417ec46 100644 --- a/frameworks/crypto_operation/kdf.c +++ b/frameworks/crypto_operation/kdf.c @@ -183,6 +183,7 @@ HcfResult HcfKdfCreate(const char *transformation, HcfKdf **returnObj) if (strcpy_s(returnGenerator->algoName, HCF_MAX_ALGO_NAME_LEN, transformation) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnGenerator); + returnGenerator = NULL; return HCF_INVALID_PARAMS; } HcfKdfSpi *spiObj = NULL; @@ -190,6 +191,7 @@ HcfResult HcfKdfCreate(const char *transformation, HcfKdf **returnObj) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; return res; } returnGenerator->base.base.destroy = DestroyKdf; diff --git a/frameworks/crypto_operation/key_agreement.c b/frameworks/crypto_operation/key_agreement.c index 24891ca48c1e3949a8852239fa99c85ed2716d96..723d87126d89174b064a51b83aca71f60616f796 100644 --- a/frameworks/crypto_operation/key_agreement.c +++ b/frameworks/crypto_operation/key_agreement.c @@ -219,6 +219,7 @@ HcfResult HcfKeyAgreementCreate(const char *algoName, HcfKeyAgreement **returnOb if (strcpy_s(returnGenerator->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnGenerator); + returnGenerator = NULL; return HCF_INVALID_PARAMS; } HcfKeyAgreementSpi *spiObj = NULL; @@ -226,6 +227,7 @@ HcfResult HcfKeyAgreementCreate(const char *algoName, HcfKeyAgreement **returnOb if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; return res; } returnGenerator->base.base.destroy = DestroyKeyAgreement; diff --git a/frameworks/crypto_operation/mac.c b/frameworks/crypto_operation/mac.c index 88b5f2f02246248a364b971e1d7897a9a12a5212..296ea87ef0021b48bae9897e8cd1f9b817ddb280 100644 --- a/frameworks/crypto_operation/mac.c +++ b/frameworks/crypto_operation/mac.c @@ -154,6 +154,7 @@ static void MacDestroy(HcfObjectBase *self) } HcfMacImpl *impl = (HcfMacImpl *)self; HcfObjDestroy(impl->spiObj); + impl->spiObj = NULL; HcfFree(impl); } @@ -216,11 +217,13 @@ HcfResult HcfMacCreate(HcfMacParamsSpec *paramsSpec, HcfMac **mac) } else { LOGE("Unsupported algorithm: %{public}s", paramsSpec->algName); HcfFree(returnMacApi); + returnMacApi = NULL; return HCF_INVALID_PARAMS; } if (res != HCF_SUCCESS) { HcfFree(returnMacApi); + returnMacApi = NULL; return res; } if (createSpiFunc == NULL) { @@ -232,6 +235,7 @@ HcfResult HcfMacCreate(HcfMacParamsSpec *paramsSpec, HcfMac **mac) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnMacApi); + returnMacApi = NULL; return res; } returnMacApi->base.base.getClass = GetMacClass; diff --git a/frameworks/crypto_operation/md.c b/frameworks/crypto_operation/md.c index bc109bb59f60317ce93a1d67f3fcc5b244ad7297..4d5afe2916ffbf9f1ea84a0f9f4303caf9406300 100644 --- a/frameworks/crypto_operation/md.c +++ b/frameworks/crypto_operation/md.c @@ -146,6 +146,7 @@ static void MdDestroy(HcfObjectBase *self) } HcfMdImpl *impl = (HcfMdImpl *)self; HcfObjDestroy(impl->spiObj); + impl->spiObj = NULL; HcfFree(impl); } @@ -168,6 +169,7 @@ HcfResult HcfMdCreate(const char *algoName, HcfMd **md) if (strcpy_s(returnMdApi->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnMdApi); + returnMdApi = NULL; return HCF_INVALID_PARAMS; } HcfMdSpi *spiObj = NULL; @@ -175,6 +177,7 @@ HcfResult HcfMdCreate(const char *algoName, HcfMd **md) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnMdApi); + returnMdApi = NULL; return res; } returnMdApi->base.base.getClass = GetMdClass; diff --git a/frameworks/crypto_operation/rand.c b/frameworks/crypto_operation/rand.c index 3d8b417b24fe2ff19f51593215cd5a2ff3a6db29..e998f87ada87d6c51e39a5380281e7e8ea3b6beb 100644 --- a/frameworks/crypto_operation/rand.c +++ b/frameworks/crypto_operation/rand.c @@ -126,6 +126,7 @@ static void HcfRandDestroy(HcfObjectBase *self) } HcfRandImpl *impl = (HcfRandImpl *)self; HcfObjDestroy(impl->spiObj); + impl->spiObj = NULL; HcfFree(impl); } @@ -154,6 +155,7 @@ HcfResult HcfRandCreate(HcfRand **random) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnRandApi); + returnRandApi = NULL; return res; } returnRandApi->base.base.getClass = GetRandClass; diff --git a/frameworks/crypto_operation/signature.c b/frameworks/crypto_operation/signature.c index 29ac1bffe69103eec43215deedfe1bca1335b9c0..6783e04b2da685fec5b87678ab03355f0b9a612d 100644 --- a/frameworks/crypto_operation/signature.c +++ b/frameworks/crypto_operation/signature.c @@ -529,6 +529,7 @@ HcfResult HcfSignCreate(const char *algoName, HcfSign **returnObj) if (strcpy_s(returnSign->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnSign); + returnSign = NULL; return HCF_INVALID_PARAMS; } HcfSignSpi *spiObj = NULL; @@ -536,6 +537,7 @@ HcfResult HcfSignCreate(const char *algoName, HcfSign **returnObj) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnSign); + returnSign = NULL; return res; } returnSign->base.base.destroy = DestroySign; @@ -580,6 +582,7 @@ HcfResult HcfVerifyCreate(const char *algoName, HcfVerify **returnObj) if (strcpy_s(returnVerify->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnVerify); + returnVerify = NULL; return HCF_INVALID_PARAMS; } HcfVerifySpi *spiObj = NULL; @@ -587,6 +590,7 @@ HcfResult HcfVerifyCreate(const char *algoName, HcfVerify **returnObj) if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnVerify); + returnVerify = NULL; return res; } returnVerify->base.base.destroy = DestroyVerify; diff --git a/frameworks/js/ani/src/ani_mac.cpp b/frameworks/js/ani/src/ani_mac.cpp index 918562fd89b423527e0aa803f083282ee7e8b66c..2ac696d8f4fd64ad61b35f3f0af38349ce09ac5b 100644 --- a/frameworks/js/ani/src/ani_mac.cpp +++ b/frameworks/js/ani/src/ani_mac.cpp @@ -28,6 +28,7 @@ MacImpl::MacImpl(HcfMac *obj) : macObj(obj) {} MacImpl::~MacImpl() { HcfObjDestroy(macObj); + macObj = nullptr; } void MacImpl::InitSync(weak::SymKey key) diff --git a/frameworks/js/ani/src/ani_rand.cpp b/frameworks/js/ani/src/ani_rand.cpp index 00220173a4fae3c11f6bfa80d1f6b23a27989d4d..8820b79781f4704cfcf848717cfb1ea358ed889e 100644 --- a/frameworks/js/ani/src/ani_rand.cpp +++ b/frameworks/js/ani/src/ani_rand.cpp @@ -27,6 +27,7 @@ RandomImpl::RandomImpl(HcfRand *obj) : randObj(obj) {} RandomImpl::~RandomImpl() { HcfObjDestroy(randObj); + randObj = nullptr; } DataBlob RandomImpl::GenerateRandomSync(int32_t len) diff --git a/frameworks/js/ani/src/ani_sym_key.cpp b/frameworks/js/ani/src/ani_sym_key.cpp index cb089457c4224d0c32d91485e44195af2e52b491..4eabfca2f8f4f484c5fa3077d4b1e66ba65236a8 100644 --- a/frameworks/js/ani/src/ani_sym_key.cpp +++ b/frameworks/js/ani/src/ani_sym_key.cpp @@ -27,6 +27,7 @@ SymKeyImpl::SymKeyImpl(HcfSymKey *obj) : symKey(obj) {} SymKeyImpl::~SymKeyImpl() { HcfObjDestroy(symKey); + symKey = nullptr; } void SymKeyImpl::ClearMem() diff --git a/frameworks/js/ani/src/ani_sym_key_generator.cpp b/frameworks/js/ani/src/ani_sym_key_generator.cpp index 5b45115910404dbf18688b0a577225cf29ead7bf..0d45da86c9f0210cde4833b454164edce8e2ef73 100644 --- a/frameworks/js/ani/src/ani_sym_key_generator.cpp +++ b/frameworks/js/ani/src/ani_sym_key_generator.cpp @@ -28,6 +28,7 @@ SymKeyGeneratorImpl::SymKeyGeneratorImpl(HcfSymKeyGenerator *obj) : generator(ob SymKeyGeneratorImpl::~SymKeyGeneratorImpl() { HcfObjDestroy(generator); + generator = nullptr; } SymKey SymKeyGeneratorImpl::GenerateSymKeySync() diff --git a/frameworks/js/napi/crypto/src/napi_asy_key_generator.cpp b/frameworks/js/napi/crypto/src/napi_asy_key_generator.cpp index bd87fa44c4488745f1caf935f095d12d25245356..bec90491656502f2fac29eb0190e5b9674ac87d8 100644 --- a/frameworks/js/napi/crypto/src/napi_asy_key_generator.cpp +++ b/frameworks/js/napi/crypto/src/napi_asy_key_generator.cpp @@ -132,8 +132,10 @@ static void FreeConvertKeyCtx(napi_env env, ConvertKeyCtx *ctx) HcfBlobDataFree(ctx->pubKey); HcfFree(ctx->pubKey); + ctx->pubKey = nullptr; HcfBlobDataClearAndFree(ctx->priKey); HcfFree(ctx->priKey); + ctx->priKey = nullptr; HcfFree(ctx); } @@ -234,6 +236,7 @@ static bool GetPkAndSkBlobFromNapiValueIfInput(napi_env env, napi_value pkValue, // if the prikey get func fails, the return pointer will not take the ownership of pubkey and not free it. HcfBlobDataFree(pubKey); HcfFree(pubKey); + pubKey = nullptr; LOGE("failed to get priKey."); return false; } @@ -689,6 +692,7 @@ NapiAsyKeyGenerator::NapiAsyKeyGenerator(HcfAsyKeyGenerator *generator) NapiAsyKeyGenerator::~NapiAsyKeyGenerator() { HcfObjDestroy(this->generator_); + this->generator_ = nullptr; } HcfAsyKeyGenerator *NapiAsyKeyGenerator::GetAsyKeyGenerator() @@ -720,6 +724,7 @@ static bool GetHcfKeyPairInstance(napi_env env, HcfKeyPair *returnKeyPair, napi_ NapiKeyPair *napiKeyPair = new (std::nothrow) NapiKeyPair(returnKeyPair); if (napiKeyPair == nullptr) { HcfObjDestroy(returnKeyPair); + returnKeyPair = nullptr; LOGE("new napi key pair failed"); return false; } @@ -801,9 +806,9 @@ napi_value NapiAsyKeyGenerator::JsConvertKey(napi_env env, napi_callback_info in static void HcfFreePubKeyAndPriKey(HcfBlob *pubKey, HcfBlob *priKey) { HcfBlobDataFree(pubKey); - HcfFree(pubKey); + HCF_FREE_PTR(pubKey); HcfBlobDataClearAndFree(priKey); - HcfFree(priKey); + HCF_FREE_PTR(priKey); } napi_value NapiAsyKeyGenerator::JsConvertKeySync(napi_env env, napi_callback_info info) @@ -1004,6 +1009,7 @@ napi_value NapiAsyKeyGenerator::CreateJsAsyKeyGenerator(napi_env env, napi_callb napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi asy key napi generator failed!")); LOGE("new napi asy key napi generator failed"); HcfObjDestroy(generator); + generator = nullptr; return NapiGetNull(env); } diff --git a/frameworks/js/napi/crypto/src/napi_asy_key_spec_generator.cpp b/frameworks/js/napi/crypto/src/napi_asy_key_spec_generator.cpp index 40e121b42f52dac2fe6e02a7801c517b4b08c0e2..bc71a3b49035b2bbd9fed302afe93c973ec1ba68 100644 --- a/frameworks/js/napi/crypto/src/napi_asy_key_spec_generator.cpp +++ b/frameworks/js/napi/crypto/src/napi_asy_key_spec_generator.cpp @@ -172,6 +172,7 @@ static void GenKeyPairAsyncWorkReturn(napi_env env, napi_status status, void *da napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi key pair failed!")); LOGE("new napi key pair failed"); HcfObjDestroy(ctx->returnKeyPair); + ctx->returnKeyPair = nullptr; FreeAsyKeyCtx(env, ctx); return; } @@ -222,6 +223,7 @@ static void PubKeyAsyncWorkReturn(napi_env env, napi_status status, void *data) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi pub key failed!")); LOGE("new napi pub key failed"); HcfObjDestroy(ctx->returnPubKey); + ctx->returnPubKey = nullptr; FreeAsyKeyCtx(env, ctx); return; } @@ -274,6 +276,7 @@ static void PriKeyAsyncWorkReturn(napi_env env, napi_status status, void *data) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi pri key failed!")); LOGE("new napi pri key failed"); HcfObjDestroy(ctx->returnPriKey); + ctx->returnPriKey = nullptr; FreeAsyKeyCtx(env, ctx); return; } @@ -390,6 +393,7 @@ NapiAsyKeyGeneratorBySpec::NapiAsyKeyGeneratorBySpec(HcfAsyKeyGeneratorBySpec *g NapiAsyKeyGeneratorBySpec::~NapiAsyKeyGeneratorBySpec() { HcfObjDestroy(this->generator_); + this->generator_ = nullptr; } HcfAsyKeyGeneratorBySpec *NapiAsyKeyGeneratorBySpec::GetAsyKeyGeneratorBySpec() @@ -437,6 +441,7 @@ napi_value NapiAsyKeyGeneratorBySpec::JsGenerateKeyPairSync(napi_env env, napi_c NapiKeyPair *napiKeyPair = new (std::nothrow) NapiKeyPair(returnKeyPair); if (napiKeyPair == nullptr) { HcfObjDestroy(returnKeyPair); + returnKeyPair = nullptr; LOGE("new napi key pair failed"); napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi key pair failed!")); return nullptr; @@ -499,6 +504,7 @@ napi_value NapiAsyKeyGeneratorBySpec::JsGeneratePubKeySync(napi_env env, napi_ca NapiPubKey *napiPubKey = new (std::nothrow) NapiPubKey(returnPubKey); if (napiPubKey == nullptr) { HcfObjDestroy(returnPubKey); + returnPubKey = nullptr; LOGE("new napi pub key failed"); napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi pub key failed!")); return nullptr; @@ -564,6 +570,7 @@ napi_value NapiAsyKeyGeneratorBySpec::JsGeneratePriKeySync(napi_env env, napi_ca NapiPriKey *napiPriKey = new (std::nothrow) NapiPriKey(returnPriKey); if (napiPriKey == nullptr) { HcfObjDestroy(returnPriKey); + returnPriKey = nullptr; LOGE("new napi pri key failed"); napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi pri key failed!")); return nullptr; @@ -598,13 +605,11 @@ napi_value NapiAsyKeyGeneratorBySpec::AsyKeyGeneratorBySpecConstructor(napi_env napi_value NapiAsyKeyGeneratorBySpec::CreateJsAsyKeyGeneratorBySpec(napi_env env, napi_callback_info info) { - LOGD("Enter CreateJsAsyKeyGeneratorBySpec..."); - size_t expectedArgc = PARAMS_NUM_ONE; - size_t argc = expectedArgc; + size_t argc = PARAMS_NUM_ONE; napi_value argv[PARAMS_NUM_ONE] = { nullptr }; napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr); - if (argc != expectedArgc) { + if (argc != PARAMS_NUM_ONE) { napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "The input args num is invalid.")); LOGE("The input args num is invalid."); return nullptr; @@ -624,6 +629,7 @@ napi_value NapiAsyKeyGeneratorBySpec::CreateJsAsyKeyGeneratorBySpec(napi_env env HcfAsyKeyGeneratorBySpec *generator = nullptr; HcfResult res = HcfAsyKeyGeneratorBySpecCreate(asyKeySpec, &generator); FreeAsyKeySpec(asyKeySpec); + asyKeySpec = nullptr; if (res != HCF_SUCCESS) { napi_throw(env, GenerateBusinessError(env, res, "create C generator by sepc fail.")); LOGE("create C generator by spec fail."); @@ -635,6 +641,7 @@ napi_value NapiAsyKeyGeneratorBySpec::CreateJsAsyKeyGeneratorBySpec(napi_env env napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi asy key generator by spec failed!")); LOGE("new napi asy key generator by spec failed!"); HcfObjDestroy(generator); + generator = nullptr; return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_cipher.cpp b/frameworks/js/napi/crypto/src/napi_cipher.cpp index 282a72362a4f9032094907f5ba0b2bbfc148aa0a..dc4958314f35f1da244ded40155786ada19394f7 100644 --- a/frameworks/js/napi/crypto/src/napi_cipher.cpp +++ b/frameworks/js/napi/crypto/src/napi_cipher.cpp @@ -503,6 +503,7 @@ NapiCipher::NapiCipher(HcfCipher *cipher) NapiCipher::~NapiCipher() { HcfObjDestroy(this->cipher_); + this->cipher_ = nullptr; } HcfCipher *NapiCipher::GetCipher() const @@ -590,6 +591,7 @@ napi_value NapiCipher::JsCipherInitSync(napi_env env, napi_callback_info info) } napi_value instance = SyncInit(env, cipher, opMode, key, paramsSpec); FreeParamsSpec(paramsSpec); + paramsSpec = nullptr; return instance; } @@ -806,6 +808,7 @@ napi_value NapiCipher::CreateCipher(napi_env env, napi_callback_info info) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napiCipher failed!")); LOGE("new napiCipher failed!"); HcfObjDestroy(cipher); + cipher = nullptr; return nullptr; } @@ -846,7 +849,7 @@ napi_value NapiCipher::JsSetCipherSpec(napi_env env, napi_callback_info info) HcfBlob *pSource = GetBlobFromNapiUint8Arr(env, argv[1]); if (pSource == nullptr || pSource->len == 0) { HcfBlobDataFree(pSource); - HcfFree(pSource); + HCF_FREE_PTR(pSource); LOGE("failed to get pSource."); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "[pSource]: must be of the DataBlob type.")); return nullptr; @@ -854,7 +857,7 @@ napi_value NapiCipher::JsSetCipherSpec(napi_env env, napi_callback_info info) napi_status status = napi_unwrap(env, thisVar, reinterpret_cast(&napiCipher)); if (status != napi_ok || napiCipher == nullptr) { HcfBlobDataFree(pSource); - HcfFree(pSource); + HCF_FREE_PTR(pSource); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "failed to unwrap napiCipher obj!")); LOGE("failed to unwrap napiCipher obj!"); return nullptr; @@ -863,13 +866,13 @@ napi_value NapiCipher::JsSetCipherSpec(napi_env env, napi_callback_info info) HcfResult res = cipher->setCipherSpecUint8Array(cipher, item, *pSource); if (res != HCF_SUCCESS) { HcfBlobDataFree(pSource); - HcfFree(pSource); + HCF_FREE_PTR(pSource); napi_throw(env, GenerateBusinessError(env, res, "c set cipher spec failed.")); LOGE("c set cipher spec failed."); return nullptr; } HcfBlobDataFree(pSource); - HcfFree(pSource); + HCF_FREE_PTR(pSource); return thisVar; } @@ -886,6 +889,7 @@ static napi_value GetCipherSpecString(napi_env env, CipherSpecItem item, HcfCiph napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp b/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp index eb11d77b8acf89a6fa67f3ae0f73474d276a02f9..4e1f2d9fb6a915f6215368638a653a49b8fc163e 100644 --- a/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp +++ b/frameworks/js/napi/crypto/src/napi_ecc_key_util.cpp @@ -349,6 +349,7 @@ napi_value NapiECCKeyUtil::JsGenECCCommonParamsSpec(napi_env env, napi_callback_ napi_value instance = ConvertEccCommParamsSpecToNapiValue(env, eccCommParamsSpec); FreeEccCommParamsSpec(eccCommParamsSpec); HcfFree(eccCommParamsSpec); + eccCommParamsSpec = nullptr; return instance; } @@ -385,6 +386,7 @@ napi_value NapiECCKeyUtil::JsConvertPoint(napi_env env, napi_callback_info info) LOGE("failed to convert point."); HcfBlobDataFree(pointBlob); HcfFree(pointBlob); + pointBlob = nullptr; napi_throw(env, GenerateBusinessError(env, ret, "failed to convert point.")); return nullptr; } @@ -392,6 +394,7 @@ napi_value NapiECCKeyUtil::JsConvertPoint(napi_env env, napi_callback_info info) FreeEcPointMem(&point); HcfBlobDataFree(pointBlob); HcfFree(pointBlob); + pointBlob = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_kdf.cpp b/frameworks/js/napi/crypto/src/napi_kdf.cpp index 9890ae183930ad648356003d75f01170fbbd43bf..3867c25209a07f5c066f5cf8fcb031e275166a96 100644 --- a/frameworks/js/napi/crypto/src/napi_kdf.cpp +++ b/frameworks/js/napi/crypto/src/napi_kdf.cpp @@ -256,6 +256,7 @@ static bool GetCharArrayFromJsString(napi_env env, napi_value arg, HcfBlob *retB if (napi_get_value_string_utf8(env, arg, tmpPassword, (length + 1), &length) != napi_ok) { LOGE("can not get char string value"); HcfFree(tmpPassword); + tmpPassword = nullptr; return false; } retBlob->data = reinterpret_cast(tmpPassword); @@ -376,13 +377,16 @@ static bool GetPBKDF2ParamsSpec(napi_env env, napi_value arg, HcfKdfParamsSpec * SetPBKDF2ParamsSpecAttribute(iter, out, salt, tmpPassword, tmp); // only need the data and data length of the salt, so free the blob pointer. HcfFree(salt); + salt = nullptr; *params = reinterpret_cast(tmp); return true; } while (0); HcfBlobDataClearAndFree(&tmpPassword); HcfBlobDataClearAndFree(salt); HcfFree(salt); + salt = nullptr; HcfFree(out.data); + out.data = nullptr; return false; } @@ -430,17 +434,17 @@ static bool GetHkdfParamsSpec(napi_env env, napi_value arg, HcfKdfParamsSpec **p } SetHkdfParamsSpecAttribute(out, salt, key, info, tmpParams); // only need the data and data length of the salt, so free the blob pointer. - HcfFree(salt); - HcfFree(info); + HCF_FREE_PTR(salt); + HCF_FREE_PTR(info); *params = reinterpret_cast(tmpParams); return true; } while (0); HcfBlobDataClearAndFree(salt); HcfBlobDataClearAndFree(&key); HcfBlobDataClearAndFree(info); - HcfFree(salt); - HcfFree(info); - HcfFree(out.data); + HCF_FREE_PTR(salt); + HCF_FREE_PTR(info); + HCF_FREE_PTR(out.data); return false; } @@ -468,11 +472,13 @@ static bool AllocateAndSetScryptParams(napi_env env, napi_value arg, HcfBlob &ou SetScryptParamsSpecAttribute(out, salt, passPhrase, tmpParams); HcfFree(salt); + salt = nullptr; return true; } while (0); HcfBlobDataClearAndFree(salt); HcfBlobDataClearAndFree(&passPhrase); HcfFree(salt); + salt = nullptr; return false; } @@ -513,6 +519,7 @@ static bool GetScryptParamsSpec(napi_env env, napi_value arg, HcfKdfParamsSpec * HcfScryptParamsSpec *tmpParams = nullptr; if (!AllocateAndSetScryptParams(env, arg, out, tmpParams)) { HcfFree(out.data); + out.data = nullptr; return false; } tmpParams->n = n; @@ -627,6 +634,7 @@ NapiKdf::NapiKdf(HcfKdf *kdfObj) NapiKdf::~NapiKdf() { HcfObjDestroy(this->kdf); + this->kdf = nullptr; } HcfKdf *NapiKdf::GetKdf() const @@ -782,6 +790,7 @@ napi_value NapiKdf::CreateJsKdf(napi_env env, napi_callback_info info) if (napiKdf == nullptr) { napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new kdf napi obj failed.")); HcfObjDestroy(kdf); + kdf = nullptr; LOGE("create kdf napi obj failed"); return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_key_agreement.cpp b/frameworks/js/napi/crypto/src/napi_key_agreement.cpp index 537ef29154cd80d7937a0195874370a4f356a8b4..e2231755d3404047791c3401302fee186ab5062a 100644 --- a/frameworks/js/napi/crypto/src/napi_key_agreement.cpp +++ b/frameworks/js/napi/crypto/src/napi_key_agreement.cpp @@ -254,6 +254,7 @@ NapiKeyAgreement::NapiKeyAgreement(HcfKeyAgreement *keyAgreement) NapiKeyAgreement::~NapiKeyAgreement() { HcfObjDestroy(this->keyAgreement_); + this->keyAgreement_ = nullptr; } HcfKeyAgreement *NapiKeyAgreement::GetKeyAgreement() @@ -403,6 +404,7 @@ napi_value NapiKeyAgreement::CreateJsKeyAgreement(napi_env env, napi_callback_in napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi key agreement failed.")); LOGE("new napi key agreement failed"); HcfObjDestroy(keyAgreement); + keyAgreement = nullptr; return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_mac.cpp b/frameworks/js/napi/crypto/src/napi_mac.cpp index 858283a18a612dfc65710ee8ec675a62ee73a424..9bceeedeb93dc37d43c3fc63e4d9d090ce4cc948 100644 --- a/frameworks/js/napi/crypto/src/napi_mac.cpp +++ b/frameworks/js/napi/crypto/src/napi_mac.cpp @@ -96,8 +96,10 @@ static void FreeMacParams(HcfMacParamsSpec *params) { if (strcmp(params->algName, "HMAC") == 0) { HcfFree(static_cast(const_cast(((HcfHmacParamsSpec *)params)->mdName))); + ((HcfHmacParamsSpec *)params)->mdName = nullptr; } else if (strcmp(params->algName, "CMAC") == 0) { HcfFree(static_cast(const_cast(((HcfCmacParamsSpec *)params)->cipherName))); + ((HcfCmacParamsSpec *)params)->cipherName = nullptr; } HcfFree(params); } @@ -193,6 +195,7 @@ static void MacDoFinalExecute(napi_env env, void *data) context->errCode = macObj->doFinal(macObj, outBlob); if (context->errCode != HCF_SUCCESS) { HcfFree(outBlob); + outBlob = nullptr; LOGE("doFinal failed!"); context->errMsg = "doFinal failed"; return; @@ -416,6 +419,7 @@ NapiMac::NapiMac(HcfMac *macObj) NapiMac::~NapiMac() { HcfObjDestroy(this->macObj_); + this->macObj_ = nullptr; } HcfMac *NapiMac::GetMac() @@ -537,11 +541,13 @@ napi_value NapiMac::JsMacUpdateSync(napi_env env, napi_callback_info info) napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "mac is nullptr!")); HcfBlobDataClearAndFree(inBlob); HcfFree(inBlob); + inBlob = nullptr; return nullptr; } HcfResult errCode = mac->update(mac, inBlob); HcfBlobDataClearAndFree(inBlob); HcfFree(inBlob); + inBlob = nullptr; if (errCode != HCF_SUCCESS) { LOGE("mac update failed!"); napi_throw(env, GenerateBusinessError(env, HCF_ERR_CRYPTO_OPERATION, "mac update failed!")); @@ -689,12 +695,15 @@ static bool GetHmacParamsSpec(napi_env env, napi_value arg, const char *algName, if (mdNameCopy == nullptr) { LOGE("malloc mdName failed!"); HcfFree(tmp); + tmp = nullptr; return false; } if (memcpy_s(mdNameCopy, mdName.length() + 1, mdName.c_str(), mdName.length() + 1) != EOK) { LOGE("copy mdName failed!"); HcfFree(mdNameCopy); + mdNameCopy = nullptr; HcfFree(tmp); + tmp = nullptr; return false; } tmp->base.algName = algName; @@ -733,12 +742,15 @@ static bool GetCmacParamsSpec(napi_env env, napi_value arg, const char *algName, if (cipherNameCopy == nullptr) { LOGE("malloc cipherName failed!"); HcfFree(tmp); + tmp = nullptr; return false; } if (memcpy_s(cipherNameCopy, cipherName.length() + 1, cipherName.c_str(), cipherName.length() + 1) != EOK) { LOGE("copy cipherName failed!"); HcfFree(cipherNameCopy); + cipherNameCopy = nullptr; HcfFree(tmp); + tmp = nullptr; return false; } tmp->base.algName = algName; @@ -804,6 +816,7 @@ static bool GetStringMacParams(napi_env env, napi_value argv, HcfMacParamsSpec * if (memcpy_s(mdNameCopy, algoName.length() + 1, algoName.c_str(), algoName.length() + 1) != EOK) { LOGE("copy mdName failed!"); HcfFree(mdNameCopy); + mdNameCopy = nullptr; return false; } (reinterpret_cast(*paramsSpec))->base.algName = "HMAC"; @@ -856,11 +869,13 @@ napi_value NapiMac::CreateMac(napi_env env, napi_callback_info info) napi_throw(env, GenerateBusinessError(env, res, "create C obj failed.")); LOGE("create c macObj failed."); FreeMacParams(paramsSpec); + paramsSpec = nullptr; return nullptr; } napi_value napiAlgName = nullptr; napi_create_string_utf8(env, paramsSpec->algName, NAPI_AUTO_LENGTH, &napiAlgName); FreeMacParams(paramsSpec); + paramsSpec = nullptr; napi_value instance = nullptr; napi_value constructor = nullptr; napi_get_reference_value(env, classRef_, &constructor); @@ -870,6 +885,7 @@ napi_value NapiMac::CreateMac(napi_env env, napi_callback_info info) if (macNapiObj == nullptr) { napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new mac napi obj failed.")); HcfObjDestroy(macObj); + macObj = nullptr; LOGE("create napi obj failed"); return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_md.cpp b/frameworks/js/napi/crypto/src/napi_md.cpp index 7ebe265d4e74a114fe4e937c92e843059f8b34cc..fce32b4885ed179298efad2be38a2058793867af 100644 --- a/frameworks/js/napi/crypto/src/napi_md.cpp +++ b/frameworks/js/napi/crypto/src/napi_md.cpp @@ -133,6 +133,7 @@ static void MdDoFinalExecute(napi_env env, void *data) context->errCode = mdObj->doFinal(mdObj, outBlob); if (context->errCode != HCF_SUCCESS) { HcfFree(outBlob); + outBlob = nullptr; LOGD("[error] doFinal failed!"); context->errMsg = "doFinal failed"; return; @@ -299,6 +300,7 @@ NapiMd::NapiMd(HcfMd *mdObj) NapiMd::~NapiMd() { HcfObjDestroy(this->mdObj_); + this->mdObj_ = nullptr; } HcfMd *NapiMd::GetMd() @@ -349,7 +351,7 @@ napi_value NapiMd::JsMdUpdateSync(napi_env env, napi_callback_info info) LOGE("failed to unwrap NapiMd obj!"); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "invalid parameters.")); HcfBlobDataClearAndFree(inBlob); - HcfFree(inBlob); + HCF_FREE_PTR(inBlob); return nullptr; } HcfMd *md = napiMd->GetMd(); @@ -357,7 +359,7 @@ napi_value NapiMd::JsMdUpdateSync(napi_env env, napi_callback_info info) LOGE("md is nullptr!"); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "md is nullptr!")); HcfBlobDataClearAndFree(inBlob); - HcfFree(inBlob); + HCF_FREE_PTR(inBlob); return nullptr; } HcfResult errCode = md->update(md, inBlob); @@ -365,13 +367,13 @@ napi_value NapiMd::JsMdUpdateSync(napi_env env, napi_callback_info info) LOGE("update failed!"); napi_throw(env, GenerateBusinessError(env, HCF_ERR_CRYPTO_OPERATION, "crypto operation error.")); HcfBlobDataClearAndFree(inBlob); - HcfFree(inBlob); + HCF_FREE_PTR(inBlob); return nullptr; } napi_value nullInstance = nullptr; napi_get_null(env, &nullInstance); HcfBlobDataClearAndFree(inBlob); - HcfFree(inBlob); + HCF_FREE_PTR(inBlob); return nullInstance; } @@ -521,6 +523,7 @@ napi_value NapiMd::CreateMd(napi_env env, napi_callback_info info) if (mdNapiObj == nullptr) { napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new md napi obj failed!")); HcfObjDestroy(mdObj); + mdObj = nullptr; LOGE("create md napi obj failed!"); return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_pri_key.cpp b/frameworks/js/napi/crypto/src/napi_pri_key.cpp index 3f7cb491fdb43022badb895d3d04e6a4756dca4a..6c460b1b0f0d2ad8396d5b77be6c0c9d0d218565 100644 --- a/frameworks/js/napi/crypto/src/napi_pri_key.cpp +++ b/frameworks/js/napi/crypto/src/napi_pri_key.cpp @@ -164,12 +164,14 @@ napi_value NapiPriKey::JsGetEncodedPem(napi_env env, napi_callback_info info) HcfParamsSpec *paramsSpec = nullptr; NapiPriKey *napiPriKey = nullptr; if (!ValidateAndGetParams(env, info, format, ¶msSpec, &napiPriKey)) { + paramsSpec = nullptr; return NapiGetNull(env); } HcfPriKey *priKey = napiPriKey->GetPriKey(); if (priKey == nullptr) { FreeEncodeParamsSpec(paramsSpec); + paramsSpec = nullptr; LOGE("failed to get priKey obj!"); napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "failed to get priKey obj!")); return nullptr; @@ -179,6 +181,7 @@ napi_value NapiPriKey::JsGetEncodedPem(napi_env env, napi_callback_info info) HcfResult res = priKey->getEncodedPem(priKey, paramsSpec, format.c_str(), &returnString); if (res != HCF_SUCCESS) { FreeEncodeParamsSpec(paramsSpec); + paramsSpec = nullptr; LOGE("getEncodedPem fail."); napi_throw(env, GenerateBusinessError(env, res, "getEncodedPem fail.")); return nullptr; @@ -186,7 +189,9 @@ napi_value NapiPriKey::JsGetEncodedPem(napi_env env, napi_callback_info info) napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; FreeEncodeParamsSpec(paramsSpec); + paramsSpec = nullptr; return instance; } @@ -226,6 +231,7 @@ static napi_value GetAsyKeySpecBigInt(napi_env env, AsyKeySpecItem item, HcfPriK napi_value instance = ConvertBigIntToNapiValue(env, &returnBigInteger); (void)memset_s(returnBigInteger.data, returnBigInteger.len, 0, returnBigInteger.len); HcfFree(returnBigInteger.data); + returnBigInteger.data = nullptr; if (instance == nullptr) { napi_throw(env, GenerateBusinessError(env, res, "covert bigInt to napi value failed.")); LOGE("covert bigInt to napi value failed."); @@ -262,6 +268,7 @@ static napi_value GetAsyKeySpecString(napi_env env, AsyKeySpecItem item, HcfPriK napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_pub_key.cpp b/frameworks/js/napi/crypto/src/napi_pub_key.cpp index 2ab50b8862d2d9024bcf3f045f734234513d09c1..98d0c2c612dec6b4f6a3c6d2234411beb2938bcc 100644 --- a/frameworks/js/napi/crypto/src/napi_pub_key.cpp +++ b/frameworks/js/napi/crypto/src/napi_pub_key.cpp @@ -197,6 +197,7 @@ napi_value NapiPubKey::JsGetEncodedPem(napi_env env, napi_callback_info info) napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } @@ -213,11 +214,13 @@ static napi_value GetAsyKeySpecBigInt(napi_env env, AsyKeySpecItem item, HcfPubK napi_value instance = ConvertBigIntToNapiValue(env, &returnBigInteger); if (instance == nullptr) { HcfFree(returnBigInteger.data); + returnBigInteger.data = nullptr; napi_throw(env, GenerateBusinessError(env, res, "covert bigInt to napi value failed.")); LOGE("covert bigInt to napi value failed."); return nullptr; } HcfFree(returnBigInteger.data); + returnBigInteger.data = nullptr; return instance; } @@ -249,6 +252,7 @@ static napi_value GetAsyKeySpecString(napi_env env, AsyKeySpecItem item, HcfPubK napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_rand.cpp b/frameworks/js/napi/crypto/src/napi_rand.cpp index 4b3c9bfd47c74e542e60237929de7bb3345234c9..36d163ace2f559ed4d77479eda2066ba61fe1e55 100644 --- a/frameworks/js/napi/crypto/src/napi_rand.cpp +++ b/frameworks/js/napi/crypto/src/napi_rand.cpp @@ -126,6 +126,7 @@ static void GenerateRandomExecute(napi_env env, void *data) LOGD("[error] generateRandom failed!"); context->errMsg = "generateRandom failed"; HcfFree(randBlob); + randBlob = nullptr; return; } context->randBlob = randBlob; @@ -219,6 +220,7 @@ NapiRand::NapiRand(HcfRand *randObj) NapiRand::~NapiRand() { HcfObjDestroy(this->randObj_); + this->randObj_ = nullptr; } HcfRand *NapiRand::GetRand() @@ -316,6 +318,7 @@ napi_value NapiRand::JsSetSeed(napi_env env, napi_callback_info info) if (status != napi_ok || napiRand == nullptr) { HcfBlobDataClearAndFree(seedBlob); HcfFree(seedBlob); + seedBlob = nullptr; napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "failed to unwrap NapiRand obj!")); LOGE("failed to unwrap NapiRand obj!"); return nullptr; @@ -324,6 +327,7 @@ napi_value NapiRand::JsSetSeed(napi_env env, napi_callback_info info) if (rand == nullptr) { HcfBlobDataClearAndFree(seedBlob); HcfFree(seedBlob); + seedBlob = nullptr; napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "fail to get rand obj!")); LOGE("fail to get rand obj!"); return nullptr; @@ -332,12 +336,14 @@ napi_value NapiRand::JsSetSeed(napi_env env, napi_callback_info info) if (res != HCF_SUCCESS) { HcfBlobDataClearAndFree(seedBlob); HcfFree(seedBlob); + seedBlob = nullptr; napi_throw(env, GenerateBusinessError(env, res, "set seed failed.")); LOGD("[error] set seed failed."); return nullptr; } HcfBlobDataClearAndFree(seedBlob); HcfFree(seedBlob); + seedBlob = nullptr; return thisVar; } @@ -391,6 +397,7 @@ napi_value NapiRand::CreateRand(napi_env env, napi_callback_info info) if (randNapiObj == nullptr) { napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new rand napi obj failed.")); HcfObjDestroy(randObj); + randObj = nullptr; LOGE("create rand napi obj failed"); return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_sign.cpp b/frameworks/js/napi/crypto/src/napi_sign.cpp index 08c2c847c18e2bb0137278f82a6a5767ac427b70..f726e15732c8cf97a1307ef5f569157a32056308 100644 --- a/frameworks/js/napi/crypto/src/napi_sign.cpp +++ b/frameworks/js/napi/crypto/src/napi_sign.cpp @@ -130,6 +130,7 @@ static void FreeSignUpdateCtx(napi_env env, SignUpdateCtx *ctx) HcfBlobDataFree(ctx->data); HcfFree(ctx->data); + ctx->data = nullptr; HcfFree(ctx); } @@ -162,6 +163,7 @@ static void FreeSignDoFinalCtx(napi_env env, SignDoFinalCtx *ctx) HcfBlobDataFree(ctx->data); HcfFree(ctx->data); + ctx->data = nullptr; HcfFree(ctx); } @@ -550,6 +552,7 @@ NapiSign::NapiSign(HcfSign *sign) NapiSign::~NapiSign() { HcfObjDestroy(this->sign_); + this->sign_ = nullptr; } HcfSign *NapiSign::GetSign() @@ -812,6 +815,7 @@ napi_value NapiSign::CreateJsSign(napi_env env, napi_callback_info info) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi sign failed")); LOGE("new napi sign failed"); HcfObjDestroy(sign); + sign = nullptr; return nullptr; } @@ -834,11 +838,13 @@ static HcfResult SetSignUserIdUintArray(napi_env env, napi_value *argv, HcfSign if (ret != HCF_SUCCESS) { HcfBlobDataFree(blob); HcfFree(blob); + blob = nullptr; LOGE("c setSignSpecUint8Array failed."); return HCF_INVALID_PARAMS; } HcfBlobDataFree(blob); HcfFree(blob); + blob = nullptr; return ret; } @@ -925,6 +931,7 @@ static napi_value GetSignSpecString(napi_env env, SignSpecItem item, HcfSign *si napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_sm2_crypto_util.cpp b/frameworks/js/napi/crypto/src/napi_sm2_crypto_util.cpp index d44e4262b11e0506488028cccc446372e92f3298..c2865aa538595e4063daa7851053780bb5dcab8d 100644 --- a/frameworks/js/napi/crypto/src/napi_sm2_crypto_util.cpp +++ b/frameworks/js/napi/crypto/src/napi_sm2_crypto_util.cpp @@ -81,15 +81,15 @@ static bool GetSm2CipherTextSpecFromNapiValue(napi_env env, napi_value arg, Sm2C if (hashDataBlob == nullptr) { LOGE("Failed to get valid hashData."); HcfBlobDataFree(cipherTextBlob); - HcfFree(cipherTextBlob); + HCF_FREE_PTR(cipherTextBlob); DestroySm2CipherTextSpec(tempSpec); return false; } tempSpec->cipherTextData = *cipherTextBlob; tempSpec->hashData = *hashDataBlob; *returnSpec = tempSpec; - HcfFree(cipherTextBlob); - HcfFree(hashDataBlob); + HCF_FREE_PTR(cipherTextBlob); + HCF_FREE_PTR(hashDataBlob); return true; } @@ -144,6 +144,7 @@ napi_value NapiSm2CryptoUtil::JsGenCipherTextBySpec(napi_env env, napi_callback_ if (res != HCF_SUCCESS) { LOGE("Gen cipher text by spec fail."); HcfFree(output); + output = nullptr; DestroySm2CipherTextSpec(spec); napi_throw(env, GenerateBusinessError(env, res, "gen cipher text by spec fail.")); return nullptr; @@ -151,6 +152,7 @@ napi_value NapiSm2CryptoUtil::JsGenCipherTextBySpec(napi_env env, napi_callback_ napi_value instance = ConvertBlobToNapiValue(env, output); HcfBlobDataFree(output); HcfFree(output); + output = nullptr; DestroySm2CipherTextSpec(spec); return instance; } @@ -258,6 +260,7 @@ napi_value NapiSm2CryptoUtil::JsGetCipherTextSpec(napi_env env, napi_callback_in LOGE("Failed to get mode."); HcfBlobDataFree(cipherText); HcfFree(cipherText); + cipherText = nullptr; napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "failed to get mode.")); return nullptr; } @@ -268,6 +271,7 @@ napi_value NapiSm2CryptoUtil::JsGetCipherTextSpec(napi_env env, napi_callback_in LOGE("Get cipher text spec fail."); HcfBlobDataFree(cipherText); HcfFree(cipherText); + cipherText = nullptr; napi_throw(env, GenerateBusinessError(env, res, "get cipher text spec fail.")); return nullptr; } @@ -275,6 +279,7 @@ napi_value NapiSm2CryptoUtil::JsGetCipherTextSpec(napi_env env, napi_callback_in DestroySm2CipherTextSpec(returnSpec); HcfBlobDataFree(cipherText); HcfFree(cipherText); + cipherText = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_sm2_ec_signature.cpp b/frameworks/js/napi/crypto/src/napi_sm2_ec_signature.cpp index 76b8bbdcdec2d2dc08a961b838c94a3089ed370e..521595652d8c829eb499c6ee2d2d4119f9d6912a 100644 --- a/frameworks/js/napi/crypto/src/napi_sm2_ec_signature.cpp +++ b/frameworks/js/napi/crypto/src/napi_sm2_ec_signature.cpp @@ -90,6 +90,7 @@ napi_value NapiSm2EcSignature::JsGenEcSignatureData(napi_env env, napi_callback_ if (res != HCF_SUCCESS) { LOGE("Gen cipher text by spec fail."); HcfFree(output); + output = nullptr; DestroySm2EcSignatureSpec(spec); napi_throw(env, GenerateBusinessError(env, res, "gen cipher text by spec fail.")); return nullptr; @@ -97,6 +98,7 @@ napi_value NapiSm2EcSignature::JsGenEcSignatureData(napi_env env, napi_callback_ napi_value instance = ConvertObjectBlobToNapiValue(env, output); HcfBlobDataFree(output); HcfFree(output); + output = nullptr; DestroySm2EcSignatureSpec(spec); return instance; } @@ -176,6 +178,7 @@ napi_value NapiSm2EcSignature::JsGenEcSignatureDataSpec(napi_env env, napi_callb LOGE("Get cipher text spec fail."); HcfBlobDataFree(cipherText); HcfFree(cipherText); + cipherText = nullptr; napi_throw(env, GenerateBusinessError(env, res, "get cipher text spec fail.")); return nullptr; } @@ -183,6 +186,7 @@ napi_value NapiSm2EcSignature::JsGenEcSignatureDataSpec(napi_env env, napi_callb DestroySm2EcSignatureSpec(returnSpec); HcfBlobDataFree(cipherText); HcfFree(cipherText); + cipherText = nullptr; return instance; } diff --git a/frameworks/js/napi/crypto/src/napi_sym_key_generator.cpp b/frameworks/js/napi/crypto/src/napi_sym_key_generator.cpp index 75ca18f635db9a219141acedbeb075dda0f23430..13dab12c2e37ee426b4ecb53dd2288fba03105e3 100644 --- a/frameworks/js/napi/crypto/src/napi_sym_key_generator.cpp +++ b/frameworks/js/napi/crypto/src/napi_sym_key_generator.cpp @@ -150,6 +150,7 @@ static bool BuildContextForConvertKey(napi_env env, napi_callback_info info, Sym } context->keyMaterial = *blob; HcfFree(blob); + blob = nullptr; if (napi_create_reference(env, thisVar, 1, &context->symKeyGeneratorRef) != napi_ok) { LOGE("create sym key generator ref failed when covert sym key!"); @@ -321,6 +322,7 @@ NapiSymKeyGenerator::NapiSymKeyGenerator(HcfSymKeyGenerator *generator) NapiSymKeyGenerator::~NapiSymKeyGenerator() { HcfObjDestroy(this->generator_); + this->generator_ = nullptr; } HcfSymKeyGenerator *NapiSymKeyGenerator::GetSymKeyGenerator() const @@ -335,6 +337,7 @@ static bool napiGetInstance(napi_env env, HcfSymKey *key, napi_value instance) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi sym key failed.")); LOGE("new napi sym key failed."); HcfObjDestroy(key); + key = nullptr; return false; } @@ -479,6 +482,7 @@ napi_value NapiSymKeyGenerator::JsConvertKeySync(napi_env env, napi_callback_inf HcfResult ret = generator->convertSymKey(generator, keyMaterial, &key); HcfBlobDataClearAndFree(keyMaterial); HcfFree(keyMaterial); + keyMaterial = nullptr; if (ret != HCF_SUCCESS) { napi_throw(env, GenerateBusinessError(env, ret, "convertSymKey key failed!")); LOGE("convertSymKey key failed!"); @@ -540,6 +544,7 @@ napi_value NapiSymKeyGenerator::CreateSymKeyGenerator(napi_env env, napi_callbac napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi sym key generator failed.")); LOGE("new napi sym key generator failed!"); HcfObjDestroy(generator); + generator = nullptr; return nullptr; } diff --git a/frameworks/js/napi/crypto/src/napi_utils.cpp b/frameworks/js/napi/crypto/src/napi_utils.cpp index b4684cd0c77be0e340607003cffd9b91920054aa..7b431ac9ce8679c7cbcd51ffd36eac640ada8d8f 100644 --- a/frameworks/js/napi/crypto/src/napi_utils.cpp +++ b/frameworks/js/napi/crypto/src/napi_utils.cpp @@ -178,6 +178,7 @@ HcfBlob *GetBlobFromNapiUint8Arr(napi_env env, napi_value data) if (newBlob->data == nullptr) { LOGE("malloc blob data failed!"); HcfFree(newBlob); + newBlob = nullptr; return nullptr; } (void)memcpy_s(newBlob->data, length, rawData, length); @@ -307,11 +308,13 @@ bool GetBigIntFromNapiValue(napi_env env, napi_value arg, HcfBigInteger *bigInt) } if (napi_get_value_bigint_words(env, arg, &signBit, &wordCount, reinterpret_cast(retArr)) != napi_ok) { HcfFree(retArr); + retArr = nullptr; LOGE("failed to get valid rawData."); return false; } if (signBit != 0) { HcfFree(retArr); + retArr = nullptr; LOGE("failed to get gegative rawData."); return false; } @@ -404,12 +407,14 @@ static bool GetIvParamsSpec(napi_env env, napi_value arg, HcfParamsSpec **params if (iv == nullptr) { LOGE("GetBlobFromNapiDataBlob failed!"); HcfFree(ivParamsSpec); + ivParamsSpec = nullptr; return false; } ivParamsSpec->base.getType = GetIvParamsSpecType; ivParamsSpec->iv = *iv; *paramsSpec = reinterpret_cast(ivParamsSpec); HcfFree(iv); + iv = nullptr; return true; } @@ -477,11 +482,11 @@ clearup: HcfBlobDataFree(iv); HcfBlobDataFree(aad); HcfBlobDataFree(tag); - HcfFree(gcmParamsSpec); + HCF_FREE_PTR(gcmParamsSpec); } - HcfFree(iv); - HcfFree(aad); - HcfFree(tag); + HCF_FREE_PTR(iv); + HCF_FREE_PTR(aad); + HCF_FREE_PTR(tag); return ret; } @@ -531,11 +536,11 @@ clearup: HcfBlobDataFree(iv); HcfBlobDataFree(aad); HcfBlobDataFree(tag); - HcfFree(ccmParamsSpec); + HCF_FREE_PTR(ccmParamsSpec); } - HcfFree(iv); - HcfFree(aad); - HcfFree(tag); + HCF_FREE_PTR(iv); + HCF_FREE_PTR(aad); + HCF_FREE_PTR(tag); return ret; } @@ -597,6 +602,7 @@ static bool GetCharArrayFromJsString(napi_env env, napi_value arg, HcfBlob *retB if (napi_get_value_string_utf8(env, arg, tmpPassword, (length + 1), &length) != napi_ok) { LOGE("can not get char string value"); HcfFree(tmpPassword); + tmpPassword = nullptr; return false; } retBlob->data = reinterpret_cast(tmpPassword); @@ -649,6 +655,7 @@ bool GetEncodingParamsSpec(napi_env env, napi_value arg, HcfParamsSpec **returnS if (!InitEncodingParams(env, arg, encodingParamsSpec, &tmpPw, &tmpCipher)) { LOGE("Failed to get passWord string from napi!"); HcfFree(encodingParamsSpec); + encodingParamsSpec = nullptr; return false; } *returnSpec = reinterpret_cast(encodingParamsSpec); @@ -686,6 +693,7 @@ static HcfBlob *GetBlobFromStringJSParams(napi_env env, napi_value arg) if (newBlob->data == nullptr) { LOGE("malloc blob data failed!"); HcfFree(newBlob); + newBlob = nullptr; return nullptr; } @@ -694,6 +702,7 @@ static HcfBlob *GetBlobFromStringJSParams(napi_env env, napi_value arg) LOGE("can not get string value"); HcfBlobDataClearAndFree(newBlob); HcfFree(newBlob); + newBlob = nullptr; return nullptr; } @@ -713,18 +722,21 @@ bool GetDecodingParamsSpec(napi_env env, napi_value arg, HcfParamsSpec **returnS if (tmpPw == nullptr) { LOGE("Failed to get passWord string from napi!"); HcfFree(decodingParamsSpec); + decodingParamsSpec = nullptr; return false; } if (tmpPw->len > PASSWORD_MAX_LENGTH) { LOGE("Password length exceeds max length limit of 4096 bytes!"); HcfBlobDataClearAndFree(tmpPw); HcfFree(decodingParamsSpec); + decodingParamsSpec = nullptr; return false; } decodingParamsSpec->password = reinterpret_cast(tmpPw->data); *returnSpec = reinterpret_cast(decodingParamsSpec); HcfFree(tmpPw); + tmpPw = nullptr; return true; } @@ -803,6 +815,7 @@ static bool GetDsaCommonAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParams if (!InitDsaCommonAsyKeySpec(env, arg, spec)) { LOGE("InitDsaCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -822,11 +835,13 @@ static bool GetDsaPubKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec * if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitDsaCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitDsaCommonAsyKeySpec failed."); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PUBLIC_KEY_SPEC; @@ -854,11 +869,13 @@ static bool GetDsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitDsaCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitDsaCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_KEY_PAIR_SPEC; @@ -868,6 +885,7 @@ static bool GetDsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeDsaCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec); + spec = nullptr; return false; } napi_value sk = GetDetailAsyKeySpecValue(env, arg, "sk"); @@ -875,7 +893,9 @@ static bool GetDsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeDsaCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec->pk.data); + spec->pk.data = nullptr; HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -923,6 +943,7 @@ static bool GetFpField(napi_env env, napi_value arg, HcfECField **ecField) if (fp->base.fieldType == nullptr) { LOGE("malloc fieldType failed!"); HcfFree(fp); + fp = nullptr; return false; } (void)memcpy_s(fp->base.fieldType, fieldTpyeLen+ 1, ECC_FIELD_TYPE_FP.c_str(), fieldTpyeLen); @@ -931,7 +952,9 @@ static bool GetFpField(napi_env env, napi_value arg, HcfECField **ecField) bool ret = GetBigIntFromNapiValue(env, p, &fp->p); if (!ret) { HcfFree(fp->base.fieldType); + fp->base.fieldType = nullptr; HcfFree(fp); + fp = nullptr; return false; } *ecField = reinterpret_cast(fp); @@ -1055,6 +1078,7 @@ static bool GetEccCommonAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParams if (!InitEccCommonAsyKeySpec(env, arg, spec, algName)) { LOGE("InitEccCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1074,11 +1098,13 @@ static bool GetEccPriKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec * if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitEccCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec), algName)) { LOGE("InitEccCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PRIVATE_KEY_SPEC; @@ -1089,6 +1115,7 @@ static bool GetEccPriKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec * // get big int fail, sk is null FreeEccCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1108,11 +1135,13 @@ static bool GetEccPubKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec * if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitEccCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec), algName)) { LOGE("InitEccCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PUBLIC_KEY_SPEC; @@ -1141,11 +1170,13 @@ static bool GetEccKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitEccCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec), algName)) { LOGE("InitEccCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_KEY_PAIR_SPEC; @@ -1156,6 +1187,7 @@ static bool GetEccKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeEccCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec); + spec = nullptr; return false; } napi_value sk = GetDetailAsyKeySpecValue(env, arg, "sk"); @@ -1163,8 +1195,11 @@ static bool GetEccKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeEccCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec->pk.x.data); + spec->pk.x.data = nullptr; HcfFree(spec->pk.y.data); + spec->pk.y.data = nullptr; HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1238,11 +1273,13 @@ static bool GetRsaPubKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec * if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitRsaCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitRsaCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PUBLIC_KEY_SPEC; @@ -1270,11 +1307,13 @@ static bool GetRsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitRsaCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitRsaCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_KEY_PAIR_SPEC; @@ -1284,6 +1323,7 @@ static bool GetRsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeRsaCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = nullptr; return false; } napi_value sk = GetDetailAsyKeySpecValue(env, arg, "sk"); @@ -1291,7 +1331,9 @@ static bool GetRsaKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParam if (!ret) { FreeRsaCommParamsSpec(&(spec->base)); HcfFree(spec->pk.data); + spec->pk.data = nullptr; HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1402,6 +1444,7 @@ static bool GetAlg25519KeyPairAsyKeySpec(napi_env env, napi_value arg, if (!InitAlg25519CommonAsyKeySpec(reinterpret_cast(spec), algName)) { LOGE("InitRsaCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.specType = HCF_KEY_PAIR_SPEC; @@ -1505,6 +1548,7 @@ static bool GetDhCommonAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsS if (!InitDhCommonAsyKeySpec(env, arg, spec)) { LOGE("InitDhCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1524,11 +1568,13 @@ static bool GetDhPubKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec ** if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitDhCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitDhCommonAsyKeySpec failed."); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PUBLIC_KEY_SPEC; @@ -1556,11 +1602,13 @@ static bool GetDhPriKeySpec(napi_env env, napi_value arg, HcfAsyKeyParamsSpec ** if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitDhCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitDhCommonAsyKeySpec failed."); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_PRIVATE_KEY_SPEC; @@ -1588,11 +1636,13 @@ static bool GetDhKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParams if (commSpecValue == nullptr) { LOGE("Get comm spec napi value failed."); HcfFree(spec); + spec = nullptr; return false; } if (!InitDhCommonAsyKeySpec(env, commSpecValue, reinterpret_cast(spec))) { LOGE("InitDhCommonAsyKeySpec failed!"); HcfFree(spec); + spec = nullptr; return false; } spec->base.base.specType = HCF_KEY_PAIR_SPEC; @@ -1602,6 +1652,7 @@ static bool GetDhKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParams if (!ret) { FreeDhCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec); + spec = nullptr; return false; } napi_value sk = GetDetailAsyKeySpecValue(env, arg, "sk"); @@ -1609,7 +1660,9 @@ static bool GetDhKeyPairAsyKeySpec(napi_env env, napi_value arg, HcfAsyKeyParams if (!ret) { FreeDhCommParamsSpec(reinterpret_cast(spec)); HcfFree(spec->pk.data); + spec->pk.data = nullptr; HcfFree(spec); + spec = nullptr; return false; } *asyKeySpec = reinterpret_cast(spec); @@ -1700,6 +1753,7 @@ napi_value ConvertBlobToNapiValue(napi_env env, HcfBlob *blob) if (memcpy_s(buffer, blob->len, blob->data, blob->len) != EOK) { LOGE("memcpy_s data to buffer failed!"); HcfFree(buffer); + buffer = nullptr; return NapiGetNull(env); } @@ -1710,6 +1764,7 @@ napi_value ConvertBlobToNapiValue(napi_env env, HcfBlob *blob) LOGE("create uint8 array buffer failed!"); (void)memset_s(buffer, blob->len, 0, blob->len); HcfFree(buffer); + buffer = nullptr; return NapiGetNull(env); } buffer = nullptr; @@ -1770,6 +1825,7 @@ HcfResult ConvertDataBlobToNapiValue(napi_env env, HcfBlob *blob, napi_value *na if (status != napi_ok) { LOGE("create napi uint8 array buffer failed!"); HcfFree(buffer); + buffer = nullptr; return HCF_ERR_NAPI; } @@ -1800,6 +1856,7 @@ napi_value ConvertObjectBlobToNapiValue(napi_env env, HcfBlob *blob) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "memcpy_s data to buffer failed!")); LOGE("memcpy_s data to buffer failed!"); HcfFree(buffer); + buffer = nullptr; return NapiGetNull(env); } @@ -1810,6 +1867,7 @@ napi_value ConvertObjectBlobToNapiValue(napi_env env, HcfBlob *blob) napi_throw(env, GenerateBusinessError(env, HCF_INVALID_PARAMS, "create uint8 array buffer failed!")); LOGE("create uint8 array buffer failed!"); HcfFree(buffer); + buffer = nullptr; return NapiGetNull(env); } buffer = nullptr; @@ -1851,6 +1909,7 @@ napi_value ConvertBigIntToNapiValue(napi_env env, HcfBigInteger *blob) LOGE("create bigint failed!"); (void)memset_s(words, wordsCount * sizeof(uint64_t), 0, wordsCount * sizeof(uint64_t)); HcfFree(words); + words = nullptr; return NapiGetNull(env); } if (bigInt == nullptr) { diff --git a/frameworks/js/napi/crypto/src/napi_verify.cpp b/frameworks/js/napi/crypto/src/napi_verify.cpp index e1b2b3ca9c9f02cddcb07b68d21bad195daac41c..d163b1ee2c94f5027bc3132336c45c688ee18131 100644 --- a/frameworks/js/napi/crypto/src/napi_verify.cpp +++ b/frameworks/js/napi/crypto/src/napi_verify.cpp @@ -151,6 +151,7 @@ static void FreeVerifyUpdateCtx(napi_env env, VerifyUpdateCtx *ctx) HcfBlobDataFree(ctx->data); HcfFree(ctx->data); + ctx->data = nullptr; HcfFree(ctx); } @@ -177,8 +178,10 @@ static void FreeVerifyDoFinalCtx(napi_env env, VerifyDoFinalCtx *ctx) HcfBlobDataFree(ctx->data); HcfFree(ctx->data); + ctx->data = nullptr; HcfBlobDataFree(ctx->signatureData); HcfFree(ctx->signatureData); + ctx->signatureData = nullptr; HcfFree(ctx); } @@ -206,6 +209,7 @@ static void FreeVerifyRecoverCtx(napi_env env, VerifyRecoverCtx *ctx) HcfBlobDataFree(ctx->signatureData); HcfFree(ctx->signatureData); + ctx->signatureData = nullptr; HcfFree(ctx); } @@ -323,6 +327,7 @@ static bool GetDataBlobAndSignatureFromInput(napi_env env, napi_value dataValue, LOGE("failed to get signature."); HcfBlobDataFree(data); HcfFree(data); + data = nullptr; return false; } @@ -704,6 +709,7 @@ NapiVerify::NapiVerify(HcfVerify *verify) NapiVerify::~NapiVerify() { HcfObjDestroy(this->verify_); + this->verify_ = nullptr; } HcfVerify *NapiVerify::GetVerify() @@ -1077,6 +1083,7 @@ napi_value NapiVerify::CreateJsVerify(napi_env env, napi_callback_info info) napi_throw(env, GenerateBusinessError(env, HCF_ERR_MALLOC, "new napi verify failed")); LOGE("new napi verify failed"); HcfObjDestroy(verify); + verify = nullptr; return nullptr; } @@ -1099,11 +1106,13 @@ static HcfResult SetVerifyUserIdUintArray(napi_env env, napi_value *argv, HcfVer if (ret != HCF_SUCCESS) { HcfBlobDataFree(blob); HcfFree(blob); + blob = nullptr; LOGE("c SetVerifyUserIdUintArray failed."); return HCF_INVALID_PARAMS; } HcfBlobDataFree(blob); HcfFree(blob); + blob = nullptr; return ret; } @@ -1188,6 +1197,7 @@ static napi_value GetVerifySpecString(napi_env env, SignSpecItem item, HcfVerify napi_value instance = nullptr; napi_create_string_utf8(env, returnString, NAPI_AUTO_LENGTH, &instance); HcfFree(returnString); + returnString = nullptr; return instance; } diff --git a/frameworks/key/asy_key_generator.c b/frameworks/key/asy_key_generator.c index 6ac223e9e0492d218d844f3440205167ddb541b2..460ad2ead3cb9e20e665e4ee303f75353bf0c449 100644 --- a/frameworks/key/asy_key_generator.c +++ b/frameworks/key/asy_key_generator.c @@ -618,6 +618,7 @@ static HcfResult CreateDsaCommonSpecImpl(const HcfDsaCommParamsSpec *srcSpec, Hc if (CopyDsaCommonSpec(srcSpec, spec) != HCF_SUCCESS) { HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } @@ -634,6 +635,7 @@ static HcfResult CreateDsaPubKeySpecImpl(const HcfDsaPubKeyParamsSpec *srcSpec, } if (CopyDsaCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -641,6 +643,7 @@ static HcfResult CreateDsaPubKeySpecImpl(const HcfDsaPubKeyParamsSpec *srcSpec, LOGE("Failed to allocate public key memory"); FreeDsaCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(spec->pk.data, srcSpec->pk.len, srcSpec->pk.data, srcSpec->pk.len); @@ -659,6 +662,7 @@ static HcfResult CreateDsaKeyPairSpecImpl(const HcfDsaKeyPairParamsSpec *srcSpec } if (CopyDsaCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -666,6 +670,7 @@ static HcfResult CreateDsaKeyPairSpecImpl(const HcfDsaKeyPairParamsSpec *srcSpec LOGE("Failed to allocate public key memory"); FreeDsaCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } spec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -673,7 +678,9 @@ static HcfResult CreateDsaKeyPairSpecImpl(const HcfDsaKeyPairParamsSpec *srcSpec LOGE("Failed to allocate private key memory"); FreeDsaCommParamsSpec(&(spec->base)); HcfFree(spec->pk.data); + spec->pk.data = NULL; HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(spec->pk.data, srcSpec->pk.len, srcSpec->pk.data, srcSpec->pk.len); @@ -719,6 +726,7 @@ static HcfResult CreateDhPubKeySpecImpl(const HcfDhPubKeyParamsSpec *srcSpec, Hc if (CopyDhCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { LOGE("Failed to copy src spec"); HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -744,6 +752,7 @@ static HcfResult CreateDhPriKeySpecImpl(const HcfDhPriKeyParamsSpec *srcSpec, Hc if (CopyDhCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { LOGE("Failed to copy src spec"); HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -751,6 +760,7 @@ static HcfResult CreateDhPriKeySpecImpl(const HcfDhPriKeyParamsSpec *srcSpec, Hc LOGE("Failed to allocate private key memory"); FreeDhCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(spec->sk.data, srcSpec->sk.len, srcSpec->sk.data, srcSpec->sk.len); @@ -770,6 +780,7 @@ static HcfResult CreateDhKeyPairSpecImpl(const HcfDhKeyPairParamsSpec *srcSpec, if (CopyDhCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { LOGE("Failed to copy src spec"); HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -777,6 +788,7 @@ static HcfResult CreateDhKeyPairSpecImpl(const HcfDhKeyPairParamsSpec *srcSpec, LOGE("Failed to allocate public key memory"); FreeDhCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } spec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -784,7 +796,9 @@ static HcfResult CreateDhKeyPairSpecImpl(const HcfDhKeyPairParamsSpec *srcSpec, LOGE("Failed to allocate private key memory"); FreeDhCommParamsSpec(&(spec->base)); HcfFree(spec->pk.data); + spec->pk.data = NULL; HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(spec->pk.data, srcSpec->pk.len, srcSpec->pk.data, srcSpec->pk.len); @@ -833,6 +847,7 @@ static HcfResult CreateEccPubKeySpecImpl(const HcfEccPubKeyParamsSpec *srcSpec, } if (CopyEccCommonSpec(&(srcSpec->base), &(tmpSpec->base)) != HCF_SUCCESS) { HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_INVALID_PARAMS; } HcfResult res = CopyPoint(&(srcSpec->pk), &(tmpSpec->pk)); @@ -840,6 +855,7 @@ static HcfResult CreateEccPubKeySpecImpl(const HcfEccPubKeyParamsSpec *srcSpec, LOGE("Failed to allocate public key memory"); FreeEccCommParamsSpec(&(tmpSpec->base)); HcfFree(tmpSpec); + tmpSpec = NULL; return res; } @@ -856,6 +872,7 @@ static HcfResult CreateEccPriKeySpecImpl(const HcfEccPriKeyParamsSpec *srcSpec, } if (CopyEccCommonSpec(&(srcSpec->base), &(tmpSpec->base)) != HCF_SUCCESS) { HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_INVALID_PARAMS; } tmpSpec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -863,6 +880,7 @@ static HcfResult CreateEccPriKeySpecImpl(const HcfEccPriKeyParamsSpec *srcSpec, LOGE("Failed to allocate private key memory"); FreeEccCommParamsSpec(&(tmpSpec->base)); HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpSpec->sk.data, srcSpec->sk.len, srcSpec->sk.data, srcSpec->sk.len); @@ -881,6 +899,7 @@ static HcfResult CreateEccKeyPairSpecImpl(const HcfEccKeyPairParamsSpec *srcSpec } if (CopyEccCommonSpec(&(srcSpec->base), &(tmpSpec->base)) != HCF_SUCCESS) { HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_INVALID_PARAMS; } HcfResult res = CopyPoint(&(srcSpec->pk), &(tmpSpec->pk)); @@ -888,6 +907,7 @@ static HcfResult CreateEccKeyPairSpecImpl(const HcfEccKeyPairParamsSpec *srcSpec LOGE("Failed to allocate public key memory"); FreeEccCommParamsSpec(&(tmpSpec->base)); HcfFree(tmpSpec); + tmpSpec = NULL; return res; } tmpSpec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -895,8 +915,11 @@ static HcfResult CreateEccKeyPairSpecImpl(const HcfEccKeyPairParamsSpec *srcSpec LOGE("Failed to allocate private key memory"); FreeEccCommParamsSpec(&(tmpSpec->base)); HcfFree(tmpSpec->pk.x.data); + tmpSpec->pk.x.data = NULL; HcfFree(tmpSpec->pk.y.data); + tmpSpec->pk.y.data = NULL; HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpSpec->sk.data, srcSpec->sk.len, srcSpec->sk.data, srcSpec->sk.len); @@ -942,6 +965,7 @@ static HcfResult CopyRsaCommonSpec(const HcfRsaCommParamsSpec *srcSpec, HcfRsaCo if (destSpec->n.data == NULL) { LOGE("Failed to allocate n data memory"); HcfFree(destSpec->base.algName); + destSpec->base.algName = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(destSpec->n.data, srcSpec->n.len, srcSpec->n.data, srcSpec->n.len); @@ -958,6 +982,7 @@ static HcfResult CreateRsaPubKeySpecImpl(const HcfRsaPubKeyParamsSpec *srcSpec, } if (CopyRsaCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -982,6 +1007,7 @@ static HcfResult CreateRsaKeyPairSpecImpl(const HcfRsaKeyPairParamsSpec *srcSpec } if (CopyRsaCommonSpec(&(srcSpec->base), &(spec->base)) != HCF_SUCCESS) { HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } spec->pk.data = (unsigned char *)HcfMalloc(srcSpec->pk.len, 0); @@ -989,6 +1015,7 @@ static HcfResult CreateRsaKeyPairSpecImpl(const HcfRsaKeyPairParamsSpec *srcSpec LOGE("Failed to allocate public key memory"); FreeRsaCommParamsSpec(&(spec->base)); HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } spec->sk.data = (unsigned char *)HcfMalloc(srcSpec->sk.len, 0); @@ -996,7 +1023,9 @@ static HcfResult CreateRsaKeyPairSpecImpl(const HcfRsaKeyPairParamsSpec *srcSpec LOGE("Failed to allocate private key memory"); FreeRsaCommParamsSpec(&(spec->base)); HcfFree(spec->pk.data); + spec->pk.data = NULL; HcfFree(spec); + spec = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(spec->pk.data, srcSpec->pk.len, srcSpec->pk.data, srcSpec->pk.len); @@ -1384,6 +1413,7 @@ HcfResult HcfAsyKeyGeneratorCreate(const char *algoName, HcfAsyKeyGenerator **re if (strcpy_s(returnGenerator->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnGenerator); + returnGenerator = NULL; return HCF_INVALID_PARAMS; } HcfAsyKeyGeneratorSpi *spiObj = NULL; @@ -1392,6 +1422,7 @@ HcfResult HcfAsyKeyGeneratorCreate(const char *algoName, HcfAsyKeyGenerator **re if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; return res; } returnGenerator->base.base.destroy = DestroyAsyKeyGenerator; @@ -1430,6 +1461,7 @@ HcfResult HcfAsyKeyGeneratorBySpecCreate(const HcfAsyKeyParamsSpec *paramsSpec, if (ret != HCF_SUCCESS) { LOGE("Failed to create asy key params spec impl!"); HcfFree(returnGenerator); + returnGenerator = NULL; return ret; } HcfAsyKeyGeneratorSpi *spiObj = NULL; @@ -1437,7 +1469,9 @@ HcfResult HcfAsyKeyGeneratorBySpecCreate(const HcfAsyKeyParamsSpec *paramsSpec, if (ret != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; FreeAsyKeySpec(paramsSpecImpl); + paramsSpecImpl = NULL; return ret; } returnGenerator->base.base.destroy = DestroyAsyKeyGeneratorBySpec; diff --git a/frameworks/key/dh_key_util.c b/frameworks/key/dh_key_util.c index af6c831536fd68606a968bd45bef190b16d094a1..81b9684d4e2d823fa70f782280f77786616b86f7 100644 --- a/frameworks/key/dh_key_util.c +++ b/frameworks/key/dh_key_util.c @@ -48,5 +48,6 @@ HcfResult HcfDhKeyUtilCreate(int32_t pLen, int32_t skLen, HcfDhCommParamsSpec ** } FreeDhCommParamsSpec(&(spiInstance->paramsSpec)); HcfFree(spiInstance); + spiInstance = NULL; return ret; } \ No newline at end of file diff --git a/frameworks/key/ecc_key_util.c b/frameworks/key/ecc_key_util.c index dbd7b62a59632a475869fb993115b49a3b50d590..63936569fe78b53b318559e1aba125917a1a32f7 100644 --- a/frameworks/key/ecc_key_util.c +++ b/frameworks/key/ecc_key_util.c @@ -191,5 +191,6 @@ HcfResult HcfEccKeyUtilCreate(const char *algName, HcfEccCommParamsSpec **return } FreeEccCommParamsSpec(&(spiInstance->paramsSpec)); HcfFree(spiInstance); + spiInstance = NULL; return ret; } diff --git a/frameworks/key/key_utils.c b/frameworks/key/key_utils.c index 6a34ab3ebf822703ae90441c0f1db219fe341a10..68d1ab9e511baacb3ccf905fcaa7096565f96ace 100644 --- a/frameworks/key/key_utils.c +++ b/frameworks/key/key_utils.c @@ -83,12 +83,14 @@ static HcfResult CopyEcField(const HcfECField *src, HcfECField **dest) if (!srcFieldTypeLen) { LOGE("fieldType is empty!"); HcfFree(tmpField); + tmpField = NULL; return HCF_INVALID_PARAMS; } tmpField->fieldType = (char *)HcfMalloc(srcFieldTypeLen + 1, 0); if (tmpField->fieldType == NULL) { LOGE("Failed to allocate field memory."); HcfFree(tmpField); + tmpField = NULL; return HCF_ERR_MALLOC; } HcfECFieldFp *tmpDest = (HcfECFieldFp *)(tmpField); @@ -97,7 +99,9 @@ static HcfResult CopyEcField(const HcfECField *src, HcfECField **dest) if (tmpDest->p.data == NULL) { LOGE("Failed to allocate b data memory"); HcfFree(tmpField->fieldType); + tmpField->fieldType = NULL; HcfFree(tmpField); + tmpField = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpField->fieldType, srcFieldTypeLen, src->fieldType, srcFieldTypeLen); @@ -172,6 +176,7 @@ HcfResult CreateEccCommonSpecImpl(const HcfEccCommParamsSpec *srcSpec, HcfEccCom if (CopyEccCommonSpec(srcSpec, tmpSpec) != HCF_SUCCESS) { LOGE("CreateEccCommonSpecImpl error!"); HcfFree(tmpSpec); + tmpSpec = NULL; return HCF_INVALID_PARAMS; } *destSpec = tmpSpec; @@ -216,6 +221,7 @@ HcfResult CreateDhCommonSpecImpl(const HcfDhCommParamsSpec *srcSpec, HcfDhCommPa if (CopyDhCommonSpec(srcSpec, spec) != HCF_SUCCESS) { LOGE("Failed to copy src spec"); HcfFree(spec); + spec = NULL; return HCF_INVALID_PARAMS; } diff --git a/frameworks/key/sym_key_generator.c b/frameworks/key/sym_key_generator.c index ad1a6710b57dbafd6708e1c00d984981b8101891..3d8486d1e085d918f79cb694925cbf3e5a032e39 100644 --- a/frameworks/key/sym_key_generator.c +++ b/frameworks/key/sym_key_generator.c @@ -207,6 +207,7 @@ static void DestroySymmKeyGenerator(HcfObjectBase *base) } HcfSymmKeyGeneratorImpl *impl = (HcfSymmKeyGeneratorImpl *)base; HcfObjDestroy(impl->spiObj); + impl->spiObj = NULL; HcfFree(impl); } @@ -274,6 +275,7 @@ HcfResult HcfSymKeyGeneratorCreate(const char *algoName, HcfSymKeyGenerator **re if (strcpy_s(returnGenerator->algoName, HCF_MAX_ALGO_NAME_LEN, algoName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnGenerator); + returnGenerator = NULL; return HCF_INVALID_PARAMS; } HcfSymKeyGeneratorSpi *spiObj = NULL; @@ -281,6 +283,7 @@ HcfResult HcfSymKeyGeneratorCreate(const char *algoName, HcfSymKeyGenerator **re if (res != HCF_SUCCESS) { LOGE("Failed to create spi object!"); HcfFree(returnGenerator); + returnGenerator = NULL; return res; } returnGenerator->base.generateSymKey = GenerateSymmKey; diff --git a/frameworks/native/src/asym_key.c b/frameworks/native/src/asym_key.c index 7a6bb8359f66e0d74be53ddc828ab846116e36e2..7efd8800a5adfc71ee61b8e4a0c1aab7171c687e 100644 --- a/frameworks/native/src/asym_key.c +++ b/frameworks/native/src/asym_key.c @@ -117,6 +117,7 @@ OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_Create(const char *algoName, OH_Cryp HcfResult ret = HcfAsyKeyGeneratorCreate(algoName, &(tmpCtx->base)); if (ret != HCF_SUCCESS) { HcfFree(tmpCtx); + tmpCtx = NULL; return GetOhCryptoErrCode(ret); } *ctx = tmpCtx; @@ -145,6 +146,7 @@ OH_Crypto_ErrCode OH_CryptoAsymKeyGenerator_SetPassword(OH_CryptoAsymKeyGenerato decSpec->password = (char *)HcfMalloc(passwordLen + 1, 0); if (decSpec->password == NULL) { HcfFree(decSpec); + decSpec = NULL; return CRYPTO_MEMORY_ERROR; } (void)memcpy_s(decSpec->password, passwordLen, password, passwordLen); @@ -213,11 +215,15 @@ static OH_Crypto_ErrCode HandlePemConversion(OH_CryptoAsymKeyGenerator *ctx, Cry ret = ProcessPubKeyData(pubKeyData, &pubKeyStr); if (ret != CRYPTO_SUCCESS) { CleanupPemMemory(priKeyStr, pubKeyStr); + priKeyStr = NULL; + pubKeyStr = NULL; return ret; } HcfResult hcfRet = ExecutePemConversion(ctx, pubKeyStr, priKeyStr, keyCtx); CleanupPemMemory(priKeyStr, pubKeyStr); + priKeyStr = NULL; + pubKeyStr = NULL; return GetOhCryptoErrCode(hcfRet); } @@ -371,7 +377,7 @@ OH_Crypto_ErrCode OH_CryptoPubKey_GetParam(OH_CryptoPubKey *key, CryptoAsymKey_P ret = key->getAsyKeySpecInt == NULL ? HCF_INVALID_PARAMS : key->getAsyKeySpecInt((HcfPubKey *)key, (AsyKeySpecItem)item, returnInt); if (ret != HCF_SUCCESS) { - HcfFree(returnInt); + HCF_FREE_PTR(returnInt); break; } value->data = (uint8_t *)returnInt; @@ -428,14 +434,17 @@ OH_Crypto_ErrCode OH_CryptoPrivKeyEncodingParams_SetParam(OH_CryptoPrivKeyEncodi switch (type) { case CRYPTO_PRIVATE_KEY_ENCODING_PASSWORD_STR: HcfFree(ctx->password); + ctx->password = NULL; ctx->password = data; break; case CRYPTO_PRIVATE_KEY_ENCODING_SYMMETRIC_CIPHER_STR: HcfFree(ctx->cipher); + ctx->cipher = NULL; ctx->cipher = data; break; default: HcfFree(data); + data = NULL; return CRYPTO_PARAMETER_CHECK_FAILED; } return CRYPTO_SUCCESS; @@ -512,7 +521,7 @@ OH_Crypto_ErrCode OH_CryptoPrivKey_GetParam(OH_CryptoPrivKey *key, CryptoAsymKey ret = key->getAsyKeySpecInt == NULL ? HCF_INVALID_PARAMS : key->getAsyKeySpecInt((HcfPriKey *)key, (AsyKeySpecItem)item, returnInt); if (ret != HCF_SUCCESS) { - HcfFree(returnInt); + HCF_FREE_PTR(returnInt); break; } value->data = (uint8_t *)returnInt; @@ -624,6 +633,7 @@ static OH_Crypto_ErrCode CreateAsymKeySpec(const char *algoName, CryptoAsymKeySp char *algName = (char *)HcfMalloc(strlen(algoName) + 1, 0); if (algName == NULL) { HcfFree(tmpSpec); + tmpSpec = NULL; return CRYPTO_MEMORY_ERROR; } (void)memcpy_s(algName, strlen(algoName), algoName, strlen(algoName)); @@ -677,6 +687,7 @@ static OH_Crypto_ErrCode SetDataBlob(uint8_t **dest, uint32_t *destLen, Crypto_D } (void)memcpy_s(tmp, value->len, value->data, value->len); HcfFree(*dest); + *dest = NULL; *dest = tmp; *destLen = value->len; ReverseUint8Arr(*dest, *destLen); @@ -813,13 +824,16 @@ static OH_Crypto_ErrCode SetEccField(HcfEccCommParamsSpec *spec, Crypto_DataBlob field->base.fieldType = (char *)HcfMalloc(fieldTypeLen + 1, 0); if (field->base.fieldType == NULL) { HcfFree(field); + field = NULL; return CRYPTO_MEMORY_ERROR; } (void)memcpy_s(field->base.fieldType, fieldTypeLen, fieldType, fieldTypeLen); field->p.data = (uint8_t *)HcfMalloc(value->len, 0); if (field->p.data == NULL) { HcfFree(field->base.fieldType); + field->base.fieldType = NULL; HcfFree(field); + field = NULL; return CRYPTO_MEMORY_ERROR; } (void)memcpy_s(field->p.data, value->len, value->data, value->len); @@ -1117,6 +1131,7 @@ static OH_Crypto_ErrCode SetEccCommonSpec(HcfEccCommParamsSpec *commonParamsSpec spec->n.len = eccCommParamsSpec.n.len; spec->h = eccCommParamsSpec.h; HcfFree(eccCommParamsSpec.base.algName); + eccCommParamsSpec.base.algName = NULL; return CRYPTO_SUCCESS; } @@ -1133,6 +1148,7 @@ static OH_Crypto_ErrCode SetDhCommonSpec(HcfDhCommParamsSpec *commonParamsSpec, spec->g.len = dhCommParamsSpec.g.len; spec->length = dhCommParamsSpec.length; HcfFree(dhCommParamsSpec.base.algName); + dhCommParamsSpec.base.algName = NULL; return CRYPTO_SUCCESS; } @@ -1557,6 +1573,7 @@ static OH_Crypto_ErrCode GenPriKeyPair(HcfAsyKeyGeneratorBySpec *generator, OH_C *keyPair = (OH_CryptoKeyPair *)HcfMalloc(sizeof(OH_CryptoKeyPair), 0); if (*keyPair == NULL) { HcfFree(priKey); + priKey = NULL; return CRYPTO_MEMORY_ERROR; } @@ -1577,6 +1594,7 @@ static OH_Crypto_ErrCode GenPubKeyPair(HcfAsyKeyGeneratorBySpec *generator, OH_C *keyPair = (OH_CryptoKeyPair *)HcfMalloc(sizeof(OH_CryptoKeyPair), 0); if (*keyPair == NULL) { HcfFree(pubKey); + pubKey = NULL; return CRYPTO_MEMORY_ERROR; } (*keyPair)->pubKey = pubKey; @@ -1684,7 +1702,9 @@ OH_Crypto_ErrCode OH_CryptoEcPoint_SetCoordinate(OH_CryptoEcPoint *point, Crypto return GetOhCryptoErrCodeNew(ret); } HcfFree(point->pointBase.x.data); + point->pointBase.x.data = NULL; HcfFree(point->pointBase.y.data); + point->pointBase.y.data = NULL; point->pointBase.x.data = dPoint.x.data; point->pointBase.x.len = dPoint.x.len; point->pointBase.y.data = dPoint.y.data; diff --git a/frameworks/native/src/crypto_asym_cipher.c b/frameworks/native/src/crypto_asym_cipher.c index 03ecced6b4122177a4a6af7a8585dbe55d3b5850..5c9e53744d80d35d109de7de3b89066bf6b76ce9 100644 --- a/frameworks/native/src/crypto_asym_cipher.c +++ b/frameworks/native/src/crypto_asym_cipher.c @@ -178,26 +178,31 @@ OH_Crypto_ErrCode OH_CryptoSm2CiphertextSpec_SetItem(OH_CryptoSm2CiphertextSpec switch (item) { case CRYPTO_SM2_CIPHERTEXT_C1_X: HcfFree(spec->xCoordinate.data); + spec->xCoordinate.data = NULL; spec->xCoordinate.data = data; spec->xCoordinate.len = in->len; break; case CRYPTO_SM2_CIPHERTEXT_C1_Y: HcfFree(spec->yCoordinate.data); + spec->yCoordinate.data = NULL; spec->yCoordinate.data = data; spec->yCoordinate.len = in->len; break; case CRYPTO_SM2_CIPHERTEXT_C2: HcfFree(spec->cipherTextData.data); + spec->cipherTextData.data = NULL; spec->cipherTextData.data = data; spec->cipherTextData.len = in->len; break; case CRYPTO_SM2_CIPHERTEXT_C3: HcfFree(spec->hashData.data); + spec->hashData.data = NULL; spec->hashData.data = data; spec->hashData.len = in->len; break; default: HcfFree(data); + data = NULL; return CRYPTO_PARAMETER_CHECK_FAILED; } diff --git a/frameworks/native/src/crypto_kdf.c b/frameworks/native/src/crypto_kdf.c index 96a8bbbc4933871c11467cd650cd11b07eca8a97..49eade7aa7799dcac75e5a3329d6623e4435b9bb 100644 --- a/frameworks/native/src/crypto_kdf.c +++ b/frameworks/native/src/crypto_kdf.c @@ -96,6 +96,7 @@ static OH_Crypto_ErrCode SetHkdfParam(HcfHkdfParamsSpec *params, CryptoKdf_Param break; default: HcfFree(data); + data = NULL; return CRYPTO_PARAMETER_CHECK_FAILED; } return CRYPTO_SUCCESS; diff --git a/frameworks/native/src/crypto_mac.c b/frameworks/native/src/crypto_mac.c index 3d5ceae50a31961843245639c31ed875c5fdac7d..43fabbf2a05aa10e61f5a25d6015ad1c8e5e572d 100644 --- a/frameworks/native/src/crypto_mac.c +++ b/frameworks/native/src/crypto_mac.c @@ -52,11 +52,13 @@ OH_Crypto_ErrCode OH_CryptoMac_Create(const char *algoName, OH_CryptoMac **ctx) algName = HMAC_NAME; } else { HcfFree(tmpCtx); + tmpCtx = NULL; return CRYPTO_PARAMETER_CHECK_FAILED; } if (paramsSpec == NULL) { HcfFree(tmpCtx); + tmpCtx = NULL; return CRYPTO_MEMORY_ERROR; } @@ -77,6 +79,7 @@ static OH_Crypto_ErrCode SetCmacParam(HcfCmacParamsSpec *paramsSpec, CryptoMac_P } (void)memcpy_s(data, value->len, value->data, value->len); HcfFree((void *)(paramsSpec->cipherName)); + paramsSpec->cipherName = NULL; paramsSpec->cipherName = data; return CRYPTO_SUCCESS; } @@ -96,6 +99,7 @@ static OH_Crypto_ErrCode SetHmacParam(HcfHmacParamsSpec *paramsSpec, CryptoMac_P } (void)memcpy_s(data, value->len, value->data, value->len); HcfFree((void *)(paramsSpec->mdName)); + paramsSpec->mdName = NULL; paramsSpec->mdName = data; return CRYPTO_SUCCESS; } diff --git a/frameworks/native/src/signature.c b/frameworks/native/src/signature.c index 0168a17ba90b81dab0499c86aab751c8796136e1..21b5c7e3a1f8a22f7921b75327e10ee3cfaa8b20 100644 --- a/frameworks/native/src/signature.c +++ b/frameworks/native/src/signature.c @@ -182,6 +182,7 @@ OH_Crypto_ErrCode OH_CryptoVerify_GetParam(OH_CryptoVerify *ctx, CryptoSignature ret = ctx->getVerifySpecInt((HcfVerify *)ctx, (SignSpecItem)type, returnInt); if (ret != HCF_SUCCESS) { HcfFree(returnInt); + returnInt = NULL; break; } value->data = (uint8_t *)returnInt; @@ -315,6 +316,7 @@ OH_Crypto_ErrCode OH_CryptoSign_GetParam(OH_CryptoSign *ctx, CryptoSignature_Par ret = ctx->getSignSpecInt((HcfSign *)ctx, (SignSpecItem)type, returnInt); if (ret != HCF_SUCCESS) { HcfFree(returnInt); + returnInt = NULL; break; } value->data = (uint8_t *)returnInt; @@ -470,11 +472,13 @@ OH_Crypto_ErrCode OH_CryptoEccSignatureSpec_Encode(OH_CryptoEccSignatureSpec *sp HcfResult ret = HcfGenEcSignatureDataBySpec((Sm2EcSignatureDataSpec *)spec, outBlob); if (ret != HCF_SUCCESS) { HcfFree(outBlob); + outBlob = NULL; return GetOhCryptoErrCode(ret); } out->data = outBlob->data; out->len = outBlob->len; HcfFree(outBlob); + outBlob = NULL; return GetOhCryptoErrCodeNew(HCF_SUCCESS); } diff --git a/plugin/mbedtls_plugin/md/src/mbedtls_md.c b/plugin/mbedtls_plugin/md/src/mbedtls_md.c index 73a5fd680191873de98caade4e9317713fa67bae..f145833467b6264be18050764e979fc22b1ccfb5 100644 --- a/plugin/mbedtls_plugin/md/src/mbedtls_md.c +++ b/plugin/mbedtls_plugin/md/src/mbedtls_md.c @@ -177,13 +177,16 @@ HcfResult MbedtlsMdSpiCreate(const char *mbedtlsAlgoName, HcfMdSpi **spiObj) if (returnSpiImpl->ctx == NULL) { LOGE("Failed to create ctx!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_MALLOC; } int32_t ret = MbedtlsEvpDigestInitEx(returnSpiImpl->ctx, mbedtlsAlgoName); if (ret != HCF_MBEDTLS_SUCCESS) { LOGD("Failed to init MD ret is %d!", ret); MbedtlsEvpMdCtxFree(returnSpiImpl->ctx); + returnSpiImpl->ctx = NULL; HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSpiImpl->base.base.getClass = MbedtlsGetMdClass; diff --git a/plugin/mbedtls_plugin/rand/src/mbedtls_rand.c b/plugin/mbedtls_plugin/rand/src/mbedtls_rand.c index 247eb691e6207982f92aa4b20a013de07497b1ef..ccc959de2a430caffeea145c0a8933e83da6a7b2 100644 --- a/plugin/mbedtls_plugin/rand/src/mbedtls_rand.c +++ b/plugin/mbedtls_plugin/rand/src/mbedtls_rand.c @@ -140,11 +140,13 @@ static void DestroyMbedtlsRand(HcfObjectBase *self) if (ctrDrbg != NULL) { mbedtls_ctr_drbg_free(ctrDrbg); HcfFree(ctrDrbg); + ctxDrbg = NULL; } mbedtls_entropy_context *entropy = MbedtlsGetMdEntropy((HcfRandSpi *)self); if (entropy != NULL) { mbedtls_entropy_free(entropy); HcfFree(entropy); + entropy = NULL; } HcfFree(self); } @@ -163,6 +165,7 @@ static int32_t MbedtlsRandInitEx(mbedtls_entropy_context **entropy, mbedtls_ctr_ *ctrDrbg = (mbedtls_ctr_drbg_context *)HcfMalloc(sizeof(mbedtls_ctr_drbg_context), 0); if (*ctrDrbg == NULL) { HcfFree(*entropy); + *entropy = NULL; LOGE("Failed to allocate *ctrDrbg memory!"); return HCF_ERR_MALLOC; } @@ -174,7 +177,9 @@ static int32_t MbedtlsRandInitEx(mbedtls_entropy_context **entropy, mbedtls_ctr_ mbedtls_entropy_free(*entropy); mbedtls_ctr_drbg_free(*ctrDrbg); HcfFree(*entropy); + *entropy = NULL; HcfFree(*ctrDrbg); + *ctrDrbg = NULL; return HCF_ERR_CRYPTO_OPERATION; } diff --git a/plugin/openssl_plugin/common/src/openssl_common.c b/plugin/openssl_plugin/common/src/openssl_common.c index cda89d135fac89d7b33f54493bcaafaf6244dee2..c77543d6b4930ded92b686df238399113f62548a 100644 --- a/plugin/openssl_plugin/common/src/openssl_common.c +++ b/plugin/openssl_plugin/common/src/openssl_common.c @@ -371,6 +371,7 @@ HcfResult GetSm2SpecStringSm3(char **returnString) if (memcpy_s(sm2Str, sm2Len, HCF_OPENSSL_DIGEST_SM3_STR, sm2Len) != EOK) { LOGE("memcpy sm2Str failed."); HcfFree(sm2Str); + sm2Str = NULL; return HCF_ERR_MALLOC; } *returnString = sm2Str; @@ -541,6 +542,7 @@ HcfResult KeyDerive(EVP_PKEY *priKey, EVP_PKEY *pubKey, HcfBlob *returnSecret) LOGD("[error] Evp key derive failed!"); HcfPrintOpensslError(); HcfFree(secretData); + secretData = NULL; break; } diff --git a/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_rsa_openssl.c b/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_rsa_openssl.c index 1bd4a2cfa44d7da6fdb29a0829ae789b0daf3561..0462bd007bea75ea40bf788d8e4eba3397ff7084 100644 --- a/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_rsa_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_rsa_openssl.c @@ -149,6 +149,7 @@ static HcfResult SetPsourceFromBlob(HcfBlob pSource, EVP_PKEY_CTX *ctx) LOGD("[error] Openssl Set psource fail"); HcfPrintOpensslError(); HcfFree(opensslPsource); + opensslPsource = NULL; return HCF_ERR_CRYPTO_OPERATION; } return HCF_SUCCESS; diff --git a/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_sm2_openssl.c b/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_sm2_openssl.c index 2d05ce93fe81f542b8c3a0d0c369e2012ba9d20a..362680e497b8d9f43f45e54ea804e490d108df9e 100644 --- a/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_sm2_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/cipher/src/cipher_sm2_openssl.c @@ -285,6 +285,7 @@ HcfResult HcfCipherSm2CipherSpiCreate(CipherAttr *params, HcfCipherGeneratorSpi if (ret != HCF_SUCCESS || getMD == NULL) { LOGE("get md failed"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_INVALID_PARAMS; } returnImpl->sm2Digest = getMD; diff --git a/plugin/openssl_plugin/crypto_operation/hmac/src/mac_openssl.c b/plugin/openssl_plugin/crypto_operation/hmac/src/mac_openssl.c index b2c67b5bc2126104f2de9e31bb050c44c48b0fea..92d77c946c7f774f46794d525e3f3556c786c0b6 100644 --- a/plugin/openssl_plugin/crypto_operation/hmac/src/mac_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/hmac/src/mac_openssl.c @@ -196,12 +196,14 @@ HcfResult OpensslHmacSpiCreate(HcfMacParamsSpec *paramsSpec, HcfMacSpi **spiObj) if (strcpy_s(returnSpiImpl->opensslMdName, HCF_MAX_MD_NAME_LEN, ((HcfHmacParamsSpec *)paramsSpec)->mdName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_INVALID_PARAMS; } returnSpiImpl->ctx = OpensslHmacCtxNew(); if (returnSpiImpl->ctx == NULL) { LOGD("[error] Failed to create ctx!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSpiImpl->base.base.getClass = OpensslGetHmacClass; @@ -331,18 +333,21 @@ HcfResult OpensslCmacSpiCreate(HcfMacParamsSpec *paramsSpec, HcfMacSpi **spiObj) ((HcfCmacParamsSpec *)paramsSpec)->cipherName) != EOK) { LOGE("Failed to copy algoName!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_INVALID_PARAMS; } EVP_MAC *mac = EVP_MAC_fetch(NULL, "CMAC", NULL); if (mac == NULL) { LOGE("fetch failed"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSpiImpl->ctx = EVP_MAC_CTX_new(mac); if (returnSpiImpl->ctx == NULL) { LOGD("[error] Failed to create ctx!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; OpensslMacFree(mac); return HCF_ERR_CRYPTO_OPERATION; } diff --git a/plugin/openssl_plugin/crypto_operation/kdf/src/hkdf_openssl.c b/plugin/openssl_plugin/crypto_operation/kdf/src/hkdf_openssl.c index 4f3f2b5b4cefa0af15f1f9e1f15d3d1eae69749a..beeb95ae46caca808da31090a4cf31da4d52ad28 100644 --- a/plugin/openssl_plugin/crypto_operation/kdf/src/hkdf_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/kdf/src/hkdf_openssl.c @@ -66,9 +66,17 @@ static void FreeHkdfData(HcfHkdfData **data) return; } HcfClearAndFree((*data)->out, (*data)->outLen); + (*data)->out = NULL; + (*data)->outLen = 0; HcfClearAndFree((*data)->salt, (*data)->saltLen); + (*data)->salt = NULL; + (*data)->saltLen = 0; HcfClearAndFree((*data)->info, (*data)->infoLen); + (*data)->info = NULL; + (*data)->infoLen = 0; HcfClearAndFree((*data)->key, (*data)->keyLen); + (*data)->key = NULL; + (*data)->keyLen = 0; (void)memset_s(*data, sizeof(HcfHkdfData), 0, sizeof(HcfHkdfData)); HcfFree(*data); *data = NULL; diff --git a/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c b/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c index 95a5eedb8f807d30a8240ca6b53d2c1aa23c297b..38fda9d20919d6d673ba0889f242dcc46402b2c5 100644 --- a/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/kdf/src/scrypt_openssl.c @@ -66,8 +66,14 @@ static void FreeScryptData(HcfScryptData **data) return; } HcfClearAndFree((*data)->out, (*data)->outLen); + (*data)->out = NULL; + (*data)->outLen = 0; HcfClearAndFree((*data)->salt, (*data)->saltLen); + (*data)->salt = NULL; + (*data)->saltLen = 0; HcfClearAndFree((*data)->password, (*data)->passwordLen); + (*data)->password = NULL; + (*data)->passwordLen = 0; (void)memset_s(*data, sizeof(HcfScryptData), 0, sizeof(HcfScryptData)); HcfFree(*data); *data = NULL; diff --git a/plugin/openssl_plugin/crypto_operation/md/src/md_openssl.c b/plugin/openssl_plugin/crypto_operation/md/src/md_openssl.c index ffcb32e8a085d1211c9c12c6c679a872652c9bda..ff48a8b7a0fb8825b634723b9a147fc7560a84fc 100644 --- a/plugin/openssl_plugin/crypto_operation/md/src/md_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/md/src/md_openssl.c @@ -157,6 +157,7 @@ HcfResult OpensslMdSpiCreate(const char *opensslAlgoName, HcfMdSpi **spiObj) if (returnSpiImpl->ctx == NULL) { LOGE("Failed to create ctx!"); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_MALLOC; } const EVP_MD *mdfunc = OpensslGetMdAlgoFromString(opensslAlgoName); @@ -164,6 +165,7 @@ HcfResult OpensslMdSpiCreate(const char *opensslAlgoName, HcfMdSpi **spiObj) LOGE("OpensslGetMdAlgoFromString failed!"); OpensslEvpMdCtxFree(returnSpiImpl->ctx); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } int32_t ret = OpensslEvpDigestInitEx(returnSpiImpl->ctx, mdfunc, NULL); @@ -171,6 +173,7 @@ HcfResult OpensslMdSpiCreate(const char *opensslAlgoName, HcfMdSpi **spiObj) LOGD("[error] Failed to init MD!"); OpensslEvpMdCtxFree(returnSpiImpl->ctx); HcfFree(returnSpiImpl); + returnSpiImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSpiImpl->base.base.getClass = OpensslGetMdClass; diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/dsa_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/dsa_openssl.c index 03fb3f146492ccf237ba42ca9652ad955df3c04c..f0ca7dc7e14a960d80457a73c5f2954d854aa2f2 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/dsa_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/dsa_openssl.c @@ -382,6 +382,7 @@ static HcfResult EngineDsaSignDoFinal(HcfSignSpi *self, HcfBlob *data, HcfBlob * if (OpensslEvpDigestSignFinal(impl->mdCtx, signatureData, &maxLen) != HCF_OPENSSL_SUCCESS) { HcfPrintOpensslError(); HcfFree(signatureData); + signatureData = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -420,11 +421,13 @@ static HcfResult EngineDsaSignWithoutDigestDoFinal(HcfSignSpi *self, HcfBlob *da (const unsigned char *)data->data, data->len) != HCF_OPENSSL_SUCCESS) { HcfPrintOpensslError(); HcfFree(signatureData); + signatureData = NULL; return HCF_ERR_CRYPTO_OPERATION; } if (actualLen > maxLen) { LOGD("[error] Signature data too long."); HcfFree(signatureData); + signatureData = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -570,6 +573,7 @@ HcfResult HcfSignSpiDsaCreate(HcfSignatureParams *params, HcfSignSpi **returnObj HcfResult ret = GetOpensslDigestAlg(params->md, &digestAlg); if (ret != HCF_SUCCESS) { HcfFree(impl); + impl = NULL; return HCF_INVALID_PARAMS; } impl->base.engineInit = EngineDsaSignInit; @@ -579,6 +583,7 @@ HcfResult HcfSignSpiDsaCreate(HcfSignatureParams *params, HcfSignSpi **returnObj if (impl->mdCtx == NULL) { LOGE("Failed to allocate ctx memory!"); HcfFree(impl); + impl = NULL; return HCF_ERR_MALLOC; } } @@ -616,6 +621,7 @@ HcfResult HcfVerifySpiDsaCreate(HcfSignatureParams *params, HcfVerifySpi **retur HcfResult ret = GetOpensslDigestAlg(params->md, &digestAlg); if (ret != HCF_SUCCESS) { HcfFree(impl); + impl = NULL; return HCF_INVALID_PARAMS; } impl->base.engineInit = EngineDsaVerifyInit; @@ -625,6 +631,7 @@ HcfResult HcfVerifySpiDsaCreate(HcfSignatureParams *params, HcfVerifySpi **retur if (impl->mdCtx == NULL) { LOGE("Failed to allocate ctx memory!"); HcfFree(impl); + impl = NULL; return HCF_ERR_MALLOC; } } diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/ecdsa_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/ecdsa_openssl.c index 9c6a455ff08a22bdd4097e77eb23d6819fecd219..3fbeb101de10c371b603653545b57e7edc482b7d 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/ecdsa_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/ecdsa_openssl.c @@ -230,6 +230,7 @@ static HcfResult EngineSignDoFinal(HcfSignSpi *self, HcfBlob *data, HcfBlob *ret HcfPrintOpensslError(); LOGD("[error] EVP_DigestSignFinal failed."); HcfFree(outData); + outData = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -453,6 +454,7 @@ HcfResult HcfSignSpiEcdsaCreate(HcfSignatureParams *params, HcfSignSpi **returnO if (returnImpl->ctx == NULL) { LOGE("Failed to allocate ctx memory!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } @@ -505,6 +507,7 @@ HcfResult HcfVerifySpiEcdsaCreate(HcfSignatureParams *params, HcfVerifySpi **ret if (returnImpl->ctx == NULL) { LOGE("Failed to allocate ctx memory!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/ed25519_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/ed25519_openssl.c index 4c391c64668c06914c776eea721fcdd9725e5553..270526663ecec7f6bdafc775dde2d683dd933591 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/ed25519_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/ed25519_openssl.c @@ -163,6 +163,7 @@ static HcfResult EngineSignDoFinal(HcfSignSpi *self, HcfBlob *data, HcfBlob *ret HcfPrintOpensslError(); LOGD("[error] EVP_DigestSign failed."); HcfFree(signatureData); + signatureData = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSignatureData->data = signatureData; @@ -332,6 +333,7 @@ HcfResult HcfSignSpiEd25519Create(HcfSignatureParams *params, HcfSignSpi **retur if (returnImpl->mdCtx == NULL) { LOGE("Failed to allocate mdCtx memory!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } @@ -367,6 +369,7 @@ HcfResult HcfVerifySpiEd25519Create(HcfSignatureParams *params, HcfVerifySpi **r if (returnImpl->mdCtx == NULL) { LOGE("Failed to allocate mdCtx memory!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/signature_rsa_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/signature_rsa_openssl.c index d6521d01b5a95dc0d90425c3717c3d57a9a3e9db..48c171a0206344ea5eee005a47656df2cffa3eb7 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/signature_rsa_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/signature_rsa_openssl.c @@ -500,6 +500,7 @@ static HcfResult EnginePkeySign(HcfSignSpiRsaOpensslImpl *impl, HcfBlob *data, H if (OpensslEvpPkeySign(impl->ctx, outData, &actualLen, data->data, data->len) != HCF_OPENSSL_SUCCESS) { LOGE("OpensslEvpPkeySign fail"); HcfFree(outData); + outData = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnSignatureData->data = outData; @@ -531,6 +532,7 @@ static HcfResult EngineDigestSign(HcfSignSpiRsaOpensslImpl *impl, HcfBlob *data, if (OpensslEvpDigestSignFinal(impl->mdctx, outData, &maxLen) != HCF_OPENSSL_SUCCESS) { LOGD("[error] OpensslEvpDigestSignFinal fail"); HcfFree(outData); + outData = NULL; HcfPrintOpensslError(); return HCF_ERR_CRYPTO_OPERATION; } @@ -970,6 +972,7 @@ HcfResult HcfSignSpiRsaCreate(HcfSignatureParams *params, HcfSignSpi **returnObj if (returnImpl->mdctx == NULL) { LOGE("Failed to allocate md ctx!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } returnImpl->initFlag = UNINITIALIZED; @@ -1033,6 +1036,7 @@ HcfResult HcfVerifySpiRsaCreate(HcfSignatureParams *params, HcfVerifySpi **retur if (returnImpl->mdctx == NULL) { LOGE("Failed to allocate md ctx!"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } returnImpl->saltLen = PSS_SALTLEN_INVALID_INIT; diff --git a/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c b/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c index f2f57bcc9ac7b3aa6b36f6368a52b74173520c93..24dd8c29524acefb5a192f7c3874dd30cb50f811 100644 --- a/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c +++ b/plugin/openssl_plugin/crypto_operation/signature/src/sm2_openssl.c @@ -294,6 +294,7 @@ static HcfResult EngineSignDoFinal(HcfSignSpi *self, HcfBlob *data, HcfBlob *ret HcfPrintOpensslError(); LOGD("[error] EVP_DigestSignFinal failed."); HcfFree(outData); + outData = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -465,6 +466,7 @@ static HcfResult EngineSetSignSpecUint8Array(HcfSignSpi *self, SignSpecItem item if (memcpy_s(impl->userId.data, userId.len, userId.data, userId.len) != EOK) { LOGE("memcpy userId failed."); HcfFree(impl->userId.data); + impl->userId.data = NULL; return HCF_ERR_MALLOC; } impl->userId.len = userId.len; @@ -541,6 +543,7 @@ static HcfResult EngineSetVerifySpecUint8Array(HcfVerifySpi *self, SignSpecItem if (memcpy_s(impl->userId.data, userId.len, userId.data, userId.len) != EOK) { LOGE("memcpy userId failed."); HcfFree(impl->userId.data); + impl->userId.data = NULL; return HCF_ERR_MALLOC; } impl->userId.len = userId.len; @@ -635,6 +638,7 @@ HcfResult HcfSignSpiSm2Create(HcfSignatureParams *params, HcfSignSpi **returnObj if (returnImpl->userId.data == NULL) { LOGE("Failed to allocate userId data memory"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)); @@ -643,7 +647,9 @@ HcfResult HcfSignSpiSm2Create(HcfSignatureParams *params, HcfSignSpi **returnObj if (returnImpl->mdCtx == NULL) { LOGE("Failed to allocate mdCtx memory!"); HcfFree(returnImpl->userId.data); + returnImpl->userId.data = NULL; HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } @@ -685,6 +691,7 @@ HcfResult HcfVerifySpiSm2Create(HcfSignatureParams *params, HcfVerifySpi **retur if (returnImpl->userId.data == NULL) { LOGE("Failed to allocate userId data memory"); HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(returnImpl->userId.data, strlen(SM2_DEFAULT_USERID), SM2_DEFAULT_USERID, strlen(SM2_DEFAULT_USERID)); @@ -693,7 +700,9 @@ HcfResult HcfVerifySpiSm2Create(HcfSignatureParams *params, HcfVerifySpi **retur if (returnImpl->mdCtx == NULL) { LOGE("Failed to allocate mdCtx memory!"); HcfFree(returnImpl->userId.data); + returnImpl->userId.data = NULL; HcfFree(returnImpl); + returnImpl = NULL; return HCF_ERR_MALLOC; } diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/alg_25519_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/alg_25519_asy_key_generator_openssl.c index dfdf49aebdadfc29a3546c895fd0a88845819f66..32b12d0ddb78f3b328a58f360829c5600e7de143 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/alg_25519_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/alg_25519_asy_key_generator_openssl.c @@ -728,7 +728,9 @@ static HcfResult EngineGenerateAlg25519KeyPair(HcfAsyKeyGeneratorSpi *self, HcfK if (ret != HCF_SUCCESS) { LOGE("Create alg25519 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; @@ -776,7 +778,9 @@ static HcfResult EngineConvertAlg25519Key(HcfAsyKeyGeneratorSpi *self, HcfParams if (ret != HCF_SUCCESS) { LOGE("Create alg25519 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; } @@ -885,7 +889,9 @@ static HcfResult EngineConvertX25519PemKey(HcfAsyKeyGeneratorSpi *self, HcfParam if (ret != HCF_SUCCESS) { LOGE("Create alg25519 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; } @@ -923,7 +929,9 @@ static HcfResult EngineConvertEd25519PemKey(HcfAsyKeyGeneratorSpi *self, HcfPara if (ret != HCF_SUCCESS) { LOGE("Create alg25519 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; } @@ -1017,13 +1025,16 @@ static HcfResult CreateAlg25519KeyPairByKeyPairSpec(const HcfAlg25519KeyPairPara if (ret != HCF_SUCCESS) { LOGE("Create alg25519 priKey failed."); HcfObjDestroy(pubKey); + pubKey = NULL; return ret; } ret = CreateAlg25519KeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { LOGE("Create alg25519 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/dh_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/dh_asy_key_generator_openssl.c index efeadeeda80d3c40ec0bff306dc552f300093ff4..55731377e8d2e9fe21ac1721c427ed0bfd8a0d4b 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/dh_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/dh_asy_key_generator_openssl.c @@ -790,6 +790,7 @@ static HcfResult CreateDhKeyPairByCommSpec(const HcfDhCommParamsSpec *paramsSpec LOGD("[error] DH_up_ref failed."); HcfPrintOpensslError(); HcfObjDestroy(pubKey); + pubKey = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -798,13 +799,16 @@ static HcfResult CreateDhKeyPairByCommSpec(const HcfDhCommParamsSpec *paramsSpec LOGE("Create dh priKey failed."); OpensslDhFree(dh); HcfObjDestroy(pubKey); + pubKey = NULL; return HCF_ERR_MALLOC; } if (CreateDhKeyPair(pubKey, priKey, returnKeyPair) != HCF_SUCCESS) { LOGE("Create dh keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return HCF_ERR_MALLOC; } return HCF_SUCCESS; @@ -856,13 +860,16 @@ static HcfResult CreateDhKeyPairByKeyPairSpec(const HcfDhKeyPairParamsSpec *para if (ret != HCF_SUCCESS) { LOGD("[error] Create dh priKey by keyPairSpec failed."); HcfObjDestroy(pubKey); + pubKey = NULL; return ret; } ret = CreateDhKeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { LOGD("[error] Create dh keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; @@ -1006,7 +1013,9 @@ static HcfResult EngineGenerateDhKeyPair(HcfAsyKeyGeneratorSpi *self, HcfKeyPair if (ret != HCF_SUCCESS) { LOGE("Create dh keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; @@ -1044,7 +1053,9 @@ static HcfResult EngineConvertDhKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec * if (ret != HCF_SUCCESS) { LOGE("Create dh keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; } @@ -1151,7 +1162,9 @@ static HcfResult EngineConvertDhPemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpe if (ret != HCF_SUCCESS) { LOGE("Create dh keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/dh_common_param_spec_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/dh_common_param_spec_generator_openssl.c index 928dab78d12531a56266ec7deb191f4cbb3b216f..758bbc0568432f8fde4117581648a0970a0106ba 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/dh_common_param_spec_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/dh_common_param_spec_generator_openssl.c @@ -122,6 +122,7 @@ static HcfResult BuildCommonParam(EVP_PKEY *dhKey, HcfDhCommParamsSpecSpi *retur LOGD("[error] BuildCommonParamGenerator failed."); OpensslDhFree(sk); HcfFree(returnCommonParamSpec->paramsSpec.p.data); + returnCommonParamSpec->paramsSpec.p.data = NULL; return HCF_ERR_CRYPTO_OPERATION; } OpensslDhFree(sk); @@ -175,13 +176,16 @@ HcfResult HcfDhCommonParamSpecCreate(int32_t pLen, int32_t skLen, HcfDhCommParam if (SetAlgName(algName, &(object->paramsSpec.base.algName)) != HCF_SUCCESS) { LOGE("Set algName parameter failed."); HcfFree(object); + object = NULL; OpensslEvpPkeyFree(dhKey); return HCF_INVALID_PARAMS; } if (BuildCommonParam(dhKey, object)!= HCF_SUCCESS) { LOGD("[error] Get common params failed."); HcfFree(object->paramsSpec.base.algName); + object->paramsSpec.base.algName = NULL; HcfFree(object); + object = NULL; OpensslEvpPkeyFree(dhKey); return HCF_ERR_CRYPTO_OPERATION; } diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/dsa_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/dsa_asy_key_generator_openssl.c index 0a29419b21b8146ca567f3c0049e267f3a9d2836..8653574586184c377d51659f0abfb1bb7fdb8064 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/dsa_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/dsa_asy_key_generator_openssl.c @@ -692,6 +692,7 @@ static HcfResult CreateDsaKeyPairByCommSpec(const HcfDsaCommParamsSpec *paramsSp LOGE("Dup DSA failed."); HcfPrintOpensslError(); HcfObjDestroy(pubKey); + pubKey = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -699,12 +700,15 @@ static HcfResult CreateDsaKeyPairByCommSpec(const HcfDsaCommParamsSpec *paramsSp if (CreateDsaPriKey(dsa, &priKey) != HCF_SUCCESS) { OpensslDsaFree(dsa); HcfObjDestroy(pubKey); + pubKey = NULL; return HCF_ERR_MALLOC; } if (CreateDsaKeyPair(pubKey, priKey, returnKeyPair) != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return HCF_ERR_MALLOC; } return HCF_SUCCESS; @@ -750,12 +754,15 @@ static HcfResult CreateDsaKeyPairByKeyPairSpec(const HcfDsaKeyPairParamsSpec *pa ret = CreateDsaPriKeyByKeyPairSpec(paramsSpec, &priKey); if (ret != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; return ret; } ret = CreateDsaKeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; @@ -863,7 +870,9 @@ static HcfResult EngineGenerateDsaKeyPair(HcfAsyKeyGeneratorSpi *self, HcfKeyPai ret = CreateDsaKeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } return HCF_SUCCESS; @@ -899,7 +908,9 @@ static HcfResult EngineConvertDsaKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec ret = CreateDsaKeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; } @@ -1002,7 +1013,9 @@ static HcfResult EngineConvertDsaPemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSp ret = CreateDsaKeyPair(pubKey, priKey, returnKeyPair); if (ret != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } return ret; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c index 0838888705489560439d8578c98165bceabc91ac..dd4ae1ca551ba9e51e8a9ecdea0e8121572bc6f8 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_asy_key_generator_openssl.c @@ -1115,6 +1115,7 @@ static HcfResult GetCompressedEccPointEncoded(HcfOpensslEccPubKey *impl, HcfBlob LOGE("Failed to convert public key to compressed format."); HcfPrintOpensslError(); HcfFree(returnData); + returnBlob = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnBlob->data = returnData; @@ -1302,6 +1303,7 @@ static HcfResult CopyMemFromBIO(BIO *bio, HcfBlob *returnBlob) LOGE("Bio read fail"); HcfPrintOpensslError(); HcfFree(tmpBlob.data); + tmpBlob.data = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnBlob->len = tmpBlob.len; @@ -1575,12 +1577,14 @@ static HcfResult PackEccPubKey(int32_t curveId, EC_KEY *ecKey, const char *field if (len == 0) { LOGE("fieldType is empty!"); HcfFree(returnPubKey); + returnPubKey = NULL; return HCF_INVALID_PARAMS; } tmpFieldType = (char *)HcfMalloc(len + 1, 0); if (tmpFieldType == NULL) { LOGE("Alloc tmpFieldType memory failed."); HcfFree(returnPubKey); + returnPubKey = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpFieldType, len, fieldType, len); @@ -1618,12 +1622,14 @@ static HcfResult PackEccPriKey(int32_t curveId, EC_KEY *ecKey, const char *field if (len == 0) { LOGE("fieldType is empty!"); HcfFree(returnPriKey); + returnPriKey = NULL; return HCF_INVALID_PARAMS; } tmpFieldType = (char *)HcfMalloc(len + 1, 0); if (tmpFieldType == NULL) { LOGE("Alloc tmpFieldType memory failed."); HcfFree(returnPriKey); + returnPriKey = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpFieldType, len, fieldType, len); @@ -1765,7 +1771,9 @@ static HcfResult EngineConvertEccKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec } while (0); if (res != HCF_SUCCESS) { HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return res; } @@ -1865,7 +1873,9 @@ static HcfResult EngineConvertEccPemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSp if (res != HCF_SUCCESS) { LOGE("Convert ec keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return res; } @@ -1916,11 +1926,13 @@ static HcfResult CreateAndAssignKeyPair(const HcfAsyKeyGeneratorSpiOpensslEccImp if (ecPubKey == NULL) { LOGD("[error] copy ecKey fail."); HcfObjDestroy(priKey); + priKey = NULL; return HCF_ERR_CRYPTO_OPERATION; } res = PackEccPubKey(impl->curveId, ecPubKey, fieldType, &pubKey); if (res != HCF_SUCCESS) { HcfObjDestroy(priKey); + priKey = NULL; OpensslEcKeyFree(ecPubKey); return res; } @@ -1929,7 +1941,9 @@ static HcfResult CreateAndAssignKeyPair(const HcfAsyKeyGeneratorSpiOpensslEccImp if (returnKeyPair == NULL) { LOGE("Failed to allocate returnKeyPair memory!"); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return HCF_ERR_MALLOC; } returnKeyPair->base.base.getClass = GetEccKeyPairClass; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c index b95caa8a6c63acd1ebacf0137dc5b4a5e4ca9ac3..59c28f4c24fc3760d899e9b40e05271b146ad606 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/ecc_common_param_spec_generator_openssl.c @@ -178,6 +178,7 @@ static HcfEccCommParamsSpecSpi *BuildEccCommonParamObject(void) if (spi->paramsSpec.field == NULL) { LOGE("field malloc failed."); HcfFree(spi); + spi = NULL; return NULL; } char *fieldType = "Fp"; @@ -185,22 +186,29 @@ static HcfEccCommParamsSpecSpi *BuildEccCommonParamObject(void) if (srcFieldTypeLen == 0) { LOGE("fieldType is empty!"); HcfFree(spi->paramsSpec.field); + spi->paramsSpec.field = NULL; HcfFree(spi); + spi = NULL; return NULL; } spi->paramsSpec.field->fieldType = (char *)HcfMalloc(srcFieldTypeLen + 1, 0); if (spi->paramsSpec.field->fieldType == NULL) { LOGE("fieldType malloc failed."); HcfFree(spi->paramsSpec.field); + spi->paramsSpec.field = NULL; HcfFree(spi); + spi = NULL; return NULL; } if (memcpy_s(spi->paramsSpec.field->fieldType, srcFieldTypeLen, fieldType, srcFieldTypeLen) != EOK) { LOGE("memcpy fieldType failed."); HcfFree(spi->paramsSpec.field->fieldType); + spi->paramsSpec.field->fieldType = NULL; HcfFree(spi->paramsSpec.field); + spi->paramsSpec.field = NULL; HcfFree(spi); + spi = NULL; return NULL; } return spi; @@ -377,6 +385,7 @@ static HcfResult GetECCPointEncoded(const int32_t formatValue, EC_GROUP *ecGroup LOGE("Failed to get ECC point encoding."); HcfPrintOpensslError(); HcfFree(returnData); + returnData = NULL; return HCF_ERR_CRYPTO_OPERATION; } returnBlob->data = returnData; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/rsa_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/rsa_asy_key_generator_openssl.c index 08d887e791c2a15d835a70acbbd66ec02c6426de..8cf15aef3f3374c04b1c007264dce88fb6323172 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/rsa_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/rsa_asy_key_generator_openssl.c @@ -353,6 +353,7 @@ static HcfResult CopyMemFromBIO(BIO *bio, HcfBlob *outBlob) LOGD("[error] Bio read fail"); HcfPrintOpensslError(); HcfFree(blob.data); + blob.data = NULL; return HCF_ERR_CRYPTO_OPERATION; } outBlob->len = blob.len; @@ -929,6 +930,7 @@ static HcfResult PackKeyPair(RSA *rsa, uint32_t realBits, HcfOpensslRsaKeyPair * return HCF_SUCCESS; ERR1: HcfFree(pubKeyImpl); + pubKeyImpl = NULL; ERR2: OpensslRsaFree(pubKey); OpensslRsaFree(priKey); @@ -1186,6 +1188,7 @@ static HcfResult EngineConvertKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec *pa if (ConvertPriKey(priKeyBlob, &priKey) != HCF_SUCCESS) { LOGE("convert prikey fail."); HcfObjDestroy((HcfObjectBase *)pubKey); + pubKey = NULL; return HCF_INVALID_PARAMS; } } @@ -1199,7 +1202,9 @@ static HcfResult EngineConvertKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec *pa if (keyPair == NULL) { LOGE("Malloc keyPair fail."); HcfObjDestroy((HcfObjectBase *)pubKey); + pubKey = NULL; HcfObjDestroy((HcfObjectBase *)priKey); + priKey = NULL; return HCF_ERR_MALLOC; } @@ -1234,6 +1239,7 @@ static HcfResult EngineConvertPemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec if (ConvertPemPriKey(priKeyStr, params, EVP_PKEY_KEYPAIR, &priKey) != HCF_SUCCESS) { LOGE("convert prikey fail."); HcfObjDestroy((HcfObjectBase *)pubKey); + pubKey = NULL; return HCF_ERR_CRYPTO_OPERATION; } } @@ -1242,7 +1248,9 @@ static HcfResult EngineConvertPemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec if (keyPair == NULL) { LOGE("Malloc keyPair fail."); HcfObjDestroy((HcfObjectBase *)pubKey); + pubKey = NULL; HcfObjDestroy((HcfObjectBase *)priKey); + priKey = NULL; return HCF_ERR_MALLOC; } keyPair->base.priKey = (HcfPriKey *)priKey; @@ -1345,6 +1353,7 @@ static HcfResult GenerateKeyPairBySpec(const HcfAsyKeyParamsSpec *paramsSpec, Hc LOGD("[error] Duplicate pubKey rsa fail"); OpensslRsaFree(rsa); HcfFree(keyPairImpl); + keyPairImpl = NULL; return HCF_ERR_CRYPTO_OPERATION; } @@ -1354,6 +1363,7 @@ static HcfResult GenerateKeyPairBySpec(const HcfAsyKeyParamsSpec *paramsSpec, Hc OpensslRsaFree(rsa); OpensslRsaFree(pubKeyRsa); HcfFree(keyPairImpl); + keyPairImpl = NULL; return res; } @@ -1363,7 +1373,9 @@ static HcfResult GenerateKeyPairBySpec(const HcfAsyKeyParamsSpec *paramsSpec, Hc OpensslRsaFree(rsa); OpensslRsaFree(pubKeyRsa); HcfFree(keyPairImpl); + keyPairImpl = NULL; HcfFree(pubKeyImpl); + pubKeyImpl = NULL; return res; } keyPairImpl->base.priKey = (HcfPriKey *)priKeyImpl; @@ -1554,6 +1566,7 @@ HcfResult HcfAsyKeyGeneratorSpiRsaCreate(HcfAsyKeyGenParams *params, HcfAsyKeyGe if (DecodeParams(params, &impl->params) != HCF_SUCCESS) { LOGE("Keygen params is invalid."); HcfFree(impl); + impl = NULL; return HCF_INVALID_PARAMS; } impl->base.base.getClass = GetKeyGeneratorClass; diff --git a/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c b/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c index 174221daaaa1ccf816d8e95c29d6ebb8bae083f2..889a0b0836050fc9413628d77b6d1f41cd150ad4 100644 --- a/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c +++ b/plugin/openssl_plugin/key/asy_key_generator/src/sm2_asy_key_generator_openssl.c @@ -760,12 +760,14 @@ static HcfResult PackSm2PubKey(int32_t curveId, EC_KEY *ecKey, const char *field if (len == 0) { LOGE("FieldType is empty!"); HcfFree(returnPubKey); + returnPubKey = NULL; return HCF_INVALID_PARAMS; } tmpFieldType = (char *)HcfMalloc(len + 1, 0); if (tmpFieldType == NULL) { LOGE("Allocate tmpFieldType memory failed."); HcfFree(returnPubKey); + returnPubKey = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpFieldType, len, fieldType, len); @@ -811,12 +813,14 @@ static HcfResult PackSm2PriKey(int32_t curveId, EC_KEY *ecKey, const char *field if (len == 0) { LOGE("FieldType is empty!"); HcfFree(returnPriKey); + returnPriKey = NULL; return HCF_INVALID_PARAMS; } tmpFieldType = (char *)HcfMalloc(len + 1, 0); if (tmpFieldType == NULL) { LOGE("Allocate tmpFieldType memory failed."); HcfFree(returnPriKey); + returnPriKey = NULL; return HCF_ERR_MALLOC; } (void)memcpy_s(tmpFieldType, len, fieldType, len); @@ -937,7 +941,9 @@ static HcfResult EngineConvertSm2Key(HcfAsyKeyGeneratorSpi *self, HcfParamsSpec if (ret != HCF_SUCCESS) { LOGD("[error] Convert sm2 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } @@ -1122,7 +1128,9 @@ static HcfResult EngineConvertSm2PemKey(HcfAsyKeyGeneratorSpi *self, HcfParamsSp if (ret != HCF_SUCCESS) { LOGE("Convert sm2 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; return ret; } @@ -1176,12 +1184,14 @@ static HcfResult CreateAndAssignKeyPair(const HcfAsyKeyGeneratorSpiOpensslSm2Imp if (ecPubKey == NULL) { LOGD("[error] Dup ecKey fail."); HcfObjDestroy(priKey); + priKey = NULL; return HCF_ERR_CRYPTO_OPERATION; } ret = PackSm2PubKey(impl->curveId, ecPubKey, fieldType, &pubKey); if (ret != HCF_SUCCESS) { LOGD("[error] Create sm2 pubKey failed."); HcfObjDestroy(priKey); + priKey = NULL; OpensslEcKeyFree(ecPubKey); return ret; } @@ -1191,7 +1201,9 @@ static HcfResult CreateAndAssignKeyPair(const HcfAsyKeyGeneratorSpiOpensslSm2Imp if (ret != HCF_SUCCESS) { LOGE("Create sm2 keyPair failed."); HcfObjDestroy(pubKey); + pubKey = NULL; HcfObjDestroy(priKey); + priKey = NULL; } *returnObj = (HcfKeyPair *)returnKeyPair; return ret; diff --git a/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c b/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c index 16079ee4ab5d111d920fd76449c810fbb20ed5ea..af635f9d0c62e1b6d7a70354854bdb5e1de22420 100644 --- a/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c +++ b/plugin/openssl_plugin/key/sym_key_generator/src/sym_key_openssl.c @@ -127,6 +127,7 @@ static HcfResult RandomSymmKey(int32_t keyLen, HcfBlob *symmKey) LOGD("[error] RAND_bytes failed!"); HcfPrintOpensslError(); HcfFree(keyMaterial); + keyMaterial = NULL; return HCF_ERR_CRYPTO_OPERATION; } symmKey->data = keyMaterial; @@ -163,11 +164,13 @@ static HcfResult HcfDesSymmKeySpiCreate(int32_t keyLen, SymKeyImpl *symKey) if (ctx == NULL) { LOGE("Failed to create EVP_CIPHER_CTX!"); HcfFree(keyMaterial); + keyMaterial = NULL; return HCF_ERR_CRYPTO_OPERATION; } if (OpensslEvpEncryptInit(ctx, OpensslEvpDesEcb(), NULL, NULL) != HCF_OPENSSL_SUCCESS) { HcfPrintOpensslError(); HcfFree(keyMaterial); + keyMaterial = NULL; EVP_CIPHER_CTX_free(ctx); LOGD("[error] EVP_CipherInit failed!"); return HCF_ERR_CRYPTO_OPERATION; @@ -177,6 +180,7 @@ static HcfResult HcfDesSymmKeySpiCreate(int32_t keyLen, SymKeyImpl *symKey) LOGE("EVP_CIPHER_CTX_ctrl failed to validate DES key!"); EVP_CIPHER_CTX_free(ctx); HcfFree(keyMaterial); + keyMaterial = NULL; return HCF_INVALID_PARAMS; } @@ -272,6 +276,7 @@ static char *GetAlgoName(HcfSymKeyGeneratorSpiOpensslImpl *impl, int keySize) return algoName; clearup: HcfFree(algoName); + algoName = NULL; return NULL; } @@ -313,12 +318,14 @@ static HcfResult GenerateSymmKey(HcfSymKeyGeneratorSpi *self, HcfSymKey **symmKe res = HcfDesSymmKeySpiCreate(impl->attr.keySize / KEY_BIT, returnSymmKey); if (res != HCF_SUCCESS) { HcfFree(returnSymmKey); + returnSymmKey = NULL; return res; } } else { res = HcfSymmKeySpiCreate(impl->attr.keySize / KEY_BIT, returnSymmKey); if (res != HCF_SUCCESS) { HcfFree(returnSymmKey); + returnSymmKey = NULL; return res; } } @@ -376,6 +383,7 @@ static HcfResult ConvertSymmKey(HcfSymKeyGeneratorSpi *self, const HcfBlob *key, HcfResult res = CopySymmKey(key, &returnSymmKey->keyMaterial); if (res != HCF_SUCCESS) { HcfFree(returnSymmKey); + returnSymmKey = NULL; return res; } int keySize = impl->attr.keySize;