Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

HID: core: fix dmesg flooding if report field larger than 32bit

Only warn once of oversize hid report value field

On HP spectre x360 convertible the message:
hid-sensor-hub 001F:8087:0AC2.0002: hid_field_extract() called with n (192) > 32! (kworker/1:2)
is continually printed many times per second, crowding out all else.
Protect dmesg by printing the warning only one time.

The size of the hid report field data structure should probably be increased.
The data structure is treated as a u32 in Linux, but an unlimited number
of bits in the USB hid spec, so there is some rearchitecture needed now that
devices are sending more than 32 bits.

Signed-off-by: Joshua Clayton <stillcompiling@gmail.com>
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>

authored by

Joshua Clayton and committed by
Benjamin Tissoires
0af10eed aaeabb12

+2 -2
+2 -2
drivers/hid/hid-core.c
··· 1311 1311 unsigned offset, unsigned n) 1312 1312 { 1313 1313 if (n > 32) { 1314 - hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n", 1315 - n, current->comm); 1314 + hid_warn_once(hid, "%s() called with n (%d) > 32! (%s)\n", 1315 + __func__, n, current->comm); 1316 1316 n = 32; 1317 1317 } 1318 1318