C_GetSlotList of opensc-pkcs11 returns inconsistent results on Rutokens depending on args
Los mantenedores suelen responder en 2 días
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 25/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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, ...)
- Lenguaje dominante
- C
- Estrellas
- 3.1k
- Forks
- 858
- Merge medio
- 4 d 4 h
- PR fusionados (30 d)
- 16
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de OpenSC/OpenSC
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
OpenSC/OpenSC#3881 · 2 comentarios ·
Los mantenedores suelen responder en 2 días
-
card lock not released in error pathPosiblemente ocupada @mvogt1 la tomó hace 8 días. Abiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
Los mantenedores suelen responder en 2 días
-
Commit from 08.10.26 breaks cachingPosiblemente ocupada @mvogt1 la tomó hace 8 días. Abiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 85/100
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 18/100
OpenSC/OpenSC#3878 · 8 comentarios ·
Los mantenedores suelen responder en 2 días
-
enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 66/100
OpenSC/OpenSC#3864 · 1 comentario ·
Los mantenedores suelen responder en 2 días
Todos los issues de OpenSC/OpenSC
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
FujiNetWIFI/fujinet-firmware#2079 ·
Los mantenedores suelen responder en 1 día
-
Missing options in yara man pageAbiertobug
Dificultad 1/5 Menos de una hora Aptitud para principiantes 84/100
VirusTotal/yara#2255 ·
-
Add SupportsTransactions flagAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 66/100
-
state:needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
zed-industries/zed#65836 · 1 reacción ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
neutralinojs/neutralinojs#1861 ·
Los mantenedores suelen responder en 1 día