Fix missing [outbuf] param initialization 42/320342/1
authorKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 13 Nov 2024 13:59:39 +0000 (14:59 +0100)
committerKrzysztof Jackiewicz <k.jackiewicz@samsung.com>
Wed, 13 Nov 2024 14:50:38 +0000 (15:50 +0100)
Change-Id: I1d5b145d6ebe184150e7ed39fe13ef9b0bf902bd

ta/src/cmd_exec.c
ta/src/crypto_asymmetric.c
ta/src/crypto_auth.c
ta/src/crypto_derive.c
ta/src/crypto_digest.c
ta/src/crypto_symmetric.c

index c75f787e1d6666dc8d1b0819063d3914ba892101..25f597769f496fa4fb8e0ff7a7febfa26907edc9 100644 (file)
@@ -907,7 +907,7 @@ static TEE_Result KM_GetSecretValue(KM_BinaryData *secret_id, KM_BinaryData* sec
                        LOG("KM_DecryptKey or KM_OpenKey has failed with=%x. with_secret_pwd=%d", ret, with_secret_pwd);
                        goto clean;
                }
-               size_t out_size_t;
+               size_t out_size_t = output.data_size;
                ret = TEE_GetObjectBufferAttribute(key_handle, TEE_ATTR_SECRET_VALUE,
                                                                        output.data, &out_size_t);
                if (ret != TEE_SUCCESS) {
@@ -3324,7 +3324,7 @@ TEE_Result KM_ExecCmdCipherUpdate(TEE_Param param[4])
        }
 
        // Update Cipher
-       size_t out_size_t;
+       size_t out_size_t = output.data_size;
        ret = TEE_AEUpdate(op, data.data, data.data_size, output.data, &out_size_t);
        if( ret != TEE_SUCCESS) {
                LOG("Failed in TEE_AEUpdate(). ret=%x", ret);
@@ -3360,7 +3360,8 @@ TEE_Result KM_ExecCmdCipherFinalize(TEE_Param param[4])
     uint32_t tag_len_bytes;
        listNode *ctx = NULL;
        KM_BinaryData output = {0, NULL};
-       KM_BinaryData dummy_output = {0, NULL};
+       void* dummy_output = NULL;
+       size_t dummy_output_size_t = 0;
 
        void *in_buffer = param[1].memref.buffer;
        void *out_buffer = param[2].memref.buffer;
@@ -3393,13 +3394,12 @@ TEE_Result KM_ExecCmdCipherFinalize(TEE_Param param[4])
                        ret = TEE_ERROR_BAD_PARAMETERS;
                        goto clean;
                }
-               size_t out_size_t;
                ret = TEE_AEDecryptFinal(op, NULL, 0,
-                                                               dummy_output.data, &out_size_t,
+                                                               dummy_output, &dummy_output_size_t,
                                                                data.data, data.data_size);
-               if (ret == TEE_SUCCESS && out_size_t != 0) {
-                       LOG("The output size of TEE_AEDecryptFinal() should be zero, but not. output_size=%d",
-                                       dummy_output.data_size);
+               if (ret == TEE_SUCCESS && dummy_output_size_t != 0) {
+                       LOG("The output size of TEE_AEDecryptFinal() should be zero, but not. dummy_output_size_t=%zu",
+                               dummy_output_size_t);
                        ret = TEE_ERROR_GENERIC;
                        goto clean;
                }
@@ -3418,16 +3418,10 @@ TEE_Result KM_ExecCmdCipherFinalize(TEE_Param param[4])
                        ret = TEE_ERROR_OUT_OF_MEMORY;
                        goto clean;
                }
-               size_t out_size_t;
-               size_t tag_size_t;
+               size_t tag_size_t = output.data_size;
                ret = TEE_AEEncryptFinal(op, NULL, 0,
-                                                               dummy_output.data, &out_size_t,
+                                                               dummy_output, &dummy_output_size_t,
                                                                output.data, &tag_size_t);
-               if (out_size_t > UINT32_MAX) {
-                       LOG("TEE_AEEncryptFinal returned too big output=%zu.", out_size_t);
-                       ret = TEE_ERROR_GENERIC;
-                       goto clean;
-               }
                if (tag_size_t > UINT32_MAX) {
                        LOG("TEE_AEEncryptFinal returned too big tag=%zu.", tag_size_t);
                        ret = TEE_ERROR_GENERIC;
@@ -3452,8 +3446,8 @@ TEE_Result KM_ExecCmdCipherFinalize(TEE_Param param[4])
 clean:
        // Remove Stored Operation. Operation & Key will be freed too.
        ctxl_delete_node_id(op_id);
-       if (dummy_output.data != NULL)
-               TEE_Free(dummy_output.data);
+       if (dummy_output != NULL)
+               TEE_Free(dummy_output);
        if (output.data != NULL)
                TEE_Free(output.data);
        return ret;
index 88f8589f56bea398cec314fce3383c57243973ee..45aa185c55e259ff628ceb908c38c840eedcaf58 100644 (file)
@@ -30,7 +30,7 @@ TEE_Result KM_AsymmetricEncrypt(TEE_OperationHandle hndl, void *input, uint32_t
 {
        TEE_Result ret = TEE_SUCCESS;
 
-       size_t out_size_t;
+       size_t out_size_t = *output_size;
        ret = TEE_AsymmetricEncrypt(hndl, NULL, 0, input, input_size, output, &out_size_t);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_AsymmetricEncrypt has failed with=%x.", ret);
@@ -51,7 +51,7 @@ TEE_Result KM_AsymmetricDecrypt(TEE_OperationHandle hndl, void *input, uint32_t
 {
        TEE_Result ret = TEE_SUCCESS;
 
-       size_t out_size_t;
+       size_t out_size_t = *output_size;
        ret = TEE_AsymmetricDecrypt(hndl, NULL, 0, input, input_size, output, &out_size_t);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_AsymmetricDecrypt has failed with=%x.", ret);
@@ -74,7 +74,7 @@ TEE_Result KM_AsymmetricSign(TEE_OperationHandle hndl, void *digest, uint32_t di
        void *out;
        uint32_t out_len;
 
-       size_t sig_size_t;
+       size_t sig_size_t = *sig_size;
        ret = TEE_AsymmetricSignDigest(hndl, NULL, 0, digest, digest_size, signature, &sig_size_t);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_AsymmetricSignDigest has failed with=%x.", ret);
index efbe520e5b2e0d956de9cb2b8e87a1ba73815c25..06ea0d6f84b6c1c92ed03ba712bebd719abe2cd6 100644 (file)
@@ -49,8 +49,8 @@ TEE_Result KM_AuthEncrypt(TEE_OperationHandle hndl, void *iv, uint32_t iv_size,
                TEE_AEUpdateAAD(hndl, aad, aad_size);
        }
 
-       size_t out_size_t;
-       size_t tag_size_t;
+       size_t out_size_t = *out_size;
+       size_t tag_size_t = *tag_size;
        ret = TEE_AEEncryptFinal(hndl, data, data_size, out, &out_size_t, tag, &tag_size_t);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_AEEncryptFinal failed with error=%x.", ret);
@@ -95,7 +95,7 @@ TEE_Result KM_AuthDecrypt(TEE_OperationHandle hndl, void *iv, uint32_t iv_size,
                TEE_AEUpdateAAD(hndl, aad, aad_size);
        }
 
-       size_t out_size_t;
+       size_t out_size_t = *out_size;
        ret = TEE_AEDecryptFinal(hndl, data, data_size, out, &out_size_t, tag, tag_size);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_AEDecryptFinal failed with error=%x.", ret);
index 9cf94d9128c96bcf4bd672997562105a91e3c057..e8a20e0a000bd59cd9633023251a747bf0323751 100644 (file)
@@ -42,7 +42,7 @@ TEE_Result KM_DeriveKeyDoHMACIteration(TEE_OperationHandle op,
        TEE_Result ret = TEE_SUCCESS;
 
        TEE_MACInit(op, NULL, 0);
-       size_t out_size_t;
+       size_t out_size_t = *out_size;
        ret = TEE_MACComputeFinal(op, in, in_size, out, &out_size_t);
        if (ret != TEE_SUCCESS) {
                LOG("Failed to compute MAC: %x", ret);
index 45a822914d7ca3b6552e86a1ba20192b0f0c5544..cb915dac7ccacafa99688257872951e6937727d2 100644 (file)
@@ -30,7 +30,7 @@ TEE_Result KM_Digest(TEE_OperationHandle hndl, void *input, uint32_t input_size,
        TEE_Result ret = TEE_SUCCESS;
 
        LOG("Digest");
-       size_t out_size_t;
+       size_t out_size_t = *output_size;
        ret = TEE_DigestDoFinal(hndl, input, input_size, output, &out_size_t);
        if (ret != TEE_SUCCESS) {
                LOG("TEE_DigestDoFinal has failed with=%x.", ret);
index 5ac69e5c50c16e1a166d9d92301158d5d15565f1..2a35f6ef086180dfdb6dcee629799337874d4fe4 100644 (file)
@@ -116,7 +116,7 @@ TEE_Result KM_SymmetricCrypt(TEE_OperationHandle hndl, void *iv, uint32_t iv_siz
        TEE_CipherInit(hndl, iv, iv_size);
 
        LOGD("Cipher do final");
-       size_t out_size_t;
+       size_t out_size_t = *output_size;
        ret = TEE_CipherDoFinal(hndl, input, input_size, output, &out_size_t);
        if (TEE_SUCCESS != ret) {
                LOG("TEE_CipherDoFinal has failed with=%x.", ret);