X-Git-Url: https://git.saurik.com/apple/security.git/blobdiff_plain/e3d460c9de4426da6c630c3ae3f46173a99f82d8..0d4552ce43ff8bf2e8666a9c5c44c3590eb117a8:/OSX/libsecurity_cdsa_plugin/lib/CSPsession.cpp?ds=sidebyside diff --git a/OSX/libsecurity_cdsa_plugin/lib/CSPsession.cpp b/OSX/libsecurity_cdsa_plugin/lib/CSPsession.cpp index f2b674ff..c138fb5a 100644 --- a/OSX/libsecurity_cdsa_plugin/lib/CSPsession.cpp +++ b/OSX/libsecurity_cdsa_plugin/lib/CSPsession.cpp @@ -742,7 +742,11 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, // make data to be encrypted unsigned bytesInKey = encryptingKey->KeyHeader.LogicalKeySizeInBits / 8; - u_int8_t buffer[bytesInKey]; + u_int8_t *buffer = (u_int8_t*)malloc(bytesInKey); + if (buffer == NULL) { + CssmError::throwMe(CSSMERR_CSSM_MEMORY_ERROR); + } + unsigned i; for (i = 0; i < bytesInKey; ++i) @@ -759,6 +763,7 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, CSSM_RETURN result = CSSM_CSP_CreateAsymmetricContext(moduleHandle, encryptingKey->KeyHeader.AlgorithmId, &nullCreds, encryptingKey, CSSM_PADDING_NONE, &encryptHandle); if (result != CSSM_OK) { + free(buffer); CssmError::throwMe(result); } @@ -769,6 +774,7 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, result = CSSM_QuerySize(encryptHandle, CSSM_TRUE, 1, &qsData); if (result == CSSMERR_CSP_INVALID_ALGORITHM) { + free(buffer); return; } @@ -780,6 +786,7 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, result = CSSM_EncryptData(encryptHandle, &clearBuf, 1, &cipherBuf, 1, &bytesEncrypted, &remData); if (result != CSSM_OK) { + free(buffer); CssmError::throwMe(result); } @@ -803,12 +810,14 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, if (result != CSSM_OK) { + free(buffer); CssmError::throwMe(result); } result = CSSM_DecryptData(decryptHandle, &cipherBuf, 1, &decryptedBuf, 1, &bytesEncrypted, &remData); if (result != CSSM_OK) { + free(buffer); CssmError::throwMe(result); } @@ -826,6 +835,8 @@ void CSPFullPluginSession::GenerateKeyPair(CSSM_CC_HANDLE ccHandle, { free(remData.Data); } + + free(buffer); } void CSPFullPluginSession::ObtainPrivateKeyFromPublicKey(const CssmKey &PublicKey, @@ -1045,7 +1056,7 @@ KeyPool::add(ReferencedKey &referencedKey) // never add a key that is already in mKeyMap assert(inserted); - secdebug("SecAccessReference", "added a referenced key %p for key reference %d", &referencedKey, referencedKey.keyReference()); + secinfo("SecAccessReference", "added a referenced key %p for key reference %ld", &referencedKey, referencedKey.keyReference()); } ReferencedKey & @@ -1062,7 +1073,7 @@ KeyPool::findKeyReference(ReferencedKey::KeyReference keyReference) const if (it == mKeyMap.end()) CssmError::throwMe(CSSMERR_CSP_INVALID_KEY_REFERENCE); - secdebug("SecAccessReference", "found a referenced key %p for key reference %d [%d]", it->second, keyReference, it->second->keyReference()); + secinfo("SecAccessReference", "found a referenced key %p for key reference %ld [%ld]", it->second, keyReference, it->second->keyReference()); return *it->second; }