aboutsummaryrefslogtreecommitdiff
path: root/pkcs11.c
diff options
context:
space:
mode:
Diffstat (limited to 'pkcs11.c')
-rw-r--r--pkcs11.c84
1 files changed, 43 insertions, 41 deletions
diff --git a/pkcs11.c b/pkcs11.c
index fef9e0b..4063836 100644
--- a/pkcs11.c
+++ b/pkcs11.c
@@ -461,15 +461,19 @@ static char *cf_pkcs15_keyring(void)
* Slightly higher-level macros for common operations.
*/
-#define mutex_lock_or_fail(_m_) \
- do { \
- CK_RV _rv_ = mutex_lock(_m_); \
- if (_rv_ != CKR_OK) \
- return _rv_; \
+#define mutex_lock_or_return_failure(_m_) \
+ do { \
+ CK_RV _rv = mutex_lock(_m_); \
+ if (_rv != CKR_OK) \
+ return _rv; \
} while (0)
-#define mutex_unlock_with_rv(_rv_, _m_) \
- ((_rv_) == CKR_OK ? mutex_unlock(_m_) : (mutex_unlock(_m_), (_rv_)))
+#define mutex_unlock_return_with_rv(_rv_, _m_) \
+ do { \
+ CK_RV _rv1 = _rv_; \
+ CK_RV _rv2 = mutex_unlock(_m_); \
+ return _rv1 == CKR_OK ? _rv2 : _rv1; \
+ } while (0)
/*
* Mutex implementation using POSIX mutexes.
@@ -2597,7 +2601,7 @@ CK_RV C_Finalize(CK_VOID_PTR pReserved)
if (pReserved != NULL)
return CKR_ARGUMENTS_BAD;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
/*
* Destroy all current sessions.
@@ -2790,7 +2794,7 @@ CK_RV C_OpenSession(CK_SLOT_ID slotID,
p11_session_t *session = NULL;
CK_RV rv;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if (slotID != P11_ONE_AND_ONLY_SLOT)
lose(CKR_SLOT_ID_INVALID);
@@ -2845,13 +2849,11 @@ CK_RV C_CloseSession(CK_SESSION_HANDLE hSession)
{
CK_RV rv;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
- if ((rv = p11_session_delete(hSession)) != CKR_OK)
- goto fail;
+ rv = p11_session_delete(hSession);
- fail:
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_CloseAllSessions(CK_SLOT_ID slotID)
@@ -2859,7 +2861,7 @@ CK_RV C_CloseAllSessions(CK_SLOT_ID slotID)
if (slotID != P11_ONE_AND_ONLY_SLOT)
return CKR_SLOT_ID_INVALID;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
p11_session_delete_all();
@@ -2875,7 +2877,7 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession,
CK_RV rv = CKR_OK;
int crypt_cmd;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if (pPin == NULL)
lose(CKR_ARGUMENTS_BAD);
@@ -2983,7 +2985,7 @@ CK_RV C_Login(CK_SESSION_HANDLE hSession,
assert(p11_session_consistent_login());
fail:
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_Logout(CK_SESSION_HANDLE hSession)
@@ -2992,7 +2994,7 @@ CK_RV C_Logout(CK_SESSION_HANDLE hSession)
CK_RV rv = CKR_OK;
int crypt_cmd;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
/*
* Mind, I don't really know why this function takes a session
@@ -3058,7 +3060,7 @@ CK_RV C_Logout(CK_SESSION_HANDLE hSession)
assert(p11_session_consistent_login());
fail:
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession,
@@ -3080,7 +3082,7 @@ CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession,
sqlite3_int64 id;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
session = p11_session_find(hSession);
@@ -3126,7 +3128,7 @@ CK_RV C_DestroyObject(CK_SESSION_HANDLE hSession,
fail:
sqlite3_finalize(q);
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession,
@@ -3150,7 +3152,7 @@ CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession,
CK_RV rv;
int ret, i;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if (pTemplate == NULL)
lose(CKR_ARGUMENTS_BAD);
@@ -3221,7 +3223,7 @@ CK_RV C_GetAttributeValue(CK_SESSION_HANDLE hSession,
fail:
sqlite3_finalize(q);
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession,
@@ -3263,7 +3265,7 @@ CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession,
CK_RV rv = CKR_OK;
int i, ret;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3362,7 +3364,7 @@ CK_RV C_FindObjectsInit(CK_SESSION_HANDLE hSession,
fail:
sqlite3_finalize(q1);
sqlite3_finalize(q2);
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_FindObjects(CK_SESSION_HANDLE hSession,
@@ -3374,7 +3376,7 @@ CK_RV C_FindObjects(CK_SESSION_HANDLE hSession,
int i, ret = SQLITE_OK;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3415,7 +3417,7 @@ CK_RV C_FindObjects(CK_SESSION_HANDLE hSession,
*pulObjectCount = i;
fail:
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
@@ -3427,7 +3429,7 @@ CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
sqlite3_stmt *q = NULL;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3448,7 +3450,7 @@ CK_RV C_FindObjectsFinal(CK_SESSION_HANDLE hSession)
fail:
sqlite3_finalize(q);
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
@@ -3459,7 +3461,7 @@ CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
unsigned hash_len = 0;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3494,7 +3496,7 @@ CK_RV C_DigestInit(CK_SESSION_HANDLE hSession,
cryptDestroyContext(session->digest_context);
session->digest_context = CRYPT_HANDLE_NONE;
}
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_Digest(CK_SESSION_HANDLE hSession,
@@ -3507,7 +3509,7 @@ CK_RV C_Digest(CK_SESSION_HANDLE hSession,
CK_RV rv = CKR_OK;
int len;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3552,7 +3554,7 @@ CK_RV C_Digest(CK_SESSION_HANDLE hSession,
cryptDestroyContext(session->digest_context);
session->digest_context = CRYPT_HANDLE_NONE;
}
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_SignInit(CK_SESSION_HANDLE hSession,
@@ -3567,7 +3569,7 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession,
int key_algo;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3629,7 +3631,7 @@ CK_RV C_SignInit(CK_SESSION_HANDLE hSession,
session->sign_digest_context = CRYPT_HANDLE_NONE;
}
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_Sign(CK_SESSION_HANDLE hSession,
@@ -3642,7 +3644,7 @@ CK_RV C_Sign(CK_SESSION_HANDLE hSession,
int len, algo;
CK_RV rv;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3785,7 +3787,7 @@ CK_RV C_Sign(CK_SESSION_HANDLE hSession,
session->sign_key_context = CRYPT_HANDLE_NONE;
}
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
/*
@@ -3822,7 +3824,7 @@ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE hSession,
p11_session_t *session;
CK_RV rv;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3846,7 +3848,7 @@ CK_RV C_GenerateKeyPair(CK_SESSION_HANDLE hSession,
}
fail:
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}
CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession,
@@ -3857,7 +3859,7 @@ CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession,
CRYPT_CONTEXT ctx = CRYPT_HANDLE_NONE;
CK_RV rv = CKR_OK;
- mutex_lock_or_fail(p11_global_mutex);
+ mutex_lock_or_return_failure(p11_global_mutex);
if ((session = p11_session_find(hSession)) == NULL)
lose(CKR_SESSION_HANDLE_INVALID);
@@ -3884,7 +3886,7 @@ CK_RV C_GenerateRandom(CK_SESSION_HANDLE hSession,
if (ctx != CRYPT_HANDLE_NONE)
(void) cryptDestroyContext(ctx);
- return mutex_unlock_with_rv(rv, p11_global_mutex);
+ mutex_unlock_return_with_rv(rv, p11_global_mutex);
}