summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorJason King <jason.king@joyent.com>2020-07-09 10:47:18 -0500
committerJason King <jason.king@joyent.com>2020-07-10 14:32:59 -0500
commit4c60ecf710115cd5ae61f6b97dafc7ff963259f4 (patch)
treeb49cd6d1b20c12f2cc766ff7f3f95bba9353acb9 /usr/src/lib
parent4cf53d5010eff4a394b33676d54b1311b8e1012e (diff)
downloadillumos-joyent-4c60ecf710115cd5ae61f6b97dafc7ff963259f4.tar.gz
12942 pkcs11_softtoken pbkdf2 key derivation can crash
Reviewed by: Robert Mustacchi <rm@fingolfin.org> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib')
-rw-r--r--usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeysUtil.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeysUtil.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeysUtil.c
index 67bb1f7a24..42eff40de7 100644
--- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeysUtil.c
+++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softKeysUtil.c
@@ -1228,14 +1228,13 @@ cleanup:
static CK_RV
soft_create_hmac_key(soft_session_t *session_p, CK_BYTE *passwd,
- CK_ULONG passwd_len, CK_OBJECT_HANDLE_PTR phKey)
+ CK_ULONG passwd_len, soft_object_t **keyp)
{
CK_RV rv = CKR_OK;
CK_OBJECT_CLASS keyclass = CKO_SECRET_KEY;
CK_KEY_TYPE keytype = CKK_GENERIC_SECRET;
CK_BBOOL True = TRUE;
CK_ATTRIBUTE keytemplate[4];
- soft_object_t *keyobj;
/*
* We must initialize each template member individually
@@ -1265,13 +1264,10 @@ soft_create_hmac_key(soft_session_t *session_p, CK_BYTE *passwd,
* mechanism parameter structure.
*/
rv = soft_gen_keyobject(keytemplate,
- sizeof (keytemplate)/sizeof (CK_ATTRIBUTE), &keyobj, session_p,
+ sizeof (keytemplate)/sizeof (CK_ATTRIBUTE), keyp, session_p,
CKO_SECRET_KEY, (CK_KEY_TYPE)CKK_GENERIC_SECRET, 0,
SOFT_CREATE_OBJ, B_TRUE);
- if (keyobj != NULL)
- *phKey = keyobj->handle;
-
return (rv);
}
@@ -1285,7 +1281,6 @@ soft_generate_pkcs5_pbkdf2_key(soft_session_t *session_p,
CK_ULONG hLen = SHA1_HASH_SIZE;
CK_ULONG dkLen, i;
CK_ULONG blocks, remainder;
- CK_OBJECT_HANDLE phKey = 0;
soft_object_t *hmac_key = NULL;
CK_BYTE *salt = NULL;
CK_BYTE *keydata = NULL;
@@ -1306,13 +1301,11 @@ soft_generate_pkcs5_pbkdf2_key(soft_session_t *session_p,
* Create a key object to use for HMAC operations.
*/
rv = soft_create_hmac_key(session_p, params->pPassword,
- *params->ulPasswordLen, &phKey);
+ *params->ulPasswordLen, &hmac_key);
if (rv != CKR_OK)
return (rv);
- hmac_key = (soft_object_t *)phKey;
-
/* Step 1. */
dkLen = OBJ_SEC_VALUE_LEN(secret_key); /* length of desired key */