USB2: ugd round bug? including patch to solve.

Daichi GOTO daichi at
Thu Jan 22 03:52:12 PST 2009

Hi USB2 folks ;-)

First I should show you my big respect. Thank you very much for your
great usb2 work. That works very well.

Using usb2, I have found a issue around uhid.  ugd will be zero-cleared
when ioctl(fd, USB_GET_REPORT_DESC, &ugd) is called.

For example, follow ioctl are used to get information of report descriptor.

     memset(&ugd, 0, sizeof(ugd));
     ugd.ugd_data = malloc(len);
     ugd.ugd_maxlen = len;

     ioctl(fd, USB_GET_REPORT_DESC, &ugd)

The information of report descriptor should be copied to ugd, but ugd is

 From my research, perphaps follow patch is good solution to solve this
problem. How do you usb2 guys make of this?  Please check and solve
this issue. Thanks :)

--- sys/dev/usb2/include/usb2_ioctl.h.orig      2009-01-22 20:11:13.000000000 +0900
+++ sys/dev/usb2/include/usb2_ioctl.h   2009-01-22 20:09:35.000000000 +0900
@@ -223,7 +223,7 @@
  #define        USB_DEVICEENUMERATE     _IOW ('U', 6, int)

  /* Generic HID device */
-#define        USB_GET_REPORT_DESC     _IOR ('U', 21, struct usb2_gen_descriptor)
+#define        USB_GET_REPORT_DESC     _IOWR('U', 21, struct usb2_gen_descriptor)
  #define        USB_SET_IMMED           _IOW ('U', 22, int)
  #define        USB_GET_REPORT          _IOWR('U', 23, struct usb2_gen_descriptor)
  #define        USB_SET_REPORT          _IOW ('U', 24, struct usb2_gen_descriptor)

   Daichi GOTO,

More information about the freebsd-current mailing list