Your message dated Thu, 14 Aug 2014 14:07:31 +0100 with message-id <[email protected]> has caused the report #758050, regarding udev: ID_VENDOR_FROM_DATABASE, ID_MODEL_FROM_DATABASE for unrecognised USB device are taken from USB hub to be marked as having been forwarded to the upstream software author(s) [email protected]
(NB: If you are a system administrator and have no idea what this message is talking about, this may indicate a serious mail system misconfiguration somewhere. Please contact [email protected] immediately.) -- 758050: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758050 Debian Bug Tracking System Contact [email protected] with problems
--- Begin Message ---I recently opened this Debian bug, for which I attach a patch that seems to work. Bug report quoted in full below. I would appreciate udev maintainers' opinions on whether this is likely to break non-USB devices, or whether there is a better way to do it. S > Steps to reproduce: plug in a USB device which isn't in the udev > hwdb, like this one: > > Bus 003 Device 017: ID 21b4:0081 > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 1.00 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 8 > idVendor 0x21b4 > idProduct 0x0081 > bcdDevice 1.20 > iManufacturer 1 AudioQuest inc. > iProduct 2 AudioQuest DragonFly > iSerial 3 (C) 2013 Wavelength Audio, ltd. > > (Yes I know that's a weird serial number, I didn't design the device.) > > Expected result: > > * ID_MODEL_FROM_DATABASE and ID_VENDOR_FROM_DATABASE are missing > * Interested applications can look up those properties using > idVendor and idProduct if they want to > > Actual result: those strings are taken from the parent device, > an Intel Corp. Integrated Rate Matching Hub (vendor 8087, product 0024): > > P: /devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.2/3-1.2:1.0/sound/card1 > E: > DEVPATH=/devices/pci0000:00/0000:00:1a.0/usb3/3-1/3-1.2/3-1.2:1.0/sound/card1 > E: ID_BUS=usb > E: ID_FOR_SEAT=sound-pci-0000_00_1a_0-usb-0_1_2_1_0 > E: ID_ID=usb-AudioQuest_inc._AudioQuest_DragonFly-00-DragonFly > E: ID_MODEL=AudioQuest_DragonFly > E: ID_MODEL_ENC=AudioQuest\x20DragonFly > E: ID_MODEL_FROM_DATABASE=Integrated Rate Matching Hub > E: ID_MODEL_ID=0081 > E: ID_PATH=pci-0000:00:1a.0-usb-0:1.2:1.0 > E: ID_PATH_TAG=pci-0000_00_1a_0-usb-0_1_2_1_0 > E: ID_REVISION=0120 > E: ID_SERIAL=AudioQuest_inc._AudioQuest_DragonFly > E: ID_TYPE=audio > E: ID_USB_DRIVER=snd-usb-audio > E: ID_USB_INTERFACES=:010100:010200: > E: ID_USB_INTERFACE_NUM=00 > E: ID_VENDOR=AudioQuest_inc. > E: ID_VENDOR_ENC=AudioQuest\x20inc. > E: ID_VENDOR_FROM_DATABASE=Intel Corp. > E: ID_VENDOR_ID=21b4 > E: SOUND_INITIALIZED=1 > E: SUBSYSTEM=sound > E: SYSTEMD_WANTS=sound.target > E: TAGS=:seat:systemd: > E: USEC_INITIALIZED=6479525776 > > This makes PulseAudio assign a silly name to this device, which shows > up in control UIs (e.g. "Integrated Rate Matching Hub Analog Stereo" in > pavucontrol and "Analog Stereo - Integrated Rate Matching Hub" in > gnome-control-center): > > index: 1 > name: > <alsa_output.usb-AudioQuest_inc._AudioQuest_DragonFly-00-DragonFly.analog-stereo> > ... > card: 1 > <alsa_card.usb-AudioQuest_inc._AudioQuest_DragonFly-00-DragonFly> > ... > properties: > ... > alsa.card_name = "AudioQuest DragonFly" > alsa.long_card_name = "AudioQuest inc. AudioQuest DragonFly at > usb-0000:00:1a.0-1.2, full speed" > ... > udev.id = > "usb-AudioQuest_inc._AudioQuest_DragonFly-00-DragonFly" > device.bus = "usb" > device.vendor.id = "21b4" > device.vendor.name = "Intel Corp." > device.product.id = "0081" > device.product.name = "Integrated Rate Matching Hub" > device.serial = "AudioQuest_inc._AudioQuest_DragonFly" > ... > device.profile.name = "analog-stereo" > device.profile.description = "Analog Stereo" > device.description = "Integrated Rate Matching Hub Analog > Stereo">From e0bb1d9cf82e397b08335e5d7107a8506849e823 Mon Sep 17 00:00:00 2001 From: Simon McVittie <[email protected]> Date: Thu, 14 Aug 2014 14:05:45 +0100 Subject: [PATCH] hwdb: stop looking at parent devices if the modalias changes This avoids claiming that an unrecognised USB device is an Intel USB hub, just because it happens to be plugged into an Intel USB hub. Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758050 --- src/udev/udev-builtin-hwdb.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/udev/udev-builtin-hwdb.c b/src/udev/udev-builtin-hwdb.c index cac97e7..ac8d2e3 100644 --- a/src/udev/udev-builtin-hwdb.c +++ b/src/udev/udev-builtin-hwdb.c @@ -89,6 +89,7 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device struct udev_device *d; char s[16]; int n = 0; + char found_modalias[16] = { 0 }; for (d = srcdev; d; d = udev_device_get_parent(d)) { const char *dsubsys; @@ -111,6 +112,16 @@ static int udev_builtin_hwdb_search(struct udev_device *dev, struct udev_device if (!modalias) continue; + /* if we already found a device with a vendor:product + * and this device has a different vendor:product, stop - + * this avoids matching the hub to which a USB device is + * attached */ + if (found_modalias[0] && !streq(modalias, found_modalias)) + break; + + /* remember that we have found a vendor:product */ + strncpy(found_modalias, modalias, sizeof(found_modalias)); + n = udev_builtin_hwdb_lookup(dev, prefix, modalias, filter, test); if (n > 0) break; -- 2.1.0.rc1
--- End Message ---

