diff options
author | Andre Heinecke <[email protected]> | 2017-05-30 08:22:35 +0000 |
---|---|---|
committer | Andre Heinecke <[email protected]> | 2017-05-30 08:22:35 +0000 |
commit | d3d640b9cc98dd0d06b49a2e4d46eb67af96fe29 (patch) | |
tree | 13462cf81ca3988e8502161ac2bb3de1748a2efa /g10/getkey.c | |
parent | agent: Fix memory leaks. (diff) | |
download | gnupg-d3d640b9cc98dd0d06b49a2e4d46eb67af96fe29.tar.gz gnupg-d3d640b9cc98dd0d06b49a2e4d46eb67af96fe29.zip |
gpg: Disable keydb handle caching
* g10/getkey.c (getkey_end): Disable caching of the open keydb
handle.
--
This created a big regression for Windows because the keyring
is only released after the global ctrl is released. So if an operation
does a getkey and then tries to modify the keyring it will fail on
Windows with a sharing violation. We need to modify all
keyring write operations to also take the ctrl and close the
cached_getkey_kdb handle to make writing work. See:
https://dev.gnupg.org/T3097
GnuPG-Bug-Id: T3097
Signed-off-by: Andre Heinecke <[email protected]>
Diffstat (limited to 'g10/getkey.c')
-rw-r--r-- | g10/getkey.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/g10/getkey.c b/g10/getkey.c index 04ecf4fc8..ac6b9a307 100644 --- a/g10/getkey.c +++ b/g10/getkey.c @@ -2219,10 +2219,20 @@ getkey_end (ctrl_t ctrl, getkey_ctx_t ctx) { if (ctx) { +/* +XXX: This creates a big regression for Windows because the keyring +* is only released after the global ctrl is released. So if an operation +* does a getkey and then tries to modify the keyring it will fail on +* Windows with a sharing violation. We need to modify all +* keyring write operations to also take the ctrl and close the +* cached_getkey_kdb handle to make writing work. See: +* https://dev.gnupg.org/T3097 + if (ctrl && !ctrl->cached_getkey_kdb) ctrl->cached_getkey_kdb = ctx->kr_handle; else - keydb_release (ctx->kr_handle); +*/ + keydb_release (ctx->kr_handle); free_strlist (ctx->extra_list); if (!ctx->not_allocated) xfree (ctx); |