From eda17649f8bd3b8ce7bfc00a3c11cbcae63c845d Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 4 Oct 2016 09:01:13 +0900 Subject: agent, dirmngr, scd: npth_init must be after fork. * agent/gpg-agent.c (thread_init_once, initialize_modules): New. (main): Make sure no daemonizing-fork call after npth_init, and no npth calls before npth_init, with care of npth calls by assuan hooks. * dirmngr/dirmngr.c (thread_init): New. (main): Make sure npth_init must not be called before daemonizing fork. * scd/scdaemon.c (main): Likewise. -- It is simply the best for nPth not to allow the daemonizing fork after npth_init, because semantics and implementations of forked child process in a threaded application is a difficult corner case. GnuPG-bug-id: 1779 Signed-off-by: NIIBE Yutaka --- scd/scdaemon.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'scd/scdaemon.c') diff --git a/scd/scdaemon.c b/scd/scdaemon.c index bf54d95c0..3571e6614 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -422,8 +422,6 @@ main (int argc, char **argv ) i18n_init (); init_common_subsystems (&argc, &argv); - npth_init (); - ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free); malloc_hooks.malloc = gcry_malloc; @@ -724,6 +722,8 @@ main (int argc, char **argv ) } #endif + npth_init (); + /* If --debug-allow-core-dump has been given we also need to switch the working directory to a place where we can actually write. */ @@ -861,6 +861,8 @@ main (int argc, char **argv ) /* This is the child. */ + npth_init (); + /* Detach from tty and put process into a new session. */ if (!nodetach ) { -- cgit v1.2.3