[libvirt] [PATCH 1/1] libvirtd crash when defining scsi storage pool

Pradipta Kr. Banerjee pradipta.banerjee at gmail.com
Sat Jun 21 16:57:39 UTC 2014


libvirtd crashes  when  there is an existing SCSI pool
with adapter type as 'scsi_host' and defining a new SCSI pool with adapter
type as 'fc_host' and parent attribute missing.

For eg when defining a storage-pool with the following XML will crash libvirtd
if there already exists a SCSI pool with adapter type 'scsi_host'

  <pool type='scsi'>
    <name>TEST_SCSI_FC_POOL</name>
    <source>
       <adapter type='fc_host' wwnn='1234567890abcdef' wwpn='abcdef1234567890'/>
    </source>
    <target>
       <path>/dev/disk/by-path</path>
    </target>
  </pool>

This happens because for fc_host, adapter 'name' is not relevant whereas
for scsi_host its mandatory attribute. However the check in libvirt for
finding duplicate storage pools doesn't take that into account while comparing,
resulting into crash

This patch fixes the issue

Signed-off-by: Pradipta Kr. Banerjee <bpradip at in.ibm.com>
---
 src/conf/storage_conf.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c
index 8b6fd79..54a4589 100644
--- a/src/conf/storage_conf.c
+++ b/src/conf/storage_conf.c
@@ -2126,8 +2126,10 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
                     STREQ(pool->def->source.adapter.data.fchost.wwpn,
                           def->source.adapter.data.fchost.wwpn))
                     matchpool = pool;
-            } else if (pool->def->source.adapter.type ==
-                       VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST){
+            } else if ((pool->def->source.adapter.type ==
+                        VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST)\
+                        && (def->source.adapter.type ==
+                           VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_SCSI_HOST)) {
                 if (STREQ(pool->def->source.adapter.data.name,
                           def->source.adapter.data.name))
                     matchpool = pool;
-- 
1.9.3




More information about the libvir-list mailing list