continue;
if ((usb = usbGetDevice(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device)) == NULL)
+ hostdev->source.subsys.u.usb.device,
+ NULL)) == NULL)
goto cleanup;
if (usbDeviceFileIterate(usb, qemuSetupHostUsbDeviceCgroup,
continue;
usb = usbGetDevice(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device);
+ hostdev->source.subsys.u.usb.device,
+ NULL);
if (!usb) {
VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
hostdev->source.subsys.u.usb.bus,
if (vendor && bus) {
rc = usbFindDevice(vendor, product, bus, device,
+ NULL,
autoAddress ? false : mandatory,
usb);
if (rc < 0) {
if (vendor) {
usbDeviceList *devs;
- rc = usbFindDeviceByVendor(vendor, product, mandatory, &devs);
+ rc = usbFindDeviceByVendor(vendor, product, NULL, mandatory, &devs);
if (rc < 0)
return -1;
bus, device);
}
} else if (!vendor && bus) {
- if (usbFindDeviceByBus(bus, device, mandatory, usb) < 0)
+ if (usbFindDeviceByBus(bus, device, NULL, mandatory, usb) < 0)
return -1;
}
continue;
usb = usbGetDevice(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device);
+ hostdev->source.subsys.u.usb.device,
+ NULL);
if (!usb) {
VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
}
if ((usb = usbGetDevice(hostdev->source.subsys.u.usb.bus,
- hostdev->source.subsys.u.usb.device)) == NULL)
+ hostdev->source.subsys.u.usb.device,
+ NULL)) == NULL)
goto error;
data.vm = vm;
}
if (virSecurityManagerSetHostdevLabel(driver->securityManager,
- vm->def, hostdev) < 0)
+ vm->def, hostdev, NULL) < 0)
goto cleanup;
switch (hostdev->source.subsys.type) {
error:
if (virSecurityManagerRestoreHostdevLabel(driver->securityManager,
- vm->def, hostdev) < 0)
+ vm->def, hostdev, NULL) < 0)
VIR_WARN("Unable to restore host device labelling on hotplug fail");
cleanup:
if (ret < 0)
return -1;
- usb = usbGetDevice(subsys->u.usb.bus, subsys->u.usb.device);
+ usb = usbGetDevice(subsys->u.usb.bus, subsys->u.usb.device, NULL);
if (usb) {
usbDeviceListDel(driver->activeUsbHostdevs, usb);
usbFreeDevice(usb);
if (!ret) {
if (virSecurityManagerRestoreHostdevLabel(driver->securityManager,
- vm->def, detach) < 0) {
+ vm->def, detach, NULL) < 0) {
VIR_WARN("Failed to restore host device labelling");
}
virDomainHostdevRemove(vm->def, idx);
static int
AppArmorSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev)
-
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
struct SDPDOP *ptr;
int ret = -1;
switch (dev->source.subsys.type) {
case VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB: {
usbDevice *usb = usbGetDevice(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ dev->source.subsys.u.usb.device,
+ vroot);
if (!usb)
goto done;
static int
AppArmorRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED)
+ virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED,
+ const char *vroot ATTRIBUTE_UNUSED)
{
const virSecurityLabelDefPtr secdef =
static int
virSecurityDACSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
void *params[] = {mgr, def};
virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
return 0;
usb = usbGetDevice(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ dev->source.subsys.u.usb.device,
+ vroot);
if (!usb)
goto done;
static int
virSecurityDACRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
- virDomainDefPtr def ATTRIBUTE_UNUSED,
- virDomainHostdevDefPtr dev)
+ virDomainDefPtr def ATTRIBUTE_UNUSED,
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
virSecurityDACDataPtr priv = virSecurityManagerGetPrivateData(mgr);
return 0;
usb = usbGetDevice(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ dev->source.subsys.u.usb.device,
+ vroot);
if (!usb)
goto done;
for (i = 0 ; i < def->nhostdevs ; i++) {
if (virSecurityDACRestoreSecurityHostdevLabel(mgr,
def,
- def->hostdevs[i]) < 0)
+ def->hostdevs[i],
+ NULL) < 0)
rc = -1;
}
for (i = 0 ; i < def->ndisks ; i++) {
for (i = 0 ; i < def->nhostdevs ; i++) {
if (virSecurityDACSetSecurityHostdevLabel(mgr,
def,
- def->hostdevs[i]) < 0)
+ def->hostdevs[i],
+ NULL) < 0)
return -1;
}
virDomainDiskDefPtr disk);
typedef int (*virSecurityDomainRestoreHostdevLabel) (virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev);
+ virDomainHostdevDefPtr dev,
+ const char *vroot);
typedef int (*virSecurityDomainSetHostdevLabel) (virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev);
+ virDomainHostdevDefPtr dev,
+ const char *vroot);
typedef int (*virSecurityDomainSetSavedStateLabel) (virSecurityManagerPtr mgr,
virDomainDefPtr def,
const char *savefile);
int virSecurityManagerRestoreHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr vm,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
if (mgr->drv->domainRestoreSecurityHostdevLabel)
- return mgr->drv->domainRestoreSecurityHostdevLabel(mgr, vm, dev);
+ return mgr->drv->domainRestoreSecurityHostdevLabel(mgr, vm, dev, vroot);
virReportError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
int virSecurityManagerSetHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr vm,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
if (mgr->drv->domainSetSecurityHostdevLabel)
- return mgr->drv->domainSetSecurityHostdevLabel(mgr, vm, dev);
+ return mgr->drv->domainSetSecurityHostdevLabel(mgr, vm, dev, vroot);
virReportError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
return -1;
virDomainDiskDefPtr disk);
int virSecurityManagerRestoreHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev);
+ virDomainHostdevDefPtr dev,
+ const char *vroot);
int virSecurityManagerSetHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev);
+ virDomainHostdevDefPtr dev,
+ const char *vroot);
int virSecurityManagerSetSavedStateLabel(virSecurityManagerPtr mgr,
virDomainDefPtr def,
const char *savefile);
static int virSecurityDomainRestoreHostdevLabelNop(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
virDomainDefPtr vm ATTRIBUTE_UNUSED,
- virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED)
+ virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED,
+ const char *vroot ATTRIBUTE_UNUSED)
{
return 0;
}
static int virSecurityDomainSetHostdevLabelNop(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
virDomainDefPtr vm ATTRIBUTE_UNUSED,
- virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED)
+ virDomainHostdevDefPtr dev ATTRIBUTE_UNUSED,
+ const char *vroot ATTRIBUTE_UNUSED)
{
return 0;
}
static int
virSecuritySELinuxSetSecurityHostdevLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
virSecurityLabelDefPtr secdef;
return 0;
usb = usbGetDevice(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ dev->source.subsys.u.usb.device,
+ vroot);
if (!usb)
goto done;
static int
virSecuritySELinuxRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr ATTRIBUTE_UNUSED,
virDomainDefPtr def,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
virSecurityLabelDefPtr secdef;
return 0;
usb = usbGetDevice(dev->source.subsys.u.usb.bus,
- dev->source.subsys.u.usb.device);
+ dev->source.subsys.u.usb.device,
+ vroot);
if (!usb)
goto done;
for (i = 0 ; i < def->nhostdevs ; i++) {
if (virSecuritySELinuxRestoreSecurityHostdevLabel(mgr,
def,
- def->hostdevs[i]) < 0)
+ def->hostdevs[i],
+ NULL) < 0)
rc = -1;
}
for (i = 0 ; i < def->ndisks ; i++) {
for (i = 0 ; i < def->nhostdevs ; i++) {
if (virSecuritySELinuxSetSecurityHostdevLabel(mgr,
- def,
- def->hostdevs[i]) < 0)
+ def,
+ def->hostdevs[i],
+ NULL) < 0)
return -1;
}
static int
virSecurityStackSetSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr vm,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
virSecurityStackDataPtr priv = virSecurityManagerGetPrivateData(mgr);
int rc = 0;
for (; item; item = item->next) {
- if (virSecurityManagerSetHostdevLabel(item->securityManager, vm, dev) < 0)
+ if (virSecurityManagerSetHostdevLabel(item->securityManager,
+ vm,
+ dev,
+ vroot) < 0)
rc = -1;
}
static int
virSecurityStackRestoreSecurityHostdevLabel(virSecurityManagerPtr mgr,
virDomainDefPtr vm,
- virDomainHostdevDefPtr dev)
+ virDomainHostdevDefPtr dev,
+ const char *vroot)
{
virSecurityStackDataPtr priv = virSecurityManagerGetPrivateData(mgr);
virSecurityStackItemPtr item = priv->itemsHead;
int rc = 0;
for (; item; item = item->next) {
- if (virSecurityManagerRestoreHostdevLabel(item->securityManager, vm, dev) < 0)
+ if (virSecurityManagerRestoreHostdevLabel(item->securityManager,
+ vm,
+ dev,
+ vroot) < 0)
rc = -1;
}
unsigned int product,
unsigned int bus,
unsigned int devno,
+ const char *vroot,
unsigned int flags)
{
DIR *dir = NULL;
found = true;
}
- usb = usbGetDevice(found_bus, found_devno);
+ usb = usbGetDevice(found_bus, found_devno, vroot);
if (!usb)
goto cleanup;
int
usbFindDeviceByVendor(unsigned int vendor,
unsigned product,
+ const char *vroot,
bool mandatory,
usbDeviceList **devices)
{
int count;
if (!(list = usbDeviceSearch(vendor, product, 0 , 0,
+ vroot,
USB_DEVICE_FIND_BY_VENDOR)))
return -1;
int
usbFindDeviceByBus(unsigned int bus,
unsigned devno,
+ const char *vroot,
bool mandatory,
usbDevice **usb)
{
usbDeviceList *list;
if (!(list = usbDeviceSearch(0, 0, bus, devno,
+ vroot,
USB_DEVICE_FIND_BY_BUS)))
return -1;
unsigned int product,
unsigned int bus,
unsigned int devno,
+ const char *vroot,
bool mandatory,
usbDevice **usb)
{
usbDeviceList *list;
unsigned int flags = USB_DEVICE_FIND_BY_VENDOR|USB_DEVICE_FIND_BY_BUS;
- if (!(list = usbDeviceSearch(vendor, product, bus, devno, flags)))
+ if (!(list = usbDeviceSearch(vendor, product, bus, devno,
+ vroot, flags)))
return -1;
if (list->count == 0) {
usbDevice *
usbGetDevice(unsigned int bus,
- unsigned int devno)
+ unsigned int devno,
+ const char *vroot)
{
usbDevice *dev;
usbFreeDevice(dev);
return NULL;
}
- if (virAsprintf(&dev->path, USB_DEVFS "%03d/%03d",
+ if (virAsprintf(&dev->path, "%s" USB_DEVFS "%03d/%03d",
+ vroot ? vroot : "",
dev->bus, dev->dev) < 0) {
virReportOOMError();
usbFreeDevice(dev);
typedef struct _usbDeviceList usbDeviceList;
usbDevice *usbGetDevice(unsigned int bus,
- unsigned int devno);
+ unsigned int devno,
+ const char *vroot);
int usbFindDeviceByBus(unsigned int bus,
unsigned int devno,
+ const char *vroot,
bool mandatory,
usbDevice **usb);
int usbFindDeviceByVendor(unsigned int vendor,
unsigned int product,
+ const char *vroot,
bool mandatory,
usbDeviceList **devices);
unsigned int product,
unsigned int bus,
unsigned int devno,
+ const char *vroot,
bool mandatory,
usbDevice **usb);