diff --git a/gck-rpc-module.c b/gck-rpc-module.c
index 88313a10ae8078792acda06e3ab9abe64c98cc71..74a3064b052d9cd7c395d31951cdf7721af9959a 100644
--- a/gck-rpc-module.c
+++ b/gck-rpc-module.c
@@ -1426,6 +1426,8 @@ static CK_RV
 rpc_C_InitToken(CK_SLOT_ID id, CK_UTF8CHAR_PTR pin, CK_ULONG pin_len,
 		CK_UTF8CHAR_PTR label)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_InitToken);
 	IN_ULONG(id);
 	IN_BYTE_ARRAY(pin, pin_len);
@@ -1466,6 +1468,8 @@ rpc_C_OpenSession(CK_SLOT_ID id, CK_FLAGS flags, CK_VOID_PTR user_data,
 
 static CK_RV rpc_C_CloseSession(CK_SESSION_HANDLE session)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_CloseSession);
 	IN_ULONG(session);
 	PROCESS_CALL;
@@ -1474,6 +1478,8 @@ static CK_RV rpc_C_CloseSession(CK_SESSION_HANDLE session)
 
 static CK_RV rpc_C_CloseAllSessions(CK_SLOT_ID id)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_CloseAllSessions);
 	IN_ULONG(id);
 	PROCESS_CALL;
@@ -1482,6 +1488,8 @@ static CK_RV rpc_C_CloseAllSessions(CK_SLOT_ID id)
 
 static CK_RV rpc_C_GetFunctionStatus(CK_SESSION_HANDLE session)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_GetFunctionStatus);
 	IN_ULONG(session);
 	PROCESS_CALL;
@@ -1490,6 +1498,8 @@ static CK_RV rpc_C_GetFunctionStatus(CK_SESSION_HANDLE session)
 
 static CK_RV rpc_C_CancelFunction(CK_SESSION_HANDLE session)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_CancelFunction);
 	IN_ULONG(session);
 	PROCESS_CALL;
@@ -1512,6 +1522,8 @@ rpc_C_GetSessionInfo(CK_SESSION_HANDLE session, CK_SESSION_INFO_PTR info)
 static CK_RV
 rpc_C_InitPIN(CK_SESSION_HANDLE session, CK_UTF8CHAR_PTR pin, CK_ULONG pin_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_InitPIN);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(pin, pin_len);
@@ -1524,6 +1536,8 @@ rpc_C_SetPIN(CK_SESSION_HANDLE session, CK_UTF8CHAR_PTR old_pin,
 	     CK_ULONG old_pin_len, CK_UTF8CHAR_PTR new_pin,
 	     CK_ULONG new_pin_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_SetPIN);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(old_pin, old_pin_len);
@@ -1537,6 +1551,7 @@ rpc_C_GetOperationState(CK_SESSION_HANDLE session, CK_BYTE_PTR operation_state,
 			CK_ULONG_PTR operation_state_len)
 {
 	return_val_if_fail(operation_state_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_GetOperationState);
 	IN_ULONG(session);
@@ -1552,6 +1567,8 @@ rpc_C_SetOperationState(CK_SESSION_HANDLE session, CK_BYTE_PTR operation_state,
 			CK_OBJECT_HANDLE encryption_key,
 			CK_OBJECT_HANDLE authentication_key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_SetOperationState);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(operation_state, operation_state_len);
@@ -1565,6 +1582,8 @@ static CK_RV
 rpc_C_Login(CK_SESSION_HANDLE session, CK_USER_TYPE user_type,
 	    CK_UTF8CHAR_PTR pin, CK_ULONG pin_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_Login);
 	IN_ULONG(session);
 	IN_ULONG(user_type);
@@ -1575,6 +1594,8 @@ rpc_C_Login(CK_SESSION_HANDLE session, CK_USER_TYPE user_type,
 
 static CK_RV rpc_C_Logout(CK_SESSION_HANDLE session)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_Logout);
 	IN_ULONG(session);
 	PROCESS_CALL;
@@ -1603,6 +1624,7 @@ rpc_C_CopyObject(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object,
 		 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(new_object, CKR_ARGUMENTS_BAD);
 
 	BEGIN_CALL(C_CopyObject);
@@ -1617,6 +1639,8 @@ rpc_C_CopyObject(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object,
 static CK_RV
 rpc_C_DestroyObject(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_DestroyObject);
 	IN_ULONG(session);
 	IN_ULONG(object);
@@ -1628,6 +1652,7 @@ static CK_RV
 rpc_C_GetObjectSize(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE object,
 		    CK_ULONG_PTR size)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 	return_val_if_fail(size, CKR_ARGUMENTS_BAD);
 
 	BEGIN_CALL(C_GetObjectSize);
@@ -1658,6 +1683,7 @@ static CK_RV
 rpc_C_SetAttributeValue(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);
 	BEGIN_CALL(C_SetAttributeValue);
 	IN_ULONG(session);
 	IN_ULONG(object);
@@ -1670,6 +1696,8 @@ static CK_RV
 rpc_C_FindObjectsInit(CK_SESSION_HANDLE session, CK_ATTRIBUTE_PTR template,
 		      CK_ULONG count)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_FindObjectsInit);
 	IN_ULONG(session);
 	IN_ATTRIBUTE_ARRAY(template, count);
@@ -1706,6 +1734,8 @@ static CK_RV
 rpc_C_EncryptInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		  CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_EncryptInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1744,6 +1774,7 @@ rpc_C_EncryptUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 		    CK_ULONG_PTR encrypted_part_len)
 {
 	return_val_if_fail(encrypted_part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_EncryptUpdate);
 	IN_ULONG(session);
@@ -1759,6 +1790,7 @@ rpc_C_EncryptFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR last_part,
 		   CK_ULONG_PTR last_part_len)
 {
 	return_val_if_fail(last_part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_EncryptFinal);
 	IN_ULONG(session);
@@ -1772,6 +1804,8 @@ static CK_RV
 rpc_C_DecryptInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		  CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_DecryptInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1785,6 +1819,7 @@ rpc_C_Decrypt(CK_SESSION_HANDLE session, CK_BYTE_PTR enc_data,
 	      CK_ULONG enc_data_len, CK_BYTE_PTR data, CK_ULONG_PTR data_len)
 {
 	return_val_if_fail(data_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_Decrypt);
 	IN_ULONG(session);
@@ -1801,6 +1836,7 @@ rpc_C_DecryptUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR enc_part,
 		    CK_ULONG_PTR part_len)
 {
 	return_val_if_fail(part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DecryptUpdate);
 	IN_ULONG(session);
@@ -1816,6 +1852,7 @@ rpc_C_DecryptFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR last_part,
 		   CK_ULONG_PTR last_part_len)
 {
 	return_val_if_fail(last_part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DecryptFinal);
 	IN_ULONG(session);
@@ -1828,6 +1865,7 @@ rpc_C_DecryptFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR last_part,
 static CK_RV
 rpc_C_DigestInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 	BEGIN_CALL(C_DigestInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1840,6 +1878,7 @@ rpc_C_Digest(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len,
 	     CK_BYTE_PTR digest, CK_ULONG_PTR digest_len)
 {
 	return_val_if_fail(digest_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_Digest);
 	IN_ULONG(session);
@@ -1854,6 +1893,8 @@ static CK_RV
 rpc_C_DigestUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 		   CK_ULONG part_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_DigestUpdate);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(part, part_len);
@@ -1863,6 +1904,8 @@ rpc_C_DigestUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 
 static CK_RV rpc_C_DigestKey(CK_SESSION_HANDLE session, CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_DigestKey);
 	IN_ULONG(session);
 	IN_ULONG(key);
@@ -1875,6 +1918,7 @@ rpc_C_DigestFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR digest,
 		  CK_ULONG_PTR digest_len)
 {
 	return_val_if_fail(digest_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DigestFinal);
 	IN_ULONG(session);
@@ -1888,6 +1932,7 @@ static CK_RV
 rpc_C_SignInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 	       CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 	BEGIN_CALL(C_SignInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1901,6 +1946,7 @@ rpc_C_Sign(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len,
 	   CK_BYTE_PTR signature, CK_ULONG_PTR signature_len)
 {
 	return_val_if_fail(signature_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_Sign);
 	IN_ULONG(session);
@@ -1914,6 +1960,7 @@ rpc_C_Sign(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len,
 static CK_RV
 rpc_C_SignUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part, CK_ULONG part_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 	return_val_if_fail(part_len, CKR_ARGUMENTS_BAD);
 
 	BEGIN_CALL(C_SignUpdate);
@@ -1928,6 +1975,7 @@ rpc_C_SignFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR signature,
 		CK_ULONG_PTR signature_len)
 {
 	return_val_if_fail(signature_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_SignFinal);
 	IN_ULONG(session);
@@ -1941,6 +1989,8 @@ static CK_RV
 rpc_C_SignRecoverInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		      CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_SignRecoverInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1955,6 +2005,7 @@ rpc_C_SignRecover(CK_SESSION_HANDLE session, CK_BYTE_PTR data,
 		  CK_ULONG_PTR signature_len)
 {
 	return_val_if_fail(signature_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_SignRecover);
 	IN_ULONG(session);
@@ -1969,6 +2020,8 @@ static CK_RV
 rpc_C_VerifyInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		 CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_VerifyInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -1981,6 +2034,8 @@ static CK_RV
 rpc_C_Verify(CK_SESSION_HANDLE session, CK_BYTE_PTR data, CK_ULONG data_len,
 	     CK_BYTE_PTR signature, CK_ULONG signature_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_Verify);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(data, data_len);
@@ -1993,6 +2048,8 @@ static CK_RV
 rpc_C_VerifyUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 		   CK_ULONG part_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_VerifyUpdate);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(part, part_len);
@@ -2004,6 +2061,8 @@ static CK_RV
 rpc_C_VerifyFinal(CK_SESSION_HANDLE session, CK_BYTE_PTR signature,
 		  CK_ULONG signature_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_VerifyFinal);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(signature, signature_len);
@@ -2015,6 +2074,8 @@ static CK_RV
 rpc_C_VerifyRecoverInit(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 			CK_OBJECT_HANDLE key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_VerifyRecoverInit);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -2029,6 +2090,7 @@ rpc_C_VerifyRecover(CK_SESSION_HANDLE session, CK_BYTE_PTR signature,
 		    CK_ULONG_PTR data_len)
 {
 	return_val_if_fail(data_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_VerifyRecover);
 	IN_ULONG(session);
@@ -2045,6 +2107,7 @@ rpc_C_DigestEncryptUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 			  CK_ULONG_PTR enc_part_len)
 {
 	return_val_if_fail(enc_part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DigestEncryptUpdate);
 	IN_ULONG(session);
@@ -2061,6 +2124,7 @@ rpc_C_DecryptDigestUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR enc_part,
 			  CK_ULONG_PTR part_len)
 {
 	return_val_if_fail(part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DecryptDigestUpdate);
 	IN_ULONG(session);
@@ -2077,6 +2141,7 @@ rpc_C_SignEncryptUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR part,
 			CK_ULONG_PTR enc_part_len)
 {
 	return_val_if_fail(enc_part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_SignEncryptUpdate);
 	IN_ULONG(session);
@@ -2093,6 +2158,7 @@ rpc_C_DecryptVerifyUpdate(CK_SESSION_HANDLE session, CK_BYTE_PTR enc_part,
 			  CK_ULONG_PTR part_len)
 {
 	return_val_if_fail(part_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_DecryptVerifyUpdate);
 	IN_ULONG(session);
@@ -2108,6 +2174,8 @@ rpc_C_GenerateKey(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		  CK_ATTRIBUTE_PTR template, CK_ULONG count,
 		  CK_OBJECT_HANDLE_PTR key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_GenerateKey);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -2150,6 +2218,7 @@ rpc_C_WrapKey(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 	      CK_BYTE_PTR wrapped_key, CK_ULONG_PTR wrapped_key_len)
 {
 	return_val_if_fail(wrapped_key_len, CKR_ARGUMENTS_BAD);
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
 
 	BEGIN_CALL(C_WrapKey);
 	IN_ULONG(session);
@@ -2168,6 +2237,8 @@ rpc_C_UnwrapKey(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		CK_ULONG wrapped_key_len, CK_ATTRIBUTE_PTR template,
 		CK_ULONG count, CK_OBJECT_HANDLE_PTR key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_UnwrapKey);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -2184,6 +2255,8 @@ rpc_C_DeriveKey(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 		CK_OBJECT_HANDLE base_key, CK_ATTRIBUTE_PTR template,
 		CK_ULONG count, CK_OBJECT_HANDLE_PTR key)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_DeriveKey);
 	IN_ULONG(session);
 	IN_MECHANISM(mechanism);
@@ -2197,6 +2270,8 @@ rpc_C_DeriveKey(CK_SESSION_HANDLE session, CK_MECHANISM_PTR mechanism,
 static CK_RV
 rpc_C_SeedRandom(CK_SESSION_HANDLE session, CK_BYTE_PTR seed, CK_ULONG seed_len)
 {
+	return_val_if_fail(pkcs11_initialized, CKR_CRYPTOKI_NOT_INITIALIZED);
+
 	BEGIN_CALL(C_SeedRandom);
 	IN_ULONG(session);
 	IN_BYTE_ARRAY(seed, seed_len);