mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-23 06:05:27 +00:00
Libvirt provides a portable, long term stable C API for managing the
virtualization technologies provided by many operating systems. It
includes support for QEMU, KVM, Xen, LXC, bhyve, Virtuozzo, VMware
vCenter and ESX, VMware Desktop, Hyper-V, VirtualBox and the POWER
Hypervisor.
f8ac67909d
This was also found while investigating https://bugzilla.redhat.com/show_bug.cgi?id=670848 An EOF on a domain's monitor socket results in an event being queued to handle the EOF. The handler calls qemuProcessHandleMonitorEOF. If it is a transient domain, this leads to a call to virDomainRemoveInactive, which removes the domain from the driver's hashtable and unref's it. Nowhere in this code is the qemu driver lock acquired. However, all modifications to the driver's domain hashtable *must* be done while holding the driver lock, otherwise the hashtable can become corrupt, and (even more likely) another thread could call a different hashtable function and acquire a pointer to the domain that is in the process of being destroyed. To prevent such a disaster, qemuProcessHandleMonitorEOF must get the qemu driver lock *before* it gets the DomainObj's lock, and hold it until it is finished with the DomainObj. This guarantees that nobody else modifies the hashtable at the same time, and that anyone who had already gotten the DomainObj from the hashtable prior to this call has finished with it before we remove/destroy it. |
||
---|---|---|
.gnulib@c2090a84dc | ||
daemon | ||
docs | ||
examples | ||
include | ||
m4 | ||
po | ||
python | ||
src | ||
tests | ||
tools | ||
.dir-locals.el | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.x-sc_avoid_ctype_macros | ||
.x-sc_avoid_if_before_free | ||
.x-sc_avoid_write | ||
.x-sc_bindtextdomain | ||
.x-sc_m4_quote_check | ||
.x-sc_po_check | ||
.x-sc_prohibit_always_true_header_tests | ||
.x-sc_prohibit_asprintf | ||
.x-sc_prohibit_close | ||
.x-sc_prohibit_empty_lines_at_EOF | ||
.x-sc_prohibit_fork_wrappers | ||
.x-sc_prohibit_gethostby | ||
.x-sc_prohibit_gethostname | ||
.x-sc_prohibit_gettext_noop | ||
.x-sc_prohibit_have_config_h | ||
.x-sc_prohibit_HAVE_MBRTOWC | ||
.x-sc_prohibit_nonreentrant | ||
.x-sc_prohibit_readlink | ||
.x-sc_prohibit_sprintf | ||
.x-sc_prohibit_strncpy | ||
.x-sc_prohibit_test_minus_ao | ||
.x-sc_prohibit_VIR_ERR_NO_MEMORY | ||
.x-sc_prohibit_xmlGetProp | ||
.x-sc_require_config_h | ||
.x-sc_require_config_h_first | ||
.x-sc_trailing_blank | ||
.x-sc_unmarked_diagnostics | ||
acinclude.m4 | ||
AUTHORS | ||
autobuild.sh | ||
autogen.sh | ||
bootstrap | ||
bootstrap.conf | ||
cfg.mk | ||
ChangeLog-old | ||
configure.ac | ||
COPYING.LIB | ||
HACKING | ||
libvirt.pc.in | ||
libvirt.spec.in | ||
Makefile.am | ||
Makefile.nonreentrant | ||
mingw32-libvirt.spec.in | ||
README | ||
README-hacking | ||
TODO |
LibVirt : simple API for virtualization Libvirt is a C toolkit to interact with the virtualization capabilities of recent versions of Linux (and other OSes). It is free software available under the GNU Lesser General Public License. Virtualization of the Linux Operating System means the ability to run multiple instances of Operating Systems concurrently on a single hardware system where the basic resources are driven by a Linux instance. The library aim at providing long term stable C API initially for the Xen paravirtualization but should be able to integrate other virtualization mechanisms if needed. Daniel Veillard <veillard@redhat.com>