diff options
author | Werner Koch <[email protected]> | 2016-08-03 13:31:27 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2016-08-03 13:31:27 +0000 |
commit | 48a2c93a1886589d1a0e2a4a2173e0e81311200b (patch) | |
tree | 80cee1c6eb19941ab9676482f9eb4984d7360e83 /g10/keyring.c | |
parent | common: New file utilproto.c (diff) | |
download | gnupg-48a2c93a1886589d1a0e2a4a2173e0e81311200b.tar.gz gnupg-48a2c93a1886589d1a0e2a4a2173e0e81311200b.zip |
gpg,gpgsm: Block signals during keyring/keybox update.
* kbx/keybox-util.c (keybox_file_rename): Add arg BLOCK_SIGNALS.
* kbx/keybox-update.c (rename_tmp_file): Block all signals when doing
a double rename.
* g10/keyring.c (rename_tmp_file): Block all signals during the double
rename.
--
This might fix
Debian-bug-id: 831510
Signed-off-by: Werner Koch <[email protected]>
Diffstat (limited to 'g10/keyring.c')
-rw-r--r-- | g10/keyring.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/g10/keyring.c b/g10/keyring.c index 0611b2eb9..aa73290b2 100644 --- a/g10/keyring.c +++ b/g10/keyring.c @@ -1338,6 +1338,7 @@ static int rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname) { int rc = 0; + int block = 0; /* Invalidate close caches. */ if (iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)tmpfname )) @@ -1349,12 +1350,18 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname) iobuf_ioctl (NULL, IOBUF_IOCTL_INVALIDATE_CACHE, 0, (char*)fname ); /* First make a backup file. */ - rc = keybox_file_rename (fname, bakfname); + block = 1; + rc = keybox_file_rename (fname, bakfname, &block); if (rc) goto fail; /* then rename the file */ - rc = keybox_file_rename (tmpfname, fname); + rc = keybox_file_rename (tmpfname, fname, NULL); + if (block) + { + gnupg_unblock_all_signals (); + block = 0; + } if (rc) { register_secured_file (fname); @@ -1379,6 +1386,8 @@ rename_tmp_file (const char *bakfname, const char *tmpfname, const char *fname) return 0; fail: + if (block) + gnupg_unblock_all_signals (); return rc; } |