From nobody Sun Feb 8 13:45:27 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1503499159481432.47618255791167; Wed, 23 Aug 2017 07:39:19 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9602F37E85; Wed, 23 Aug 2017 14:39:17 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 661C066D31; Wed, 23 Aug 2017 14:39:17 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CBE563FC73; Wed, 23 Aug 2017 14:39:16 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id v7NEdFlB027825 for ; Wed, 23 Aug 2017 10:39:15 -0400 Received: by smtp.corp.redhat.com (Postfix) id D9ED266D42; Wed, 23 Aug 2017 14:39:15 +0000 (UTC) Received: from dnr.brq.redhat.com (unknown [10.34.247.176]) by smtp.corp.redhat.com (Postfix) with ESMTP id 5D67566D31 for ; Wed, 23 Aug 2017 14:39:14 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 9602F37E85 Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx05.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=libvir-list-bounces@redhat.com From: =?UTF-8?q?J=C3=A1n=20Tomko?= To: libvir-list@redhat.com Date: Wed, 23 Aug 2017 16:39:09 +0200 Message-Id: <5d76752c1ee7cddaec065f7c979d93612f76daf8.1503499117.git.jtomko@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 1/2] conf: move hostdev address validation to virDomainHostdevDefValidate X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Wed, 23 Aug 2017 14:39:18 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" For selected hostdev types, we validate that the address type matches the subsystem type when parsing the XML. Move it to the validation phase, to allow extending the checks to other subsystem types without making existing domains disappear. --- src/conf/domain_conf.c | 76 ++++++++++++++++++++++++++++++++--------------= ---- 1 file changed, 49 insertions(+), 27 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 47eba4dbb..33470ffcb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -5255,6 +5255,49 @@ virDomainRNGDefValidate(const virDomainRNGDef *rng) =20 =20 static int +virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev) +{ + if (hostdev->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { + switch ((virDomainHostdevSubsysType) hostdev->source.subsys.type) { + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("PCI host devices must use 'pci' address = type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DR= IVE) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("SCSI host device must use 'drive' " + "address type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: + if (hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NO= NE && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PC= I && + hostdev->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CC= W) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("SCSI_host host device must use 'pci' " + "or 'ccw' address type")); + return -1; + } + break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: + break; + } + } + + return 0; +} + + +static int virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev, const virDomainDef *def) { @@ -5280,12 +5323,14 @@ virDomainDeviceDefValidateInternal(const virDomainD= eviceDef *dev, case VIR_DOMAIN_DEVICE_RNG: return virDomainRNGDefValidate(dev->data.rng); =20 + case VIR_DOMAIN_DEVICE_HOSTDEV: + return virDomainHostdevDefValidate(dev->data.hostdev); + case VIR_DOMAIN_DEVICE_LEASE: case VIR_DOMAIN_DEVICE_FS: case VIR_DOMAIN_DEVICE_INPUT: case VIR_DOMAIN_DEVICE_SOUND: case VIR_DOMAIN_DEVICE_VIDEO: - case VIR_DOMAIN_DEVICE_HOSTDEV: case VIR_DOMAIN_DEVICE_WATCHDOG: case VIR_DOMAIN_DEVICE_GRAPHICS: case VIR_DOMAIN_DEVICE_HUB: @@ -14085,41 +14130,18 @@ virDomainHostdevDefParseXML(virDomainXMLOptionPtr= xmlopt, | VIR_DOMAIN_DEF_PARSE_ALLOW_ROM) = < 0) goto error; } - if (def->mode =3D=3D VIR_DOMAIN_HOSTDEV_MODE_SUBSYS) { switch ((virDomainHostdevSubsysType) def->source.subsys.type) { - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: - if (def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && - def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("PCI host devices must use 'pci' address = type")); - goto error; - } - break; case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI: - if (def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && - def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_DRIVE)= { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("SCSI host device must use 'drive' " - "address type")); - goto error; - } if (virXPathBoolean("boolean(./readonly)", ctxt)) def->readonly =3D true; if (virXPathBoolean("boolean(./shareable)", ctxt)) def->shareable =3D true; break; - case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: - if (def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE && - def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_PCI && - def->info->type !=3D VIR_DOMAIN_DEVICE_ADDRESS_TYPE_CCW) { - virReportError(VIR_ERR_XML_ERROR, "%s", - _("SCSI_host host device must use 'pci' " - "or 'ccw' address type")); - goto error; - } - break; + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI: + case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI_HOST: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_MDEV: case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_LAST: break; --=20 2.13.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list