char *xml = NULL;
libxlDriverPrivatePtr driver = dev->conn->privateData;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
virCheckFlags(0, -1);
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
+
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(nodeconn,
+ virNodeDeviceGetName(dev))))
+ goto cleanup;
+
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceDetachFlagsEnsureACL(dev->conn, def) < 0)
goto cleanup;
cleanup:
virPCIDeviceFree(pci);
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
VIR_FREE(xml);
return ret;
}
char *xml = NULL;
libxlDriverPrivatePtr driver = dev->conn->privateData;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
+
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(
+ nodeconn, virNodeDeviceGetName(dev))))
+ goto cleanup;
+
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
goto cleanup;
cleanup:
virPCIDeviceFree(pci);
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
VIR_FREE(xml);
return ret;
}
char *xml = NULL;
libxlDriverPrivatePtr driver = dev->conn->privateData;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
+
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
+
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(
+ nodeconn, virNodeDeviceGetName(dev))))
+ goto cleanup;
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
goto cleanup;
cleanup:
virPCIDeviceFree(pci);
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
VIR_FREE(xml);
return ret;
}
g_autofree char *xml = NULL;
bool vfio = qemuHostdevHostSupportsPassthroughVFIO();
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
virCheckFlags(0, -1);
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
+
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(nodeconn,
+ virNodeDeviceGetName(dev))))
+ goto cleanup;
+
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceDetachFlagsEnsureACL(dev->conn, def) < 0)
goto cleanup;
cleanup:
virPCIDeviceFree(pci);
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
return ret;
}
virNodeDeviceDefPtr def = NULL;
g_autofree char *xml = NULL;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
+
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(
+ nodeconn, virNodeDeviceGetName(dev))))
+ goto cleanup;
+
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
goto cleanup;
virPCIDeviceFree(pci);
cleanup:
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
return ret;
}
virNodeDeviceDefPtr def = NULL;
g_autofree char *xml = NULL;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
+
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
+
+ /* 'dev' is associated with the QEMU virConnectPtr,
+ * so for split daemons, we need to get a copy that
+ * is associated with the virnodedevd daemon.
+ */
+ if (!(nodedev = virNodeDeviceLookupByName(
+ nodeconn, virNodeDeviceGetName(dev))))
+ goto cleanup;
- xml = virNodeDeviceGetXMLDesc(dev, 0);
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
if (!xml)
goto cleanup;
if (!def)
goto cleanup;
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
goto cleanup;
virPCIDeviceFree(pci);
cleanup:
virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
return ret;
}