43fe83
From 040d07513c718a3473018ad1850469910cbe3cb2 Mon Sep 17 00:00:00 2001
43fe83
Message-Id: <040d07513c718a3473018ad1850469910cbe3cb2.1378475168.git.jdenemar@redhat.com>
43fe83
From: =?UTF-8?q?Guido=20G=C3=BCnther?= <agx@sigxcpu.org>
43fe83
Date: Mon, 2 Sep 2013 12:08:36 +0200
43fe83
Subject: [PATCH] Don't crash in qemuBuildDeviceAddressStr
43fe83
43fe83
https://bugzilla.redhat.com/show_bug.cgi?id=1003526
43fe83
43fe83
qemuDomainAttachVirtioDiskDevice passes NULL as domainDef which is later
43fe83
referenced in qemuDomainAttachVirtioDiskDevice:
43fe83
43fe83
 Program terminated with signal 11, Segmentation fault.
43fe83
 #0  qemuBuildDeviceAddressStr (buf=buf@entry=0xb646de78, info=info@entry=0xb0a02360, qemuCaps=qemuCaps@entry=0xb8fdfdc8,
43fe83
     domainDef=<error reading variable: Unhandled dwarf expression opcode 0xfa>,
43fe83
     domainDef=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at qemu/qemu_command.c:2869
43fe83
 2869            for (i = 0; i < domainDef->ncontrollers; i++) {
43fe83
 (gdb) bt
43fe83
 #0  qemuBuildDeviceAddressStr (buf=buf@entry=0xb646de78, info=info@entry=0xb0a02360, qemuCaps=qemuCaps@entry=0xb8fdfdc8,
43fe83
     domainDef=<error reading variable: Unhandled dwarf expression opcode 0xfa>,
43fe83
     domainDef=<error reading variable: Unhandled dwarf expression opcode 0xfa>) at qemu/qemu_command.c:2869
43fe83
 #1  0xb18ad6f8 in qemuBuildDriveDevStr (def=def@entry=0x0, disk=disk@entry=0xb0a02288, bootindex=bootindex@entry=0, qemuCaps=0xb8fdfdc8)
43fe83
     at qemu/qemu_command.c:4316
43fe83
 #2  0xb18d097f in qemuDomainAttachVirtioDiskDevice (conn=conn@entry=0xb90129a8, driver=driver@entry=0xb8fe29b8, vm=vm@entry=0xb8fe0c40,
43fe83
     disk=disk@entry=0xb0a02288) at qemu/qemu_hotplug.c:278
43fe83
 #3  0xb193f7ba in qemuDomainAttachDeviceDiskLive (dev=0xb0a35308, vm=0xb8fe0c40, driver=0xb8fe29b8, conn=0xb90129a8) at qemu/qemu_driver.c:6356
43fe83
 #4  qemuDomainAttachDeviceLive (dev=0xb0a35308, vm=0xb8fe0c40, dom=<optimized out>) at qemu/qemu_driver.c:6418
43fe83
 #5  qemuDomainAttachDeviceFlags (dom=dom@entry=0xb0a020b8,
43fe83
     xml=xml@entry=0xb90953f0 "<disk type='file' device='disk'>\n  <source file='/var/lib/jenkins/jobs/libvirt-tck-build/workspace/scratchdir/200-disk-hotplug/extra.img'/>\n  <target dev='vdb' bus='virtio'/>\n</disk>\n", flags=3103664568, flags@entry=1) at qemu/qemu_driver.c:7079
43fe83
 #6  0xb193f9cb in qemuDomainAttachDevice (dom=0xb0a020b8,
43fe83
     xml=0xb90953f0 "<disk type='file' device='disk'>\n  <source file='/var/lib/jenkins/jobs/libvirt-tck-build/workspace/scratchdir/200-disk-hotplug/extra.img'/>\n  <target dev='vdb' bus='virtio'/>\n</disk>\n") at qemu/qemu_driver.c:7120
43fe83
 #7  0xb7244827 in virDomainAttachDevice (domain=domain@entry=0xb0a020b8,
43fe83
     xml=0xb90953f0 "<disk type='file' device='disk'>\n  <source file='/var/lib/jenkins/jobs/libvirt-tck-build/workspace/scratchdir/200-disk-hotplug/extra.img'/>\n  <target dev='vdb' bus='virtio'/>\n</disk>\n") at libvirt.c:10912
43fe83
 #8  0xb7765ddb in remoteDispatchDomainAttachDevice (args=0xb9094ef0, rerr=0xb646e1f0, client=<optimized out>, server=<optimized out>,
43fe83
     msg=<optimized out>) at remote_dispatch.h:2296
43fe83
 #9  remoteDispatchDomainAttachDeviceHelper (server=0xb8fba0e8, client=0xb0a00730, msg=0xb0a350b8, rerr=0xb646e1f0, args=0xb9094ef0, ret=0xb9094dc8)
43fe83
     at remote_dispatch.h:2274
43fe83
 #10 0xb72b1013 in virNetServerProgramDispatchCall (msg=0xb0a350b8, client=0xb0a00730, server=0xb8fba0e8, prog=0xb8fc21c8)
43fe83
     at rpc/virnetserverprogram.c:435
43fe83
 #11 virNetServerProgramDispatch (prog=0xb8fc21c8, server=server@entry=0xb8fba0e8, client=0xb0a00730, msg=0xb0a350b8) at rpc/virnetserverprogram.c:305
43fe83
 #12 0xb72aa167 in virNetServerProcessMsg (msg=<optimized out>, prog=<optimized out>, client=<optimized out>, srv=0xb8fba0e8)
43fe83
     at rpc/virnetserver.c:165
43fe83
 #13 virNetServerHandleJob (jobOpaque=0xb0a0a850, opaque=0xb8fba0e8) at rpc/virnetserver.c:186
43fe83
 #14 0xb7189108 in virThreadPoolWorker (opaque=opaque@entry=0xb8fa3250) at util/virthreadpool.c:144
43fe83
 #15 0xb71885e5 in virThreadHelper (data=0xb8fa32a8) at util/virthreadpthread.c:161
43fe83
 #16 0xb70d6954 in start_thread (arg=0xb646eb70) at pthread_create.c:304
43fe83
 #17 0xb704e95e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
43fe83
43fe83
This was found by libvirtt-tck:
43fe83
43fe83
     http://honk.sigxcpu.org:8001/job/libvirt-tck-debian-wheezy-qemu-session/1311/console
43fe83
(cherry picked from commit bb97db2fb4315b7a7eb4403570d54c93992117de)
43fe83
---
43fe83
 src/qemu/qemu_hotplug.c | 4 ++--
43fe83
 1 file changed, 2 insertions(+), 2 deletions(-)
43fe83
43fe83
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
43fe83
index 98b8ad1..83e193b 100644
43fe83
--- a/src/qemu/qemu_hotplug.c
43fe83
+++ b/src/qemu/qemu_hotplug.c
43fe83
@@ -275,7 +275,7 @@ int qemuDomainAttachVirtioDiskDevice(virConnectPtr conn,
43fe83
         if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps)))
43fe83
             goto error;
43fe83
 
43fe83
-        if (!(devstr = qemuBuildDriveDevStr(NULL, disk, 0, priv->qemuCaps)))
43fe83
+        if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps)))
43fe83
             goto error;
43fe83
     }
43fe83
 
43fe83
@@ -616,7 +616,7 @@ int qemuDomainAttachUsbMassstorageDevice(virConnectPtr conn,
43fe83
             goto error;
43fe83
         if (!(drivestr = qemuBuildDriveStr(conn, disk, false, priv->qemuCaps)))
43fe83
             goto error;
43fe83
-        if (!(devstr = qemuBuildDriveDevStr(NULL, disk, 0, priv->qemuCaps)))
43fe83
+        if (!(devstr = qemuBuildDriveDevStr(vm->def, disk, 0, priv->qemuCaps)))
43fe83
             goto error;
43fe83
     }
43fe83
 
43fe83
-- 
43fe83
1.8.3.2
43fe83