From nobody Sun May 5 10:17:53 2024 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 ARC-Seal: i=1; a=rsa-sha256; t=1569597130; cv=none; d=zoho.com; s=zohoarc; b=S69Z2+xD8R84vb3Ik/Hrkhm2toG4pmxLk5NOVedWNc79uIEwSJaP/sRWWwcWj9AMvUZ5PwZez+m2INXFDtiEyNt7rXOKe4nmPLEdGYpeEpGkJT2h2EYN/J8KN5MTce1b7r8A3KFlNc/JpPy9DTgX4Lpy3vNl6zaA7x1lWJgwPHA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1569597130; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To:ARC-Authentication-Results; bh=qBiKSgJ+RKaIceKL9OdKiZvB1+MAj8AT72yFFkfCzrs=; b=FFzeLaBh4TBRrGsnQTctx5lyQtt+WMNkOkE3KHz24xRTrmgChrrrTXEKswpvd6J8zH3TutYRSjfZz6sEpsO+YBeZM+Tswu4xxePCdgWeZor/ELV59CqXPChECF0pDRdCDF13pdXtEKzB0JJ4IIqY0GGpaIl3iwfuWhkL1/1DjLY= ARC-Authentication-Results: i=1; mx.zoho.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 header.from= (p=none dis=none) header.from= Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1569597130804356.6668457835053; Fri, 27 Sep 2019 08:12:10 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 89F44191864B; Fri, 27 Sep 2019 15:12:08 +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 67A345D9D5; Fri, 27 Sep 2019 15:12:08 +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 CBC074E58A; Fri, 27 Sep 2019 15:12:07 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id x8RFC6pI010313 for ; Fri, 27 Sep 2019 11:12:06 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7B7C05D9D5; Fri, 27 Sep 2019 15:12:06 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.43.2.52]) by smtp.corp.redhat.com (Postfix) with ESMTP id CF8675D9C3; Fri, 27 Sep 2019 15:12:03 +0000 (UTC) From: Pavel Mores To: libvir-list@redhat.com Date: Fri, 27 Sep 2019 17:11:45 +0200 Message-Id: <20190927151145.17083-1-pmores@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-loop: libvir-list@redhat.com Cc: Pavel Mores Subject: [libvirt] [PATCH] qemu: make attaching disk partition to VM illegal 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: , 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.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.70]); Fri, 27 Sep 2019 15:12:09 +0000 (UTC) Content-Type: text/plain; charset="utf-8" The way in which the qemu driver generates aliases for disks involves ignoring the partition number part of a target dev name. This means that all partitions of a block device and the device itself all end up with the same alias. If multiple such disks are specified in XML, the resulting name clash makes qemu invocation fail. Since attaching partitions to qemu VMs doesn't seem to make much sense anyway, disallow partitions in target specifications altogether. https://bugzilla.redhat.com/show_bug.cgi?id=3D1346265 Signed-off-by: Pavel Mores --- src/qemu/qemu_domain.c | 10 +++++++ .../disk-attaching-partition-invalid.xml | 27 +++++++++++++++++++ tests/qemuxml2argvtest.c | 1 + 3 files changed, 38 insertions(+) create mode 100644 tests/qemuxml2argvdata/disk-attaching-partition-invalid= .xml diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index e8e895d9aa..d03f3bed5f 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -5880,6 +5880,8 @@ qemuDomainDeviceDefValidateDisk(const virDomainDiskDe= f *disk, { const char *driverName =3D virDomainDiskGetDriver(disk); virStorageSourcePtr n; + int idx; + int partition; =20 if (disk->src->shared && !disk->src->readonly && !qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) { @@ -5948,6 +5950,14 @@ qemuDomainDeviceDefValidateDisk(const virDomainDiskD= ef *disk, return -1; } =20 + int result =3D virDiskNameParse(disk->dst, &idx, &partition); + if (result !=3D 0 || partition !=3D 0) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("can't attach disk partition '%s', please attach = whole disk instead"), + disk->dst); + return -1; + } + for (n =3D disk->src; virStorageSourceIsBacking(n); n =3D n->backingSt= ore) { if (qemuDomainValidateStorageSource(n, qemuCaps) < 0) return -1; diff --git a/tests/qemuxml2argvdata/disk-attaching-partition-invalid.xml b/= tests/qemuxml2argvdata/disk-attaching-partition-invalid.xml new file mode 100644 index 0000000000..591819fbb6 --- /dev/null +++ b/tests/qemuxml2argvdata/disk-attaching-partition-invalid.xml @@ -0,0 +1,27 @@ + + QEMUGuest1 + c7a5fdbd-edaf-9455-926a-d65c16db1809 + 219100 + 219100 + 1 + + hvm + + + + destroy + restart + destroy + + /usr/bin/qemu-system-i686 + + + + + + + + + + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 5bbac1c8b8..b54b4bbf35 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -1097,6 +1097,7 @@ mymain(void) DO_TEST("disk-no-boot", NONE); DO_TEST_PARSE_ERROR("disk-device-lun-type-invalid", QEMU_CAPS_VIRTIO_SCSI); + DO_TEST_CAPS_LATEST_PARSE_ERROR("disk-attaching-partition-invalid"); DO_TEST_FAILURE("disk-usb-nosupport", NONE); DO_TEST("disk-usb-device", QEMU_CAPS_DEVICE_USB_STORAGE); --=20 2.21.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list