]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemu: fix a segfault in qemuProcessWaitForMonitor
authorJán Tomko <jtomko@redhat.com>
Thu, 3 Jan 2013 18:07:55 +0000 (19:07 +0100)
committerJán Tomko <jtomko@redhat.com>
Fri, 4 Jan 2013 10:00:43 +0000 (11:00 +0100)
Commit b3f2b4ca5cfe98b08ffdb96f0455e3e333e5ace6 left buf unallocated in
the case of QMP capability probing being used, leading to a segfault in
strlen in the cleanup path.

This patch opens the log and allocates the buffer if QMP probing was
used, so we can display the helpful error message.

src/qemu/qemu_process.c

index 358757b3b86a6d635cca87bbda675c4c3a7df3f8..2d63cf2dfa641201cbfdf4286b53ca3909dbcd04 100644 (file)
@@ -1709,6 +1709,15 @@ cleanup:
     if (pos != -1 && kill(vm->pid, 0) == -1 && errno == ESRCH) {
         /* VM is dead, any other error raised in the interim is probably
          * not as important as the qemu cmdline output */
+        if (qemuCapsUsedQMP(caps)) {
+            if ((logfd = qemuDomainOpenLog(driver, vm, pos)) < 0)
+                return -1;
+
+            if (VIR_ALLOC_N(buf, buf_size) < 0) {
+                virReportOOMError();
+                goto closelog;
+            }
+        }
         qemuProcessReadLogFD(logfd, buf, buf_size, strlen(buf));
         virReportError(VIR_ERR_INTERNAL_ERROR,
                        _("process exited while connecting to monitor: %s"),