Go to file
Alex Jia 96518d4316 qemu: Prevent crash of libvirtd without guest agent configuration
If users haven't configured guest agent then qemuAgentCommand() will
dereference a NULL 'mon' pointer, which causes crash of libvirtd when
using agent based cpu (un)plug.

With the patch, when the qemu-ga service isn't running in the guest,
a expected error "error: Guest agent is not responding: Guest agent
not available for now" will be raised, and the error "error: argument
unsupported: QEMU guest agent is not configured" is raised when the
guest hasn't configured guest agent.

GDB backtrace:

 (gdb) bt
 #0  virNetServerFatalSignal (sig=11, siginfo=<value optimized out>, context=<value optimized out>) at rpc/virnetserver.c:326
 #1  <signal handler called>
 #2  qemuAgentCommand (mon=0x0, cmd=0x7f39300017b0, reply=0x7f394b090910, seconds=-2) at qemu/qemu_agent.c:975
 #3  0x00007f39429507f6 in qemuAgentGetVCPUs (mon=0x0, info=0x7f394b0909b8) at qemu/qemu_agent.c:1475
 #4  0x00007f39429d9857 in qemuDomainGetVcpusFlags (dom=<value optimized out>, flags=9) at qemu/qemu_driver.c:4849
 #5  0x00007f3957dffd8d in virDomainGetVcpusFlags (domain=0x7f39300009c0, flags=8) at libvirt.c:9843

How to reproduce?

 # To start a guest without guest agent configuration
 # then run the following cmdline

 # virsh vcpucount foobar --guest
 error: End of file while reading data: Input/output error
 error: One or more references were leaked after disconnect from the hypervisor
 error: Failed to reconnect to the hypervisor

RHBZ: https://bugzilla.redhat.com/show_bug.cgi?id=984821

Signed-off-by: Alex Jia <ajia@redhat.com>
Signed-off-by: Peter Krempa <pkrempa@redhat.com>
2013-07-16 14:14:07 +02:00
.gnulib@da8d59ee79 maint: update to latest gnulib 2013-07-11 10:33:09 -06:00
build-aux syntax-check: mandate space after mid-line semicolon 2013-05-28 08:26:05 -06:00
daemon Convert 'int i' to 'size_t i' in daemon/ files 2013-07-10 10:23:10 +01:00
docs Make logical pools independent on target path 2013-07-16 12:16:37 +02:00
examples hellolibvirt: Resolve Coverity issues 2013-07-11 14:18:11 -04:00
gnulib maint: use LGPL correctly 2013-05-20 14:03:48 -06:00
include libvirt: Define domain crash event types 2013-07-02 12:02:27 -06:00
m4 Fix build with clang 2013-07-04 11:35:59 +02:00
po viralloc: Report OOM error on failure 2013-07-10 11:07:31 +02:00
python python: return dictionary without value in case of no blockjob 2013-07-15 18:20:42 +08:00
src qemu: Prevent crash of libvirtd without guest agent configuration 2013-07-16 14:14:07 +02:00
tests Make logical pools independent on target path 2013-07-16 12:16:37 +02:00
tools virsh: Mention --driver in man page for nodedev-detach 2013-07-12 14:02:11 +02:00
.dir-locals.el build: avoid tabs that failed syntax-check 2012-09-06 09:43:46 -06:00
.gitignore tests: Introduce qemuhotplugtest 2013-06-25 17:00:56 +02:00
.gitmodules make .gnulib a submodule 2009-07-08 16:17:51 +02:00
.mailmap Autogenerate AUTHORS 2012-10-19 12:44:56 -04:00
AUTHORS.in Add John Ferlan to the committers list 2013-02-05 10:59:32 -05:00
COPYING maint: follow recommended practice for using LGPL 2013-05-20 14:15:21 -06:00
COPYING.LESSER maint: follow recommended practice for using LGPL 2013-05-20 14:15:21 -06:00
ChangeLog-old virterror.c: Fix several spelling mistakes 2012-02-03 11:32:51 -07:00
HACKING Adapt to VIR_ALLOC and virAsprintf in docs/ 2013-07-10 11:07:31 +02:00
Makefile.am maint: use LGPL correctly 2013-05-20 14:03:48 -06:00
Makefile.nonreentrant maint: use LGPL correctly 2013-05-20 14:03:48 -06:00
README Correct typos in the documentation (Atsushi SAKAI) 2008-01-24 10:15:13 +00:00
README-hacking maint: relax git minimum version 2010-02-24 14:29:27 -05:00
TODO Update todo list file to point at bugzilla/website 2010-10-13 16:45:26 +01:00
autobuild.sh Set PKG_CONFIG_LIBDIR in autobuild.sh 2013-05-17 17:09:29 +01:00
autogen.sh build: honor autogen.sh --no-git 2013-07-09 16:15:29 -06:00
bootstrap build: honor autogen.sh --no-git 2013-07-09 16:15:29 -06:00
bootstrap.conf util: add virGetGroupList 2013-07-11 15:25:53 -06:00
cfg.mk Prevent use of 'int' data type & 'ii', 'jj', 'kk' var names for loops 2013-07-10 17:55:17 +01:00
configure.ac util: make virSetUIDGID async-signal-safe 2013-07-11 15:46:42 -06:00
libvirt.pc.in build: silence warning from autoconf 2012-05-30 09:22:02 -06:00
libvirt.spec.in Release of libvirt-1.1.0 2013-07-01 17:22:49 +08:00
mingw-libvirt.spec.in conf: add features to volume target XML 2013-06-21 13:25:30 +02:00
run.in run: license as LGPL 2013-02-23 14:03:19 -07:00

README

         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>