Forums before death by AOL, social media and spammers... "We can't have nice things"
|    linux.debian.kernel    |    Debian kernel discussions    |    2,884 messages    |
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
|    Message 1,942 of 2,884    |
|    Benjamin Tissoires to Salvatore Bonaccorso    |
|    Bug#1122193: usb hid descriptor requirem    |
|    15 Dec 25 11:30:01    |
   
   XPost: linux.debian.bugs.dist, linux.kernel   
   From: bentiss@kernel.org   
      
   On Dec 14 2025, Salvatore Bonaccorso wrote:   
   > Hi Sam,   
   >   
   > Jiri, Benjamin, this is about a report originally done in Debian as   
   > https://bugs.debian.org/1122193 where Sam's device, a ZWO EFWmini with   
   > vendor and product id's as 03c3:1f01 is not working, usbhid not   
   > loaded.   
   >   
   > On Mon, Dec 08, 2025 at 03:03:49PM +0000, Sam Halliday wrote:   
   > > Package: linux-image-amd64   
   > > Version: 6.12.57-1   
   > > Severity: normal   
   > > Tags: patch   
   > > X-Debbugs-Cc: debian-amd64@lists.debian.org   
   > > User: debian-amd64@lists.debian.org   
   > > Usertags: amd64   
   > >   
   > > Dear Maintainer,   
   > >   
   > > I propose a patch to workaround USB HID descriptor requirements that   
   > > are stopping users from being able to use astrophotography   
   > > equipment.   
   > >   
   > > I have a usb device (an ZWO EFWmini, used for astronomy) which has   
   > > the following vendor information: 03c3:1f01 ZWO ZWO EFW   
   > >   
   > > This device is known to offer a suboptimal descriptor, e.g. see the lsusb   
   output   
   > >   
   > > Warning: Descriptor too short   
   > > HID Device Descriptor:   
   > > bLength 9   
   > > bDescriptorType 33   
   > > bcdHID 1.01   
   > > bCountryCode 0 Not supported   
   > > bNumDescriptors 2   
   > > bDescriptorType 34 (null)   
   > > wDescriptorLength 68   
   > > bDescriptorType 0 (null)   
   > > wDescriptorLength 0   
   > > Report Descriptors:   
   > > ** UNAVAILABLE **   
   > >   
   > > My software (I write it, it is GPLv3, I'm the only user, but it isn't   
   particularly relevant...) runs primarilly on a raspberry pi, which accepts   
   this with kernel 6.12.25-1+rpt1, and I've also done some desktop development   
   on archlinux (unknown kernel    
   versions but up to at least 6 months ago). I only access the hardware for   
   development from a debian desktop computer.   
   > >   
   > > Since moving to Debian 13, my hardware no longer works, with dmesg showing   
   the following error:   
   > >   
   > > [ 14.182522] usb 1-2.2: new full-speed USB device number 10 using   
   xhci_hcd   
   > > [ 14.276921] usb 1-2.2: New USB device found, idVendor=03c3,   
   idProduct=1f01, bcdDevice= 0.00   
   > > [ 14.276930] usb 1-2.2: New USB device strings: Mfr=1, Product=2,   
   SerialNumber=0   
   > > [ 14.276933] usb 1-2.2: Product: ZWO EFW   
   > > [ 14.276935] usb 1-2.2: Manufacturer: ZW0   
   > > [ 14.282951] usbhid 1-2.2:1.0: can't add hid device: -22   
   > > [ 14.282963] usbhid 1-2.2:1.0: probe with driver usbhid failed with   
   error -22   
   > >   
   > > I have tried going back as far as debian's kernel from bullseye (5.10),   
   bookworm (6.1), trixie (6.12) and backports (6.17) but it's the same error   
   every time.   
   > >   
   > > Communicating with the ZWO (the device manufacturer) support team, they   
   recommended patching the kernel, which I did, and it now works.   
   > >   
   > > I applied the following patch and built my own kernel   
   > >   
   > > ===========================================================================   
   > > --- drivers/hid/usbhid/hid-core.c.orig 2025-12-08 13:15:08.657917762 +0000   
   > > +++ drivers/hid/usbhid/hid-core.c 2025-12-08 13:16:24.293959487 +0000   
   > > @@ -1015,7 +1015,7 @@   
   > > (hdesc->bNumDescriptors - 1) * sizeof(*hcdesc)) {   
   > > dbg_hid("hid descriptor invalid, bLen=%hhu bNum=%hhu\n",   
   > > hdesc->bLength, hdesc->bNumDescriptors);   
   > > - return -EINVAL;   
   > > + // return -EINVAL;   
      
   That looks like the wrong thing to do, especialy because the 2 previous   
   commits introducing that check are to protect against out of bound   
   errors:   
   See fe7f7ac8e0c7 ("HID: usbhid: Eliminate recurrent out-of-bounds bug in   
   usbhid_parse()")   
      
   Can we get the debug output from the line above (or just add plain   
   printks in the running kernel)? I suspect we might losen the test with a   
   '<' instead of an '!='.   
      
   > > }   
   > >   
   > > hid->version = le16_to_cpu(hdesc->bcdHID);   
   > > ===========================================================================   
   > >   
   > > The new dmesg output is   
   > >   
   > > [ 366.477628] usbhid 1-2:1.0: 1 unsupported optional hid class descriptors   
   > > [ 366.478327] hid-generic 0003:03C3:1F01.0006: hiddev1,hidraw4: USB HID   
   v1.01 Device [ZW0 ZWO EFW] on usb-000   
   > >   
   > >   
   > > Apologies but I don't think I'm giving you a particularly good patch   
   > > because the author of this code clearly intended for a -EINVAL   
   > > failure. A kernel dev may prefer to create a hardware quirk (which   
   > > ideally should be enabled for 03c3:1f01 by default) to exit if the   
   > > descriptor isn't valid. I'm not a kernel developer so that's beyond   
   > > me.   
   > >   
   > > The device works perfectly fine despite the descriptor not meeting   
   > > the kernel's current requirements. And I don't believe a firmware   
   > > upgrade is possible... it's just a little motor that turns a wheel   
   > > containing photographic filters.   
   >   
   > I suspect your case can be a candidate for HID-BPF, cf.   
   > https://docs.kernel.org/hid/hid-bpf.html and you might try to fixup   
   > the required descriptors.   
      
   Unfortunatelly no. HID-BPF works for fixing HID protocol errors, but in   
   this case the device is not presented by the transport layer, so we can   
   not do anything there :(   
      
   >   
   > But I'm not entirely sure. Jiri and Benjamin is that something we   
   > could have quirk for the device or the problem tackled in some other   
   > way?   
      
   Quirking seems the wrong approach. I would be curious to know the length   
   of the binary descriptor. I suspect there is some mismatch and the end   
   is filled with 0. If the length is shorter, that's going to be a bigger   
   problem to solve.   
      
   Cheers,   
   Benjamin   
      
   >   
   > Regards,   
   > Salvatore   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   
|
[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]
(c) 1994, bbs@darkrealms.ca