Commit 554962405cb18a3e624edf05b6257eaf9273810c
Committed by
Anthony Liguori
1 parent
1fa63e43
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>
Showing
1 changed file
with
9 additions
and
9 deletions
usb-linux.c
... | ... | @@ -1265,6 +1265,15 @@ static int usb_host_scan(void *opaque, USBScanFunc *func) |
1265 | 1265 | |
1266 | 1266 | /* only check the host once */ |
1267 | 1267 | if (!usb_fs_type) { |
1268 | + dir = opendir(USBSYSBUS_PATH "/devices"); | |
1269 | + if (dir) { | |
1270 | + /* devices found in /dev/bus/usb/ (yes - not a mistake!) */ | |
1271 | + strcpy(devpath, USBDEVBUS_PATH); | |
1272 | + usb_fs_type = USB_FS_SYS; | |
1273 | + closedir(dir); | |
1274 | + dprintf(USBDBG_DEVOPENED, USBSYSBUS_PATH); | |
1275 | + goto found_devices; | |
1276 | + } | |
1268 | 1277 | f = fopen(USBPROCBUS_PATH "/devices", "r"); |
1269 | 1278 | if (f) { |
1270 | 1279 | /* devices found in /proc/bus/usb/ */ |
... | ... | @@ -1284,15 +1293,6 @@ static int usb_host_scan(void *opaque, USBScanFunc *func) |
1284 | 1293 | dprintf(USBDBG_DEVOPENED, USBDEVBUS_PATH); |
1285 | 1294 | goto found_devices; |
1286 | 1295 | } |
1287 | - dir = opendir(USBSYSBUS_PATH "/devices"); | |
1288 | - if (dir) { | |
1289 | - /* devices found in /dev/bus/usb/ (yes - not a mistake!) */ | |
1290 | - strcpy(devpath, USBDEVBUS_PATH); | |
1291 | - usb_fs_type = USB_FS_SYS; | |
1292 | - closedir(dir); | |
1293 | - dprintf(USBDBG_DEVOPENED, USBSYSBUS_PATH); | |
1294 | - goto found_devices; | |
1295 | - } | |
1296 | 1296 | found_devices: |
1297 | 1297 | if (!usb_fs_type) { |
1298 | 1298 | monitor_printf(mon, "husb: unable to access USB devices\n"); | ... | ... |