ecf8b1
From fe198e8b3837aa4c960e75d0e2a41020ad4dc9f9 Mon Sep 17 00:00:00 2001
ecf8b1
From: Jakub Jelen <jjelen@redhat.com>
ecf8b1
Date: Fri, 24 Sep 2021 13:33:26 +0200
ecf8b1
Subject: [PATCH 1/9] pkcs11: Unbreak detection of unenrolled cards
ecf8b1
ecf8b1
This was broken since 58b03b68, which tried to sanitize some states,
ecf8b1
but caused C_GetTokenInfo returning CKR_TOKEN_NOT_RECOGNIZED instead
ecf8b1
of empty token information.
ecf8b1
ecf8b1
Note, that this has effect only if the configuration options
ecf8b1
enable_default_driver and pkcs11_enable_InitToken are turned on.
ecf8b1
Otherwise it still returns CKR_TOKEN_NOT_RECOGNIZED.
ecf8b1
---
ecf8b1
 src/pkcs11/framework-pkcs15.c | 17 +++++++++--------
ecf8b1
 1 file changed, 9 insertions(+), 8 deletions(-)
ecf8b1
ecf8b1
diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c
ecf8b1
index 74fe7b3c49..4205e41739 100644
ecf8b1
--- a/src/pkcs11/framework-pkcs15.c
ecf8b1
+++ b/src/pkcs11/framework-pkcs15.c
ecf8b1
@@ -544,9 +544,7 @@ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
ecf8b1
 {
ecf8b1
 	struct sc_pkcs11_slot *slot;
ecf8b1
 	struct pkcs15_fw_data *fw_data = NULL;
ecf8b1
-	struct sc_pkcs15_card *p15card = NULL;
ecf8b1
 	struct sc_pkcs15_object *auth;
ecf8b1
-	struct sc_pkcs15_auth_info *pin_info;
ecf8b1
 	CK_RV rv;
ecf8b1
 
ecf8b1
 	sc_log(context, "C_GetTokenInfo(%lx)", slotID);
ecf8b1
@@ -578,12 +576,6 @@ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
ecf8b1
 		rv = sc_to_cryptoki_error(SC_ERROR_INTERNAL, "C_GetTokenInfo");
ecf8b1
 		goto out;
ecf8b1
 	}
ecf8b1
-	p15card = fw_data->p15_card;
ecf8b1
-	if (!p15card) {
ecf8b1
-		rv = sc_to_cryptoki_error(SC_ERROR_INVALID_CARD, "C_GetTokenInfo");
ecf8b1
-		goto out;
ecf8b1
-	}
ecf8b1
-
ecf8b1
 	/* User PIN flags are cleared before re-calculation */
ecf8b1
 	slot->token_info.flags &= ~(CKF_USER_PIN_COUNT_LOW|CKF_USER_PIN_FINAL_TRY|CKF_USER_PIN_LOCKED);
ecf8b1
 	auth = slot_data_auth(slot->fw_data);
ecf8b1
@@ -591,8 +583,17 @@ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
ecf8b1
 		"C_GetTokenInfo() auth. object %p, token-info flags 0x%lX", auth,
ecf8b1
 		slot->token_info.flags);
ecf8b1
 	if (auth) {
ecf8b1
+		struct sc_pkcs15_card *p15card = NULL;
ecf8b1
+		struct sc_pkcs15_auth_info *pin_info = NULL;
ecf8b1
+
ecf8b1
 		pin_info = (struct sc_pkcs15_auth_info*) auth->data;
ecf8b1
 
ecf8b1
+		p15card = fw_data->p15_card;
ecf8b1
+		if (!p15card) {
ecf8b1
+			rv = sc_to_cryptoki_error(SC_ERROR_INVALID_CARD, "C_GetTokenInfo");
ecf8b1
+			goto out;
ecf8b1
+		}
ecf8b1
+
ecf8b1
 		sc_pkcs15_get_pin_info(p15card, auth);
ecf8b1
 
ecf8b1
 		if (pin_info->tries_left >= 0) {
ecf8b1