From nobody Wed May 14 23:20:30 2025 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; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1518798521330784.4321081578306; Fri, 16 Feb 2018 08:28:41 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DFDA87F41E; Fri, 16 Feb 2018 16:28:39 +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 AB2FB60C1C; Fri, 16 Feb 2018 16:28:39 +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 739EC4A471; Fri, 16 Feb 2018 16:28:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w1GGSPtQ021840 for ; Fri, 16 Feb 2018 11:28:25 -0500 Received: by smtp.corp.redhat.com (Postfix) id 19399AF027; Fri, 16 Feb 2018 16:28:25 +0000 (UTC) Received: from inaba.usersys.redhat.com (unknown [10.43.2.98]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 99E3FB079B for ; Fri, 16 Feb 2018 16:28:24 +0000 (UTC) From: Andrea Bolognani To: libvir-list@redhat.com Date: Fri, 16 Feb 2018 17:28:07 +0100 Message-Id: <20180216162812.31121-11-abologna@redhat.com> In-Reply-To: <20180216162812.31121-1-abologna@redhat.com> References: <20180216162812.31121-1-abologna@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 10/15] qemu: Validate PCI controllers (targetIndex) 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.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Fri, 16 Feb 2018 16:28:40 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Some test cases that were specifically set up to exploit the lack of checks on PCI controller options start failing with these changes, so they are marked as such. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_domain.c | 43 ++++++++++++ .../i440fx-controllers-pciopts.args | 24 ------- .../pseries-controllers-pciopts.args | 22 ------- .../qemuxml2argvdata/q35-controllers-pciopts.args | 28 -------- tests/qemuxml2argvtest.c | 19 +----- .../i440fx-controllers-pciopts.xml | 45 ------------- .../pseries-controllers-pciopts.xml | 43 ------------ .../qemuxml2xmloutdata/q35-controllers-pciopts.xml | 76 ------------------= ---- tests/qemuxml2xmltest.c | 17 ----- 9 files changed, 46 insertions(+), 271 deletions(-) delete mode 100644 tests/qemuxml2argvdata/i440fx-controllers-pciopts.args delete mode 100644 tests/qemuxml2argvdata/pseries-controllers-pciopts.args delete mode 100644 tests/qemuxml2argvdata/q35-controllers-pciopts.args delete mode 100644 tests/qemuxml2xmloutdata/i440fx-controllers-pciopts.xml delete mode 100644 tests/qemuxml2xmloutdata/pseries-controllers-pciopts.xml delete mode 100644 tests/qemuxml2xmloutdata/q35-controllers-pciopts.xml diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 2f76464df..52c76b515 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4408,6 +4408,49 @@ qemuDomainDeviceDefValidateControllerPCI(const virDo= mainControllerDef *controlle break; } =20 + /* targetIndex */ + switch ((virDomainControllerModelPCI) controller->model) { + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_ROOT: + /* PHBs for pSeries guests are stored as pci-root controllers and + * must have been assigned a targetIndex */ + if (pciopts->targetIndex =3D=3D -1 && + qemuDomainIsPSeries(def)) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Option '%s' not set for '%s' controller"), + "targetIndex", model); + return -1; + } + /* targetIndex only applies to pSeries guests, so for any other + * guest type it being present is an error */ + if (pciopts->targetIndex !=3D -1 && + !qemuDomainIsPSeries(def)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Option '%s' is not valid for '%s' controller= "), + "targetIndex", model); + return -1; + } + break; + + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_BRIDGE: + case VIR_DOMAIN_CONTROLLER_MODEL_DMI_TO_PCI_BRIDGE: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT_PORT: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_UPSTREAM_PORT: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_SWITCH_DOWNSTREAM_PORT: + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_EXPANDER_BUS: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_EXPANDER_BUS: + case VIR_DOMAIN_CONTROLLER_MODEL_PCIE_ROOT: + if (pciopts->targetIndex !=3D -1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Option '%s' is not valid for '%s' controller= "), + "targetIndex", model); + return -1; + } + break; + + case VIR_DOMAIN_CONTROLLER_MODEL_PCI_LAST: + break; + } + return 0; } =20 diff --git a/tests/qemuxml2argvdata/i440fx-controllers-pciopts.args b/tests= /qemuxml2argvdata/i440fx-controllers-pciopts.args deleted file mode 100644 index d85fae5c9..000000000 --- a/tests/qemuxml2argvdata/i440fx-controllers-pciopts.args +++ /dev/null @@ -1,24 +0,0 @@ -LC_ALL=3DC \ -PATH=3D/bin \ -HOME=3D/home/test \ -USER=3Dtest \ -LOGNAME=3Dtest \ -QEMU_AUDIO_DRV=3Dnone \ -/usr/bin/qemu-system-x86_64 \ --name guest \ --S \ --M pc \ --m 1024 \ --smp 1,sockets=3D1,cores=3D1,threads=3D1 \ --numa node,nodeid=3D0,cpus=3D0,mem=3D1024 \ --uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ --nographic \ --nodefaults \ --chardev socket,id=3Dcharmonitor,path=3D/tmp/lib/domain--1-guest/monitor.s= ock,\ -server,nowait \ --mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ --no-acpi \ --boot c \ --global i440FX-pcihost.pci-hole64-size=3D1024K \ --device pci-bridge,chassis_nr=3D2,id=3Dpci.1,bus=3Dpci.0,addr=3D0x3 \ --device pxb,bus_nr=3D3,id=3Dpci.2,numa_node=3D0,bus=3Dpci.0,addr=3D0x4 diff --git a/tests/qemuxml2argvdata/pseries-controllers-pciopts.args b/test= s/qemuxml2argvdata/pseries-controllers-pciopts.args deleted file mode 100644 index 5f1edfc83..000000000 --- a/tests/qemuxml2argvdata/pseries-controllers-pciopts.args +++ /dev/null @@ -1,22 +0,0 @@ -LC_ALL=3DC \ -PATH=3D/bin \ -HOME=3D/home/test \ -USER=3Dtest \ -LOGNAME=3Dtest \ -QEMU_AUDIO_DRV=3Dnone \ -/usr/bin/qemu-system-ppc64 \ --name guest \ --S \ --M pseries \ --m 1024 \ --smp 1,sockets=3D1,cores=3D1,threads=3D1 \ --numa node,nodeid=3D0,cpus=3D0,mem=3D1024 \ --uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ --nographic \ --nodefaults \ --chardev socket,id=3Dcharmonitor,path=3D/tmp/lib/domain--1-guest/monitor.s= ock,\ -server,nowait \ --mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ --boot c \ --device spapr-pci-host-bridge,index=3D1,id=3Dpci.1,numa_node=3D0 \ --device pci-bridge,chassis_nr=3D3,id=3Dpci.2,bus=3Dpci.0,addr=3D0x1 diff --git a/tests/qemuxml2argvdata/q35-controllers-pciopts.args b/tests/qe= muxml2argvdata/q35-controllers-pciopts.args deleted file mode 100644 index 44259f502..000000000 --- a/tests/qemuxml2argvdata/q35-controllers-pciopts.args +++ /dev/null @@ -1,28 +0,0 @@ -LC_ALL=3DC \ -PATH=3D/bin \ -HOME=3D/home/test \ -USER=3Dtest \ -LOGNAME=3Dtest \ -QEMU_AUDIO_DRV=3Dnone \ -/usr/bin/qemu-system-x86_64 \ --name guest \ --S \ --M q35 \ --m 1024 \ --smp 1,sockets=3D1,cores=3D1,threads=3D1 \ --numa node,nodeid=3D0,cpus=3D0,mem=3D1024 \ --uuid 496d7ea8-9739-544b-4ebd-ef08be936e8b \ --nographic \ --nodefaults \ --chardev socket,id=3Dcharmonitor,path=3D/tmp/lib/domain--1-guest/monitor.s= ock,\ -server,nowait \ --mon chardev=3Dcharmonitor,id=3Dmonitor,mode=3Dreadline \ --no-acpi \ --boot c \ --global q35-pcihost.pci-hole64-size=3D1024K \ --device i82801b11-bridge,id=3Dpci.1,bus=3Dpcie.0,addr=3D0x1e \ --device pci-bridge,chassis_nr=3D3,id=3Dpci.2,bus=3Dpci.1,addr=3D0x0 \ --device pxb-pcie,bus_nr=3D4,id=3Dpci.3,numa_node=3D0,bus=3Dpcie.0,addr=3D0= x2 \ --device pcie-root-port,port=3D0x5,chassis=3D5,id=3Dpci.4,bus=3Dpcie.0,addr= =3D0x3 \ --device x3130-upstream,id=3Dpci.5,bus=3Dpci.4,addr=3D0x0 \ --device xio3130-downstream,port=3D0x7,chassis=3D7,id=3Dpci.6,bus=3Dpci.5,a= ddr=3D0x0 diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 4154663da..525042e95 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -2435,22 +2435,9 @@ mymain(void) QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_DEVICE_PXB_PCIE); =20 - DO_TEST("i440fx-controllers-pciopts", - QEMU_CAPS_I440FX_PCI_HOLE64_SIZE, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PXB); - DO_TEST("q35-controllers-pciopts", - QEMU_CAPS_Q35_PCI_HOLE64_SIZE, - QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PXB_PCIE, - QEMU_CAPS_DEVICE_PCIE_ROOT_PORT, - QEMU_CAPS_DEVICE_X3130_UPSTREAM, - QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM); - DO_TEST("pseries-controllers-pciopts", - QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE, - QEMU_CAPS_DEVICE_PCI_BRIDGE); + DO_TEST_PARSE_ERROR("i440fx-controllers-pciopts", NONE); + DO_TEST_PARSE_ERROR("q35-controllers-pciopts", NONE); + DO_TEST_PARSE_ERROR("pseries-controllers-pciopts", NONE); =20 DO_TEST("hostdev-scsi-lsi", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_SCSI_LSI, diff --git a/tests/qemuxml2xmloutdata/i440fx-controllers-pciopts.xml b/test= s/qemuxml2xmloutdata/i440fx-controllers-pciopts.xml deleted file mode 100644 index d171d1370..000000000 --- a/tests/qemuxml2xmloutdata/i440fx-controllers-pciopts.xml +++ /dev/null @@ -1,45 +0,0 @@ - - guest - 496d7ea8-9739-544b-4ebd-ef08be936e8b - 1048576 - 1048576 - 1 - - hvm - - - - - - - - - destroy - restart - destroy - - /usr/bin/qemu-system-x86_64 - - - 1024 - - - - - 0 - -
- - - - - 0 - -
- - - - - - - diff --git a/tests/qemuxml2xmloutdata/pseries-controllers-pciopts.xml b/tes= ts/qemuxml2xmloutdata/pseries-controllers-pciopts.xml deleted file mode 100644 index bbe360e25..000000000 --- a/tests/qemuxml2xmloutdata/pseries-controllers-pciopts.xml +++ /dev/null @@ -1,43 +0,0 @@ - - guest - 496d7ea8-9739-544b-4ebd-ef08be936e8b - 1048576 - 1048576 - 1 - - hvm - - - - - - - - - destroy - restart - destroy - - /usr/bin/qemu-system-ppc64 - - - - - - - - 0 - - - - - - 0 - -
- - - - - - diff --git a/tests/qemuxml2xmloutdata/q35-controllers-pciopts.xml b/tests/q= emuxml2xmloutdata/q35-controllers-pciopts.xml deleted file mode 100644 index 5ef7aa564..000000000 --- a/tests/qemuxml2xmloutdata/q35-controllers-pciopts.xml +++ /dev/null @@ -1,76 +0,0 @@ - - guest - 496d7ea8-9739-544b-4ebd-ef08be936e8b - 1048576 - 1048576 - 1 - - hvm - - - - - - - - - destroy - restart - destroy - - /usr/bin/qemu-system-x86_64 - - - 1024 - - - - - 0 - -
- - - - - 0 - -
- - - - - 0 - -
- - - - - 0 - -
- - - - - 0 - -
- - - - - 0 - -
- - - -
- - - - - - diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 7b8a16078..0eb9e6c77 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -1102,23 +1102,6 @@ mymain(void) QEMU_CAPS_DEVICE_IOH3420, QEMU_CAPS_HDA_DUPLEX); =20 - DO_TEST("i440fx-controllers-pciopts", - QEMU_CAPS_I440FX_PCI_HOLE64_SIZE, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PXB); - DO_TEST("q35-controllers-pciopts", - QEMU_CAPS_Q35_PCI_HOLE64_SIZE, - QEMU_CAPS_DEVICE_DMI_TO_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PCI_BRIDGE, - QEMU_CAPS_DEVICE_PXB_PCIE, - QEMU_CAPS_DEVICE_PCIE_ROOT_PORT, - QEMU_CAPS_DEVICE_X3130_UPSTREAM, - QEMU_CAPS_DEVICE_XIO3130_DOWNSTREAM); - DO_TEST("pseries-controllers-pciopts", - QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE, - QEMU_CAPS_SPAPR_PCI_HOST_BRIDGE_NUMA_NODE, - QEMU_CAPS_DEVICE_PCI_BRIDGE); - DO_TEST("hostdev-scsi-vhost-scsi-ccw", QEMU_CAPS_VIRTIO_SCSI, QEMU_CAPS_DEVICE_VHOST_SCSI, QEMU_CAPS_DEVICE_SCSI_GENERIC, QEMU_CAPS_VIRTIO_CCW); --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list