diff --git a/gck-rpc-module.c b/gck-rpc-module.c index 94099470dac8a8537ca61ec295bdde827cbc6a5c..76b37d87f29ebc60e7d7c26f41bd0a184661fb67 100644 --- a/gck-rpc-module.c +++ b/gck-rpc-module.c @@ -1448,8 +1448,10 @@ static CK_RV rpc_C_OpenSession(CK_SLOT_ID id, CK_FLAGS flags, CK_VOID_PTR user_data, CK_NOTIFY callback, CK_SESSION_HANDLE_PTR session) { - return_val_if_fail(session, CKR_ARGUMENTS_BAD); return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); + /* It is unnecessarily intrusive to check session here. Leave it to the p11 module. + * return_val_if_fail(session, CKR_ARGUMENTS_BAD); + */ BEGIN_CALL(C_OpenSession); IN_ULONG(id); @@ -1581,6 +1583,8 @@ rpc_C_CreateObject(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR template, CK_ULONG count, CK_OBJECT_HANDLE_PTR new_object) { return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); + return_val_if_fail(session != CK_INVALID_HANDLE, CKR_SESSION_HANDLE_INVALID); + return_val_if_fail(template, CKR_ARGUMENTS_BAD); return_val_if_fail(new_object, CKR_ARGUMENTS_BAD); BEGIN_CALL(C_CreateObject); @@ -1635,6 +1639,9 @@ static CK_RV rpc_C_GetAttributeValue(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object, CK_ATTRIBUTE_PTR template, CK_ULONG count) { + return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); + return_val_if_fail(template, CKR_ARGUMENTS_BAD); + BEGIN_CALL(C_GetAttributeValue); IN_ULONG(session); IN_ULONG(object); @@ -1671,6 +1678,7 @@ static CK_RV rpc_C_FindObjects(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE_PTR objects, CK_ULONG max_count, CK_ULONG_PTR count) { + return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); return_val_if_fail(count, CKR_ARGUMENTS_BAD); BEGIN_CALL(C_FindObjects); @@ -1684,6 +1692,7 @@ rpc_C_FindObjects(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE_PTR objects, static CK_RV rpc_C_FindObjectsFinal(CK_SESSION_HANDLE session) { + return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); BEGIN_CALL(C_FindObjectsFinal); IN_ULONG(session); PROCESS_CALL; @@ -2103,6 +2112,15 @@ rpc_C_GenerateKeyPair(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism, CK_OBJECT_HANDLE_PTR pub_key, CK_OBJECT_HANDLE_PTR priv_key) { + return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); + return_val_if_fail(session != CK_INVALID_HANDLE, CKR_SESSION_HANDLE_INVALID); + return_val_if_fail(mechanism, CKR_ARGUMENTS_BAD); + return_val_if_fail(pub_template, CKR_ARGUMENTS_BAD); + return_val_if_fail(priv_template, CKR_ARGUMENTS_BAD); + return_val_if_fail(priv_template, CKR_ARGUMENTS_BAD); + return_val_if_fail(pub_key, CKR_ARGUMENTS_BAD); + return_val_if_fail(priv_key, CKR_ARGUMENTS_BAD); + BEGIN_CALL(C_GenerateKeyPair); IN_ULONG(session); IN_MECHANISM(mechanism); @@ -2179,6 +2197,8 @@ rpc_C_GenerateRandom(CK_SESSION_HANDLE session, CK_BYTE_PTR random_data, CK_ULONG random_len) { return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED); + return_val_if_fail(random_data, CKR_ARGUMENTS_BAD); + BEGIN_CALL(C_GenerateRandom); IN_ULONG(session); IN_BYTE_BUFFER(random_data, &random_len);