[Pkg-libvirt-commits] [SCM] Libvirt Debian packaging branch, master, updated. debian/1.1.0-4

Guido Günther agx at sigxcpu.org
Sat Jul 20 09:44:19 UTC 2013


The following commit has been merged in the master branch:
commit 85b5fdafe6b45ae8a3e0e988cdc1321559a91e2c
Author: Guido Günther <agx at sigxcpu.org>
Date:   Sat Jul 20 09:58:12 2013 +0200

    CVE-2013-4154: qemu: Prevent crash of libvirtd without guest agent configuration
    
    Thanks: Alex Jia
    Closes: #717355

diff --git a/debian/patches/CVE-2013-4154-qemu-Prevent-crash-of-libvirtd-without.patch b/debian/patches/CVE-2013-4154-qemu-Prevent-crash-of-libvirtd-without.patch
new file mode 100644
index 0000000..072cdd0
--- /dev/null
+++ b/debian/patches/CVE-2013-4154-qemu-Prevent-crash-of-libvirtd-without.patch
@@ -0,0 +1,89 @@
+From: Alex Jia <ajia at redhat.com>
+Date: Tue, 16 Jul 2013 17:30:20 +0800
+Subject: CVE-2013-4154: 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 at redhat.com>
+Signed-off-by: Peter Krempa <pkrempa at redhat.com>
+
+Closes: #717355
+---
+ src/qemu/qemu_driver.c | 26 ++++++++++++++++++++++++++
+ 1 file changed, 26 insertions(+)
+
+diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
+index 9d6160f..5ddd9af 100644
+--- a/src/qemu/qemu_driver.c
++++ b/src/qemu/qemu_driver.c
+@@ -3963,6 +3963,19 @@ qemuDomainSetVcpusFlags(virDomainPtr dom, unsigned int nvcpus,
+             goto endjob;
+         }
+ 
++        if (priv->agentError) {
++            virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
++                           _("QEMU guest agent is not "
++                             "available due to an error"));
++            goto endjob;
++        }
++
++        if (!priv->agent) {
++            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
++                           _("QEMU guest agent is not configured"));
++            goto endjob;
++        }
++
+         qemuDomainObjEnterAgent(vm);
+         ncpuinfo = qemuAgentGetVCPUs(priv->agent, &cpuinfo);
+         qemuDomainObjExitAgent(vm);
+@@ -4685,6 +4698,19 @@ qemuDomainGetVcpusFlags(virDomainPtr dom, unsigned int flags)
+         if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_QUERY) < 0)
+             goto cleanup;
+ 
++        if (priv->agentError) {
++            virReportError(VIR_ERR_AGENT_UNRESPONSIVE, "%s",
++                           _("QEMU guest agent is not "
++                             "available due to an error"));
++            goto endjob;
++        }
++
++        if (!priv->agent) {
++            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s",
++                           _("QEMU guest agent is not configured"));
++            goto endjob;
++        }
++
+         if (!virDomainObjIsActive(vm)) {
+             virReportError(VIR_ERR_OPERATION_INVALID, "%s",
+                            _("domain is not running"));
diff --git a/debian/patches/series b/debian/patches/series
index b9e2dad..f532ef6 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -13,3 +13,4 @@ Allow-xen-toolstack-to-find-it-s-binaries.patch
 Create-directory-for-lease-files-if-it-s-missing.patch
 Fix-crash-when-multiple-event-callbacks-were-registe.patch
 CVE-2013-4153-qemu-Fix-double-free-of-returned-JSON-.patch
+CVE-2013-4154-qemu-Prevent-crash-of-libvirtd-without.patch

-- 
Libvirt Debian packaging



More information about the Pkg-libvirt-commits mailing list