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 for a reproducible script and patience.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
Niibe Yutaka 2016-06-15 08:41:56 +09:00
parent b56aebe766
commit 35a3ce2acf
1 changed files with 6 additions and 2 deletions

View File

@ -119,6 +119,7 @@ static int in_transaction;
static void open_db (void);
static void create_hashtable (TRUSTREC *vr, int type);
@ -582,8 +583,13 @@ create_version_record (void)
rec.rectype = RECTYPE_VER;
rec.recnum = 0;
rc = tdbio_write_record (&rec);
if (!rc)
tdbio_sync ();
if (!rc)
create_hashtable (&rec, 0);
return rc;
}
@ -957,8 +963,6 @@ get_trusthashrec(void)
if (rc)
log_fatal (_("%s: error reading version record: %s\n"),
db_name, gpg_strerror (rc) );
if (!vr.r.ver.trusthashtbl)
create_hashtable (&vr, 0);
trusthashtbl = vr.r.ver.trusthashtbl;
}