aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNiibe Yutaka <[email protected]>2016-06-14 23:41:56 +0000
committerNiibe Yutaka <[email protected]>2016-06-14 23:56:12 +0000
commit00d737e3fde84e7df7ba19080c83237b769cd0d0 (patch)
tree8b25b104e99ef3e94b6d903daa00fe2001909408
parentdoc: Remove description of --faked-system-time from gpg.texi (diff)
downloadgnupg-00d737e3fde84e7df7ba19080c83237b769cd0d0.tar.gz
gnupg-00d737e3fde84e7df7ba19080c83237b769cd0d0.zip
g10: Fix another race condition for trustdb access.
* g10/tdbio.c (create_version_record): Call create_hashtable to always make hashtable, together with the version record. (get_trusthashrec): Remove call to create_hashtable. -- GnuPG-bug-id: 1675 Thanks to Scott Moser to reproducible script and patience. Signed-off-by: NIIBE Yutaka <[email protected]> (backport from master commit 35a3ce2acf78a95fecbccfd8db0560cca24232df)
-rw-r--r--g10/tdbio.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/g10/tdbio.c b/g10/tdbio.c
index 5c2fdd14d..725c3c2ca 100644
--- a/g10/tdbio.c
+++ b/g10/tdbio.c
@@ -92,6 +92,7 @@ static int db_fd = -1;
static int in_transaction;
static void open_db(void);
+static void create_hashtable (TRUSTREC *vr, int type);
static int
take_write_lock (void)
@@ -471,6 +472,10 @@ create_version_record (void)
rc = tdbio_write_record( &rec );
if( !rc )
tdbio_sync();
+
+ if (!rc)
+ create_hashtable (&rec, 0);
+
return rc;
}
@@ -763,8 +768,6 @@ get_trusthashrec(void)
if( rc )
log_fatal( _("%s: error reading version record: %s\n"),
db_name, g10_errstr(rc) );
- if( !vr.r.ver.trusthashtbl )
- create_hashtable( &vr, 0 );
trusthashtbl = vr.r.ver.trusthashtbl;
}