Re: [PATCH] conf: fix crash when match a network iscsi hostdev with a host iscsi hostdev

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 12/15/2014 07:58 PM, John Ferlan wrote:

On 12/14/2014 10:09 PM, Luyao Huang wrote:
https://bugzilla.redhat.com/show_bug.cgi?id=1174053

When we use attach-device to coldplug a network iscsi hostdev,
libvirt will check if there is already a device in XML. But if
the 'b' is a host iscsi hostdev and 'a' is a network iscsi hostdev
, libvirtd will crash in virDomainHostdevMatchSubsysSCSIiSCSI,
because 'b' doesn't have a hostname.

Add a check in virDomainHostdevMatchSubsys, if the a's protocol
and b's protocol is not the same.

backtrace like this:

0  0x00007f850d6bc307 in virDomainHostdevMatchSubsysSCSIiSCSI at conf/domain_conf.c:10889
1  virDomainHostdevMatchSubsys at conf/domain_conf.c:10911
2  virDomainHostdevMatch at conf/domain_conf.c:10973
3  virDomainHostdevFind at conf/domain_conf.c:10998
4  0x00007f84f6a10560 in qemuDomainAttachDeviceConfig at qemu/qemu_driver.c:7223
5  qemuDomainAttachDeviceFlags at qemu/qemu_driver.c:7554

Signed-off-by: Luyao Huang <lhuang@xxxxxxxxxx>
---
  src/conf/domain_conf.c | 4 +++-
  1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 5cf0b1a..eb63c93 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -11184,7 +11184,9 @@ static int
  virDomainHostdevMatchSubsys(virDomainHostdevDefPtr a,
                              virDomainHostdevDefPtr b)
  {
-    if (a->source.subsys.type != b->source.subsys.type)
+    if (a->source.subsys.type != b->source.subsys.type ||
+        (a->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI &&
+         a->source.subsys.u.scsi.protocol != b->source.subsys.u.scsi.protocol))
While the check works - it's in the wrong place. It should be in the
subsequent switch.  I'll clean it up a bit and also reference the commit
id that introduced the issue as part of the commit message
Thanks a lot for your help and i will try to fix in a right place next time :)
John

          return 0;
switch (a->source.subsys.type) {

Luyao

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]