more parameter checks + fix in previous checks

git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@917 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
sth 2003-02-19 21:10:39 +00:00
parent 958658102d
commit b75ea0a0b2
2 changed files with 40 additions and 16 deletions

View File

@ -95,8 +95,10 @@ CK_RV C_GetInfo(CK_INFO_PTR pInfo)
if (rv != CKR_OK)
return rv;
if (pInfo == NULL_PTR)
return CKR_ARGUMENTS_BAD;
if (pInfo == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
debug(context, "Cryptoki info query\n");
@ -112,7 +114,7 @@ CK_RV C_GetInfo(CK_INFO_PTR pInfo)
pInfo->libraryVersion.major = 0;
pInfo->libraryVersion.minor = 2;
sc_pkcs11_unlock();
out: sc_pkcs11_unlock();
return CKR_OK;
}
@ -138,8 +140,10 @@ CK_RV C_GetSlotList(CK_BBOOL tokenPresent, /* only slots with token prese
if (rv != CKR_OK)
return rv;
if (pulCount == NULL_PTR)
return CKR_ARGUMENTS_BAD;
if (pulCount == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
debug(context, "Getting slot listing\n");
card_detect_all();
@ -185,8 +189,10 @@ CK_RV C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
if (rv != CKR_OK)
return rv;
if (pInfo == NULL_PTR)
return CKR_ARGUMENTS_BAD;
if (pInfo == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
debug(context, "Getting info about slot %d\n", slotID);
@ -199,7 +205,7 @@ CK_RV C_GetSlotInfo(CK_SLOT_ID slotID, CK_SLOT_INFO_PTR pInfo)
if (rv == CKR_OK)
memcpy(pInfo, &slot->slot_info, sizeof(CK_SLOT_INFO));
sc_pkcs11_unlock();
out: sc_pkcs11_unlock();
return rv;
}
@ -212,8 +218,10 @@ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
if (rv != CKR_OK)
return rv;
if (pInfo == NULL_PTR)
return CKR_ARGUMENTS_BAD;
if (pInfo == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
debug(context, "Getting info about token in slot %d\n", slotID);
@ -221,7 +229,7 @@ CK_RV C_GetTokenInfo(CK_SLOT_ID slotID, CK_TOKEN_INFO_PTR pInfo)
if (rv == CKR_OK)
memcpy(pInfo, &slot->token_info, sizeof(CK_TOKEN_INFO));
sc_pkcs11_unlock();
out: sc_pkcs11_unlock();
return rv;
}
@ -255,14 +263,15 @@ CK_RV C_GetMechanismInfo(CK_SLOT_ID slotID,
if (rv != CKR_OK)
return rv;
if (pInfo == NULL_PTR)
return CKR_ARGUMENTS_BAD;
if (pInfo == NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
rv = slot_get_token(slotID, &slot);
if (rv == CKR_OK)
rv = sc_pkcs11_get_mechanism_info(slot->card, type, pInfo);
sc_pkcs11_unlock();
out: sc_pkcs11_unlock();
return rv;
}
@ -321,6 +330,11 @@ CK_RV C_WaitForSlotEvent(CK_FLAGS flags, /* blocking/nonblocking flag */
if (rv != CKR_OK)
return rv;
if (pReserved != NULL_PTR) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
mask = SC_EVENT_CARD_INSERTED|SC_EVENT_CARD_REMOVED;
if ((rv = slot_find_changed(pSlot, mask)) == CKR_OK

View File

@ -44,6 +44,11 @@ CK_RV C_OpenSession(CK_SLOT_ID slotID, /* the slot's ID */
goto out;
}
if (flags & ~(CKF_SERIAL_SESSION | CKF_RW_SESSION) != 0) {
rv = CKR_ARGUMENTS_BAD;
goto out;
}
rv = slot_get_token(slotID, &slot);
if (rv != CKR_OK)
goto out;
@ -124,15 +129,20 @@ CK_RV sc_pkcs11_close_all_sessions(CK_SLOT_ID slotID)
CK_RV C_CloseAllSessions(CK_SLOT_ID slotID) /* the token's slot */
{
struct sc_pkcs11_slot *slot;
int rv;
rv = sc_pkcs11_lock();
if (rv != CKR_OK)
return rv;
rv = slot_get_token(slotID, &slot);
if (rv != CKR_OK)
goto out;
rv = sc_pkcs11_close_all_sessions(slotID);
sc_pkcs11_unlock();
out: sc_pkcs11_unlock();
return rv;
}