diff options
author | Mark McLoughlin <markmc@redhat.com> | 2009-07-03 09:28:02 +0100 |
---|---|---|
committer | Anthony Liguori <aliguori@us.ibm.com> | 2009-07-10 13:44:29 -0500 |
commit | 554962405cb18a3e624edf05b6257eaf9273810c (patch) | |
tree | 7c4d9cb4ddbd6dba78ed67cecc10dd892b819438 /usb-linux.c | |
parent | 1fa63e43e64596455938e09d3e6ec89eb0c4bbc8 (diff) | |
download | qemu-554962405cb18a3e624edf05b6257eaf9273810c.zip qemu-554962405cb18a3e624edf05b6257eaf9273810c.tar.gz qemu-554962405cb18a3e624edf05b6257eaf9273810c.tar.bz2 |
Prefer sysfs for USB host devices
Scanning for devices via /sys/bus/usb/devices/ and using them via the
/dev/bus/usb/<bus>/<device> character devices is the prefered method
on modern kernels, so try that first.
When using SELinux and libvirt, qemu will have access to /sys/bus/usb
but not /proc/bus/usb, so although the current code will work just
fine, it will generate SELinux AVC warnings.
See also:
https://bugzilla.redhat.com/508326
Reported-by: Daniel Berrange <berrange@redhat.com>
Signed-off-by: Mark McLoughlin <markmc@redhat.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Diffstat (limited to 'usb-linux.c')
-rw-r--r-- | usb-linux.c | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/usb-linux.c b/usb-linux.c index 67e4acd..3c724ba 100644 --- a/usb-linux.c +++ b/usb-linux.c @@ -1265,6 +1265,15 @@ static int usb_host_scan(void *opaque, USBScanFunc *func) /* only check the host once */ if (!usb_fs_type) { + dir = opendir(USBSYSBUS_PATH "/devices"); + if (dir) { + /* devices found in /dev/bus/usb/ (yes - not a mistake!) */ + strcpy(devpath, USBDEVBUS_PATH); + usb_fs_type = USB_FS_SYS; + closedir(dir); + dprintf(USBDBG_DEVOPENED, USBSYSBUS_PATH); + goto found_devices; + } f = fopen(USBPROCBUS_PATH "/devices", "r"); if (f) { /* devices found in /proc/bus/usb/ */ @@ -1284,15 +1293,6 @@ static int usb_host_scan(void *opaque, USBScanFunc *func) dprintf(USBDBG_DEVOPENED, USBDEVBUS_PATH); goto found_devices; } - dir = opendir(USBSYSBUS_PATH "/devices"); - if (dir) { - /* devices found in /dev/bus/usb/ (yes - not a mistake!) */ - strcpy(devpath, USBDEVBUS_PATH); - usb_fs_type = USB_FS_SYS; - closedir(dir); - dprintf(USBDBG_DEVOPENED, USBSYSBUS_PATH); - goto found_devices; - } found_devices: if (!usb_fs_type) { monitor_printf(mon, "husb: unable to access USB devices\n"); |