From d551f9a8e0e5f605687a2f99713a51a4fba93c32 Mon Sep 17 00:00:00 2001 From: Frank Morgner Date: Mon, 7 Sep 2015 09:53:02 +0200 Subject: [PATCH] avoid registering pkcs11 mechanisms multiple times fixes #349 --- src/pkcs11/framework-pkcs15.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/pkcs11/framework-pkcs15.c b/src/pkcs11/framework-pkcs15.c index 52f5a082..2e6cfe3b 100644 --- a/src/pkcs11/framework-pkcs15.c +++ b/src/pkcs11/framework-pkcs15.c @@ -282,10 +282,15 @@ pkcs15_bind(struct sc_pkcs11_card *p11card, struct sc_app_info *app_info) return sc_to_cryptoki_error(rc, NULL); } - ck_rv = register_mechanisms(p11card); - if (ck_rv != CKR_OK) { - sc_log(context, "cannot register mechanisms; CKR 0x%X", ck_rv); - return ck_rv; + /* Mechanisms are registered globally per card. Checking + * p11card->nmechanisms avoids registering the same mechanisms twice for a + * card with multiple slots. */ + if (!p11card->nmechanisms) { + ck_rv = register_mechanisms(p11card); + if (ck_rv != CKR_OK) { + sc_log(context, "cannot register mechanisms; CKR 0x%X", ck_rv); + return ck_rv; + } } return CKR_OK;