is there a reason "usbhid.quirks" parameter is not root writable?

Greg KH greg at kroah.com
Thu Nov 12 19:44:35 EST 2015


On Thu, Nov 12, 2015 at 03:15:41AM -0700, Robert P. J. Day wrote:
> 
>   short form: is there some reason that the usbhid "quirks" parameter
> is not by default compiled to be writable in case you wanted to adjust
> those values on a running system?
> 
>   long form: i have a USB device that, sadly, is automatically claimed
> by the usbhid driver upon insertion, and i want to prevent that so it
> behaves as a regular USB device. from what i've read, the solution is
> to, at boot time, add the kernel command line parameter:
> 
>   usbhid.quirks=0x2123:0x1010:0x04
> 
> that's fine if i want to reboot so that that takes effect, but it
> would of course be convenient if i could add that info to
> /sys/module/usbhid/parameters/quirks at run-time. currently, on my
> fedora 22 system:
> 
> $ cat /sys/module/usbhid/parameters/quirks
> (null),(null),(null),(null)
> $
> 
> with permissions:
> 
> $ ls -l /sys/module/usbhid/parameters/quirks
> -r--r--r--. 1 root root 4096 Nov 12 02:41 /sys/module/usbhid/parameters/quirks
> $
> 
> and i can see in drivers/hid/usbhid/hid-core.c the fact that that
> array is defined as non-writable:
> 
> /* Quirks specified at module load time */
> static char *quirks_param[MAX_USBHID_BOOT_QUIRKS];
> module_param_array_named(quirks, quirks_param, charp, NULL, 0444);
> MODULE_PARM_DESC(quirks, "Add/modify USB HID quirks by specifying "
>                 " quirks=vendorID:productID:quirks"
>                 " where vendorID, productID, and quirks are all in"
>                 " 0x-prefixed hex");
> 
> so the obvious(?) question is, is there some reason that that
> parameter is defined as read-only rather than, say, writable by root?
> would it not be useful to be able to modify that parameter at
> run-time? or is there something about that parameter for which that
> would be a really bad idea?

You can add a runtime quirk to the device itself when it shows up in
sysfs for the hid driver.  Use that instead of the module parameter for
that specific device.

hope this helps,

greg k-h



More information about the Kernelnewbies mailing list