247cff335f
QubesVmCollection.save() overrides qubes.xml by creating new file, then renaming it over the old one. If any process has that (old) file open at the same time - especially while waiting on lock_db_for_writing() - it will end up in accessing old, already unlinked file. The exact calls would look like: P1 P2 lock_db_for_writing fd = open('qubes.xml') fcntl(fd, F_SETLK, ...) lock_db_for_writing fd = open('qubes.xml') fcntl(fd, F_SETLK, ...) ... save(): open(temp-file) write(temp-file, ...) ... flush(temp-file) rename(temp-file, 'qubes.xml') close(fd) // close old file lock_db_for_writing succeed *** fd points at already unlinked file unlock_db close(qubes.xml) To fix that problem, added a check if (already locked) file is still the same as qubes.xml. |
||
---|---|---|
.. | ||
tests | ||
__init__.py | ||
.gitignore | ||
backup.py | ||
guihelpers.py | ||
modules | ||
notify.py | ||
qubes.py | ||
qubesutils.py |