Re: [PATCH] qemu: make attaching disk partition to VM illegal

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





On 9/27/19 12:11 PM, Pavel Mores wrote:
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=1346265

Signed-off-by: Pavel Mores <pmores@xxxxxxxxxx>
---

I have a small nit below, but patch seems fine.

Unfortunately it breaks 'make check' in my machine, in virschematest:


297 281) Checking chardev-reconnect-generated-path.xml against domain.rng  ... OK  298 282) Checking disk-attaching-partition-invalid.xml against domain.rng  ... FAILED  299 283) Checking iommu-smmuv3.xml against domain.rng                      ... OK



  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 virDomainDiskDef *disk,
  {
      const char *driverName = virDomainDiskGetDriver(disk);
      virStorageSourcePtr n;
+    int idx;
+    int partition;
if (disk->src->shared && !disk->src->readonly &&
          !qemuBlockStorageSourceSupportsConcurrentAccess(disk->src)) {
@@ -5948,6 +5950,14 @@ qemuDomainDeviceDefValidateDisk(const virDomainDiskDef *disk,
          return -1;
      }
+ int result = virDiskNameParse(disk->dst, &idx, &partition);
+    if (result != 0 || partition != 0) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("can't attach disk partition '%s', please attach whole disk instead"),
+                       disk->dst);

Break line to keep the line <= 80 chars plz.

+        return -1;
+    }
+
      for (n = disk->src; virStorageSourceIsBacking(n); n = n->backingStore) {
          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 @@
+<domain type='qemu'>
+  <name>QEMUGuest1</name>
+  <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid>
+  <memory unit='KiB'>219100</memory>
+  <currentMemory unit='KiB'>219100</currentMemory>
+  <vcpu placement='static'>1</vcpu>
+  <os>
+    <type arch='i686' machine='pc'>hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <clock offset='utc'/>
+  <on_poweroff>destroy</on_poweroff>
+  <on_reboot>restart</on_reboot>
+  <on_crash>destroy</on_crash>
+  <devices>
+    <emulator>/usr/bin/qemu-system-i686</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='raw'/>
+      <source file='/export/vmimages/1.raw'/>
+      <target dev='vdb1' bus='virtio'/>
+    </disk>
+    <controller type='usb' index='0'/>
+    <controller type='ide' index='0'/>
+    <controller type='pci' index='0' model='pci-root'/>
+    <memballoon model='virtio'/>
+  </devices>
+</domain>
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);

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux