trustdb locking

NIIBE Yutaka gniibe at fsij.org
Thu Jun 9 10:12:44 CEST 2016


Hello,

In the issue 1675, we handle trustdb locking:
    https://bugs.gnupg.org/gnupg/issue1675

I had identified a race condition for creation of trustdb.gpg.  This
was fixed last year.  However, the problem of trustdb corruption has
not gone yet.

This week, I looked through the code (trustdb.c and tdbio.c), and I
found that we have more places to lock the write access.

Even if we consider the write(2) for the record can be atomic, we have
following:

(1) FIXED
    The serialization of newly creating trustdb.gpg in the function
    tdbio_set_dbname (tdbio.c).  <--- last year's fix.

(2) BEING ANALYZED
    The serialization of newly creating hash table in the function
    create_hashtable (tdbio.c).  <--- I think this is the issue now.

    When two processes race for the position of end of file by lseek
    (db_fd, 0, SEEK_END), it might result corrupted trustdb.  A
    process which comes later will also create a record for hash table
    at the end of file at later time, but the block will be
    overwritten by another process which comes first.

(3) The serialization of appending a record of RECTYPE_HLST in the
    function upd_hashtable (tdbio.c).

(4) The serialization of creating a record of RECTYPE_TRUST in the
    function tdb_update_ownertrust, update_min_ownertrust and
    update_validity (trustdb.c).

(5) The serialization of creating a record of RECTYPE_VALID in the
    function update_validity (trustdb.c).
-- 



More information about the Gnupg-devel mailing list