C_GetSlotList of opensc-pkcs11 returns inconsistent results on Rutokens depending on args
Les mainteneurs répondent en général sous 2 jours
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 25/100
Piste de recherche
Start by reading the PKCS#11 implementations of C_GetSlotList and C_GetSlotInfo, then reproduce the reported behavior with a Rutoken using the provided program and compare the two debug logs. The issue names no source files or tests. Done means the present-token results are consistent between C_GetSlotList(CK_FALSE, ...) and C_GetSlotList(CK_TRUE, ...), as described in either expected-behavior option.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
opensc version 0.25.1
OS: Ubuntu 24.04.1 LTS
Description
Hi!
I noticed some curious behaviour of opensc-pkcs11 with Rutokens. C_GetSlotList(CK_TRUE, ...) returns empty list of slots, meanwhile C_GetSlotList(CK_FALSE, ...) returns list of with single slot marked as present. Calling C_GetSlotInfo on this slot returns CKR_TOKEN_NOT_RECOGNIZED
How to reproduce
Here is the program I used to check it:
#include <dlfcn.h>
#include <stdio.h>
#include <stdlib.h>
int main(int, char* argv[]) {
CK_RV r;
printf("load lib\n");
void* h =dlopen(argv[1], RTLD_NOW);
if (!h)
return 1;
printf("load funcs\n");
CK_C_GetFunctionList flf= dlsym(h, "C_GetFunctionList");
if (!flf)
return 2;
printf("get funcs\n");
CK_FUNCTION_LIST_PTR fl;
r = flf(&fl);
if (r != CKR_OK)
return 3;
printf("init lib\n");
r = fl->C_Initialize(NULL_PTR);
if (r != CKR_OK)
return 4;
printf("get slots\n");
CK_ULONG sls;
CK_SLOT_ID_PTR sll = NULL_PTR;
r = fl->C_GetSlotList(CK_FALSE, sll, &sls);
if (r != CKR_OK)
return 5;
sll = malloc(sls*sizeof(CK_SLOT_ID));
r = fl->C_GetSlotList(CK_FALSE, sll, &sls);
if (r != CKR_OK)
return 6;
if (sls == 0)
printf("no tokens\n");
for (CK_ULONG i=0; i != sls; ++i) {
CK_SLOT_INFO si;
r = fl->C_GetSlotInfo(sll[i], &si);
if (si.flags & CKF_TOKEN_PRESENT) {
printf("slot has token\n");
CK_TOKEN_INFO ti;
r = fl->C_GetTokenInfo(sll[i], &ti);
printf("get info res: %lu\n", r);
} else {
printf("slot has no token\n");
}
}
if (sll) {
free(sll);
}
r = fl->C_Finalize(NULL_PTR);
dlclose(h);
}
Output:
load lib
load funcs
get funcs
init lib
get slots
slot has token
get info res: 225
If replace it to C_GetSlotList(CK_FALSE, ...) to C_GetSlotList(CK_TRUE, ...) I see no tokens in output
Logs:
C_GetSlotList(CK_FALSE, ...) log: opensc-debug-with-C_GetSlotList-false.txt
C_GetSlotList(CK_TRUE, ...) log: opensc-debug-with-C_GetSlotList-true.txt
This issue connected with this one
Expected behaviour
So, I think a correct way to make showing of present tokens consistent. It's could be achieved two ways:
- tokens, marked as present and returned by
C_GetSlotList(CK_FALSE, ...), should also be returned byC_GetSlotList(TRUE, ...) - tokens, not returned by
C_GetSlotList(TRUE, ...)shouldn't be marked as present byC_GetSlotList(CK_FALSE, ...)
- Langage dominant
- C
- Étoiles
- 3.1k
- Forks
- 858
- Merge moyen
- 3 j 23 h
- PR mergées (30 j)
- 17
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de OpenSC/OpenSC
-
asn1_decode_entry passes NULL to memcpy for zero-length SC_ASN1_ALLOC objects (OCTET STRING / GENERALIZEDTIME)Peut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
OpenSC/OpenSC#3881 · 4 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
card lock not released in error pathPeut-être pris @mvogt1 l’a pris il y a 14 jours. Ouvertebug
Difficulté 2/5 1-3 heures Accessibilité débutants 79/100
Les mainteneurs répondent en général sous 2 jours
-
Commit from 08.10.26 breaks cachingPeut-être pris @mvogt1 l’a pris il y a 14 jours. Ouvertebug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 85/100
Les mainteneurs répondent en général sous 2 jours
-
bug
Difficulté 3/5 1-2 jours Accessibilité débutants 62/100
OpenSC/OpenSC#3893 · 3 commentaires ·
Les mainteneurs répondent en général sous 2 jours
-
Feitian ePass2003 seems to not work on Linux, againPeut-être pris Une pull request liée à cette issue est ouverte ou déjà fusionnée. Ouvertebug
Difficulté 4/5 3-5 jours Accessibilité débutants 18/100
OpenSC/OpenSC#3878 · 10 commentaires ·
Les mainteneurs répondent en général sous 2 jours
Toutes les issues de OpenSC/OpenSC
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
ChefKissInc/Inferno#319 ·
-
llvm-tools
Difficulté 1/5 Moins d'une heure Accessibilité débutants 72/100
llvm/llvm-project#235522 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
priority:medium type:chore
Difficulté 1/5 1-3 heures Accessibilité débutants 84/100
crazy-goat/php-fpm-ng#1041 ·
Les mainteneurs répondent en général sous 1 jour