[PATCH] Remove automatic reinitialization of PKCS#11 after fork

Stef Walter stefw at gnome.org
Mon Jan 23 00:09:31 PST 2012


 * First of all one should only call async-signal-safe functions
   from the callbacks of pthread_atfork(), and so we cannot
   reinitialize directly.
 * Some modules use pthread_atfork() to detect forking and setup
   their internal state. If we call into them in our pthread_atfork()
   callback then this is inherently racy.
 * There was danger of endless loops and deadlocks which are caused
   by handlers which fork in their C_Initialize
 * Many processes do fork/exec, reinitializing PKCS#11 for these
   forks is quite resourc intensive when the child process won't use
   PKCS#11 at all.
---
 p11-kit/modules.c |   11 ++---------
 1 files changed, 2 insertions(+), 9 deletions(-)

diff --git a/p11-kit/modules.c b/p11-kit/modules.c
index c0660c7..047a2ca 100644
--- a/p11-kit/modules.c
+++ b/p11-kit/modules.c
@@ -541,21 +541,14 @@ reinitialize_after_fork (void)
 	hashiter iter;
 	Module *mod;
 
-	/* WARNING: This function must be reentrant */
 	_p11_debug ("forked");
 
 	_p11_lock ();
 
 		if (gl.modules) {
 			_p11_hash_iterate (gl.modules, &iter);
-			while (_p11_hash_next (&iter, NULL, (void **)&mod)) {
-				if (mod->initialize_called) {
-					mod->initialize_called = 0;
-
-					/* WARNING: Reentrancy can occur here */
-					initialize_module_unlocked_reentrant (mod);
-				}
-			}
+			while (_p11_hash_next (&iter, NULL, (void **)&mod))
+				mod->initialize_called = 0;
 		}
 
 	_p11_unlock ();
-- 
1.7.7.5


--------------060606060008050906040607--


More information about the p11-glue mailing list