mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
storage_conf: Fix libvirtd crash when defining scsi storage pool
Since 9f781da69de02745acb719e78982df9aeccfcd7b Resolve a libvirtd crash in virStoragePoolSourceFindDuplicate() when there is an existing SCSI pool defined with adapter type as 'scsi_host' and defining a new SCSI pool with adapter type as 'fc_host' and parent attribute missing or vice versa. For example, if there is an existing SCSI pool with adapter type as 'scsi_host' defined using the following XML <pool type='scsi'> <name>TEST_SCSI_POOL</name> <source> <adapter type='scsi_host' name='scsi_host1'/> </source> <target> <path>/dev/disk/by-path</path> </target> </pool> When defining another SCSI pool with adapter type as 'fc_host' using the following XML will crash libvirtd <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> Same is true for the reverse case as well where there exists a SCSI pool with adapter type as 'fc_host' and another SCSI pool is defined with adapter type as 'scsi_host'. This happens because for fc_host 'name' is optional attribute whereas for scsi_host its mandatory. However the check in libvirt for finding duplicate storage pools didn't take that into account while comparing Signed-off-by: Pradipta Kr. Banerjee <bpradip@in.ibm.com>
This commit is contained in:
parent
b7e73585a8
commit
119b6dfc40
@ -2117,6 +2117,8 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
|
||||
break;
|
||||
case VIR_STORAGE_POOL_SCSI:
|
||||
if (pool->def->source.adapter.type ==
|
||||
VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST &&
|
||||
def->source.adapter.type ==
|
||||
VIR_STORAGE_POOL_SOURCE_ADAPTER_TYPE_FC_HOST) {
|
||||
if (STREQ(pool->def->source.adapter.data.fchost.wwnn,
|
||||
def->source.adapter.data.fchost.wwnn) &&
|
||||
@ -2124,6 +2126,8 @@ virStoragePoolSourceFindDuplicate(virStoragePoolObjListPtr pools,
|
||||
def->source.adapter.data.fchost.wwpn))
|
||||
matchpool = pool;
|
||||
} 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 (pool->def->source.adapter.data.scsi_host.name) {
|
||||
if (STREQ(pool->def->source.adapter.data.scsi_host.name,
|
||||
|
Loading…
x
Reference in New Issue
Block a user