[pkg-opensc-commit] [engine-pkcs11] 01/07: Prevent double-locking CRYPTO_LOCK_ENGINE

Eric Dorland eric at moszumanska.debian.org
Sun May 29 02:19:11 UTC 2016


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository engine-pkcs11.

commit 94800f571f7e40e6ee23a81b77ac89ae8d1523e3
Author: Michał Trojnara <Michal.Trojnara at stunnel.org>
Date:   Mon Mar 28 15:49:13 2016 +0200

    Prevent double-locking CRYPTO_LOCK_ENGINE
---
 src/engine_pkcs11.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/engine_pkcs11.c b/src/engine_pkcs11.c
index 6c7cca6..ff30254 100644
--- a/src/engine_pkcs11.c
+++ b/src/engine_pkcs11.c
@@ -181,6 +181,7 @@ int pkcs11_finish(ENGINE * engine)
 int pkcs11_init(ENGINE * engine)
 {
 	char *mod = module;
+	int rc;
 
 	/*
 	 * TODO: Save the libp11 context with:
@@ -197,8 +198,14 @@ int pkcs11_init(ENGINE * engine)
 		fprintf(stderr, "Initializing engine\n");
 	}
 	ctx = PKCS11_CTX_new();
-        PKCS11_CTX_init_args(ctx, init_args);
-	if (PKCS11_CTX_load(ctx, mod) < 0) {
+	PKCS11_CTX_init_args(ctx, init_args);
+
+	/* Temporarily unlock non-recursive CRYPTO_LOCK_ENGINE to prevent
+	 * double-locking in C_GetSlotList() while loading p11-kit */
+	CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE);
+	rc = PKCS11_CTX_load(ctx, mod);
+	CRYPTO_w_lock(CRYPTO_LOCK_ENGINE);
+	if (rc < 0) {
 		fprintf(stderr, "Unable to load module %s\n", mod);
 		return 0;
 	}

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/engine-pkcs11.git



More information about the pkg-opensc-commit mailing list