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. |
||
---|---|---|
core | ||
core-modules | ||
dispvm | ||
doc | ||
linux | ||
qmemman | ||
qubes-rpc | ||
qubes-rpc-policy | ||
qvm-tools | ||
rpm_spec | ||
site-packages | ||
site-packages-qmemman | ||
tests | ||
xen-vm-config | ||
.gitignore | ||
LICENSE | ||
Makefile | ||
Makefile.builder | ||
version |