summaryrefslogtreecommitdiff
path: root/usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c')
-rw-r--r--usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c45
1 files changed, 12 insertions, 33 deletions
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c
index d5aae80910..27a3d95a08 100644
--- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c
+++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softObject.c
@@ -21,8 +21,9 @@
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
+ *
+ * Copyright 2020 Joyent, Inc.
*/
-
#include <pthread.h>
#include <stdlib.h>
#include <security/cryptoki.h>
@@ -165,7 +166,7 @@ C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
goto fail;
}
- new_object->session_handle = (CK_SESSION_HANDLE)NULL;
+ new_object->session_handle = CK_INVALID_HANDLE;
/*
* Add the newly created token object to the global
* token object list in the slot struct.
@@ -173,11 +174,13 @@ C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
soft_add_token_object_to_slot(new_object);
OBJ_REFRELE(old_object);
SES_REFRELE(session_p, lock_held);
- *phNewObject = (CK_ULONG)new_object;
+ *phNewObject = set_objecthandle(new_object);
return (CKR_OK);
}
+ *phNewObject = set_objecthandle(new_object);
+
/* Insert new object into this session's object list */
soft_add_object_to_session(new_object, session_p);
@@ -188,9 +191,6 @@ C_CopyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject,
OBJ_REFRELE(old_object);
SES_REFRELE(session_p, lock_held);
- /* set handle of the new object */
- *phNewObject = (CK_ULONG)new_object;
-
return (rv);
fail:
@@ -210,7 +210,7 @@ C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
CK_RV rv;
soft_object_t *object_p;
- soft_session_t *session_p = (soft_session_t *)(hSession);
+ soft_session_t *session_p;
boolean_t lock_held = B_FALSE;
CK_SESSION_HANDLE creating_session;
@@ -218,21 +218,14 @@ C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
if (!softtoken_initialized)
return (CKR_CRYPTOKI_NOT_INITIALIZED);
- /*
- * The reason that we don't call handle2session is because
- * the argument hSession may not be the creating_session of
- * the object to be destroyed, and we want to avoid the lock
- * contention. The handle2session will be called later for
- * the creating_session.
- */
- if ((session_p == NULL) ||
- (session_p->magic_marker != SOFTTOKEN_SESSION_MAGIC)) {
- return (CKR_SESSION_HANDLE_INVALID);
- }
+ rv = handle2session(hSession, &session_p);
+ if (rv != CKR_OK)
+ return (rv);
/* Obtain the object pointer. */
HANDLE2OBJECT_DESTROY(hObject, object_p, rv);
if (rv != CKR_OK) {
+ SES_REFRELE(session_p, lock_held);
return (rv);
}
@@ -247,12 +240,7 @@ C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
*/
rv = soft_pin_expired_check(object_p);
if (rv != CKR_OK) {
- return (rv);
- }
-
- /* Obtain the session pointer just for validity check. */
- rv = handle2session(hSession, &session_p);
- if (rv != CKR_OK) {
+ SES_REFRELE(session_p, lock_held);
return (rv);
}
@@ -287,15 +275,6 @@ C_DestroyObject(CK_SESSION_HANDLE hSession, CK_OBJECT_HANDLE hObject)
}
/*
- * Obtain the session pointer. Also, increment the session
- * reference count.
- */
- rv = handle2session(creating_session, &session_p);
- if (rv != CKR_OK) {
- return (rv);
- }
-
- /*
* Set OBJECT_IS_DELETING flag so any access to this
* object will be rejected.
*/