From c79ebf53b5fe0a33bf407b3bcb49e3a27ec97eb4 Mon Sep 17 00:00:00 2001 From: John Ferlan Date: Fri, 26 Jun 2015 13:48:06 -0400 Subject: [PATCH] conf: Validate disk lun using correct types https://bugzilla.redhat.com/show_bug.cgi?id=1201143 The formatdomain.html description for device 'lun' indicates that it must be either a type 'block' or type 'network' with protocol 'iscsi'; however, we did not make that check until domain startup. This caused issues for virt-manager which had an unexpected failure at run time rather config time. This patch adds a check in post part disk device checking for the specific and supported lun types as well as adjusting the test failure to be for parse config rather than run time. --- src/conf/domain_conf.c | 22 ++++++++++++++++++++++ tests/qemuxml2argvtest.c | 2 +- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 2c3b96b0e5..ad641ed67b 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3893,6 +3893,28 @@ virDomainDeviceDefPostParseInternal(virDomainDeviceDefPtr dev, return -1; } } + + /* Validate LUN configuration + * NOTE: virStorageTranslateDiskSourcePool is not run yet, so for + * disk "volume"'s, the closest we can get at config time is + * to ensure mode isn't direct since host/default will allow + * lun/block usage. At run time if it's determined the wrong + * voltype and pooltype values are set, then failure occurs + */ + if (disk->device == VIR_DOMAIN_DISK_DEVICE_LUN && + !(disk->src->type == VIR_STORAGE_TYPE_BLOCK || + (disk->src->type == VIR_STORAGE_TYPE_NETWORK && + disk->src->protocol == VIR_STORAGE_NET_PROTOCOL_ISCSI) || + (disk->src->type == VIR_STORAGE_TYPE_VOLUME && + disk->src->srcpool && + disk->src->srcpool->mode != + VIR_STORAGE_SOURCE_POOL_MODE_DIRECT))) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("disk '%s' improperly configured for a " + "device='lun'"), + disk->dst); + return -1; + } } if (dev->type == VIR_DOMAIN_DEVICE_VIDEO) { diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4154601d82..f85f63b333 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -818,7 +818,7 @@ mymain(void) QEMU_CAPS_DRIVE, QEMU_CAPS_DRIVE_FORMAT); DO_TEST("disk-drive-no-boot", QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_BOOTINDEX); - DO_TEST_FAILURE("disk-device-lun-type-invalid", + DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid", QEMU_CAPS_DRIVE, QEMU_CAPS_DEVICE, QEMU_CAPS_VIRTIO_SCSI); DO_TEST("disk-usb", NONE); DO_TEST("disk-usb-device", -- 2.39.5