summaryrefslogtreecommitdiff
path: root/security/nss
diff options
context:
space:
mode:
authornicolson%netscape.com <devnull@localhost>2001-06-25 21:48:07 +0000
committernicolson%netscape.com <devnull@localhost>2001-06-25 21:48:07 +0000
commit0c03fae7d01c9af99b0beac5d4120f7d30249c5b (patch)
tree54c3286c22dc1709c6e089cf6f50f03bbb975945 /security/nss
parentf158b67a35737c6dddd00c56918597721d1a5128 (diff)
downloadnss-hg-0c03fae7d01c9af99b0beac5d4120f7d30249c5b.tar.gz
Fix 87670: memory corruption in NSC_SignInit.
Diffstat (limited to 'security/nss')
-rw-r--r--security/nss/lib/softoken/pkcs11c.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/security/nss/lib/softoken/pkcs11c.c b/security/nss/lib/softoken/pkcs11c.c
index 8979b6dac..c96c8073f 100644
--- a/security/nss/lib/softoken/pkcs11c.c
+++ b/security/nss/lib/softoken/pkcs11c.c
@@ -2003,12 +2003,13 @@ nsc_DSA_Verify_Stub(void *ctx, CK_BYTE_PTR pSignature, CK_ULONG ulSignatureLen,
CK_BYTE_PTR pData, CK_ULONG ulDataLen)
{
SECItem signature, digest;
+ SECKEYLowPublicKey *key = (SECKEYLowPublicKey *)ctx;
signature.data = pSignature;
signature.len = ulSignatureLen;
digest.data = pData;
digest.len = ulDataLen;
- return DSA_VerifyDigest((DSAPublicKey *)ctx, &signature, &digest);
+ return DSA_VerifyDigest(&(key->u.dsa), &signature, &digest);
}
static SECStatus
@@ -2018,11 +2019,12 @@ nsc_DSA_Sign_Stub(void *ctx, CK_BYTE_PTR pSignature,
{
SECItem signature = { 0 }, digest;
SECStatus rv;
+ SECKEYLowPrivateKey *key = (SECKEYLowPrivateKey *)ctx;
(void)SECITEM_AllocItem(NULL, &signature, maxulSignatureLen);
digest.data = pData;
digest.len = ulDataLen;
- rv = DSA_SignDigest((DSAPrivateKey *)ctx, &signature, &digest);
+ rv = DSA_SignDigest(&(key->u.dsa), &signature, &digest);
*ulSignatureLen = signature.len;
PORT_Memcpy(pSignature, signature.data, signature.len);
SECITEM_FreeItem(&signature, PR_FALSE);
@@ -2171,11 +2173,11 @@ finish_rsa:
crv = CKR_HOST_MEMORY;
break;
}
- context->cipherInfo = &(privKey->u.dsa);
+ context->cipherInfo = privKey;
context->update = (PK11Cipher) nsc_DSA_Sign_Stub;
- context->destroy = pk11_Null;
+ context->destroy = (privKey == key->objectInfo) ?
+ (PK11Destroy) pk11_Null:(PK11Destroy)pk11_FreePrivKey;
- if (key->objectInfo != privKey) SECKEY_LowDestroyPrivateKey(privKey);
break;
case CKM_MD2_HMAC_GENERAL:
crv = pk11_doHMACInit(context,SEC_OID_MD2,key,
@@ -2577,7 +2579,7 @@ finish_rsa:
crv = CKR_HOST_MEMORY;
break;
}
- context->cipherInfo = &(pubKey->u.dsa);
+ context->cipherInfo = pubKey;
context->verify = (PK11Verify) nsc_DSA_Verify_Stub;
context->destroy = pk11_Null;
break;