After my first round of patches got merged [1], some new problems
arose. They are not as serious (except maybe for 7/9) but they are still
problematic for sure. Mostly in scenarios where a mgmt application uses
the embedded driver and has multiple forks/instances sharing essentially
the same config (e.g. it writes the same qemu.conf into different
roots). Thing is, we may generate conflicting paths across these
instances.
What I've done here is, I looked at what paths can be set from qemu.conf
and on their usage. Then I've grepped for virDomainDefGetShortName() and
looked at its usages, because that has proven to be common denominator
in patches 7-9.
Some usages of the function are safe though. When the usage involves a
path that is derived from the root and can't be overridden in qemu.conf
it is safe. For instance, qemuDBusGetAddress() calls
virDomainDefGetShortName() to construct a path to a UNIX socket. But the
path has cfg->dbusStateDir prefix which is derived from cfg->stateDir
which in turn is derived from the root. At the same time, neither of
these paths can be overridden in qemu.conf. Therefore, no conflicts can
occur.
Michal Prívozník (9):
tests: Fix virQEMUDriverConfigNew() calling with respect to @root
conf: Move virDomainGenerateMachineName to hypervisor/
virDomainDriverGenerateMachineName: Factor out embed path hashing
qemu: Introduce virQEMUDriverGetEmbedRoot
qemuDomainGetMachineName: Access embeddedRoot from driver rather than
cfg
Revert "qemu_conf: Track embed root dir"
qemu: Make hugepages path generation embed driver aware
qemu: Make memory path generation embed driver aware
qemu: Make auto dump path generation embed driver aware
src/conf/domain_conf.c | 72 ----------------------------
src/conf/domain_conf.h | 7 ---
src/hypervisor/domain_driver.c | 88 ++++++++++++++++++++++++++++++++++
src/hypervisor/domain_driver.h | 11 +++++
src/libvirt_private.syms | 3 +-
src/lxc/lxc_domain.c | 3 +-
src/qemu/qemu_command.c | 19 ++++----
src/qemu/qemu_conf.c | 64 ++++++++++++++++++-------
src/qemu/qemu_conf.h | 23 ++++-----
src/qemu/qemu_domain.c | 9 ++--
src/qemu/qemu_driver.c | 10 +++-
src/qemu/qemu_process.c | 7 ++-
tests/domaincapstest.c | 2 +-
tests/testutilsqemu.c | 2 +-
tests/virsystemdtest.c | 5 +-
15 files changed, 191 insertions(+), 134 deletions(-)
--
2.24.1