g10: Fix another race condition for trustdb access.
authorNiibe Yutaka <gniibe@fsij.org>
Tue, 14 Jun 2016 23:41:56 +0000 (08:41 +0900)
committerNiibe Yutaka <gniibe@fsij.org>
Tue, 14 Jun 2016 23:56:12 +0000 (08:56 +0900)
* 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 <gniibe@fsij.org>
(backport from master
 commit 35a3ce2acf78a95fecbccfd8db0560cca24232df)

g10/tdbio.c

index 5c2fdd1..725c3c2 100644 (file)
@@ -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;
     }