g10: Block signals in g10_exit.
authorNIIBE Yutaka <gniibe@fsij.org>
Tue, 4 Jun 2019 04:39:46 +0000 (13:39 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Tue, 4 Jun 2019 04:39:46 +0000 (13:39 +0900)
* g10/gpg.c (g10_exit): Block all signals before calling
emergency_cleanup.

--

There is a race condition here which results crash of the process.
When a signal is delivered in emergency_cleanup, it is called again.
This change fixes the problem.

GnuPG-bug-id: 2747
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
g10/gpg.c

index b46d226..1819c3f 100644 (file)
--- a/g10/gpg.c
+++ b/g10/gpg.c
@@ -5231,6 +5231,7 @@ g10_exit( int rc )
   if (opt.debug)
     gcry_control (GCRYCTL_DUMP_SECMEM_STATS );
 
+  gnupg_block_all_signals ();
   emergency_cleanup ();
 
   rc = rc? rc : log_get_errorcount(0)? 2 : g10_errors_seen? 1 : 0;