]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
util: Forbid resetting non-endpoint devices
authorShivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
Mon, 23 Jan 2017 13:37:10 +0000 (19:07 +0530)
committerMartin Kletzander <mkletzan@redhat.com>
Mon, 23 Jan 2017 16:23:12 +0000 (17:23 +0100)
It is destructive to attempt reset on a pci- or cardbus-bridge, the
host can crash.  The bridges won't contain any guest data and neither
they can be passed through using vfio/stub.  So, no point in allowing a
reset on them.

Signed-off-by: Shivaprasad G Bhat <sbhat@linux.vnet.ibm.com>
src/util/virpci.c

index 0601f496f5efd8476f8db595324eee541a5c8215..3c1e13b6a5a4218b7ad1fe87d20bf227fc921b41 100644 (file)
@@ -933,6 +933,18 @@ virPCIDeviceReset(virPCIDevicePtr dev,
     char *drvName = NULL;
     int ret = -1;
     int fd = -1;
+    int hdrType = -1;
+
+    if (virPCIGetHeaderType(dev, &hdrType) < 0)
+        return -1;
+
+    if (hdrType != VIR_PCI_HEADER_ENDPOINT) {
+        virReportError(VIR_ERR_INTERNAL_ERROR,
+                       _("Invalid attempt to reset PCI device %s. "
+                         "Only PCI endpoint devices can be reset"),
+                       dev->name);
+        return -1;
+    }
 
     if (activeDevs && virPCIDeviceListFind(activeDevs, dev)) {
         virReportError(VIR_ERR_INTERNAL_ERROR,