Your message dated Thu, 14 Aug 2014 14:07:31 +0100
with message-id <20140814130731.ga5...@reptile.pseudorandom.co.uk>
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) systemd-de...@lists.freedesktop.org
(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 ow...@bugs.debian.org
immediately.)
--
758050: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=758050
Debian Bug Tracking System
Contact ow...@bugs.debian.org 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 <simon.mcvit...@collabora.co.uk>
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 ---