I think it didn't happen on older kernel because the report size 192 > 128 so the code bailed early.
Try this: diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 9993b692598f..860e21ec6a49 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1301,10 +1301,10 @@ static u32 __extract(u8 *report, unsigned offset, int n) u32 hid_field_extract(const struct hid_device *hid, u8 *report, unsigned offset, unsigned n) { - if (n > 32) { - hid_warn(hid, "hid_field_extract() called with n (%d) > 32! (%s)\n", + if (n > 256) { + hid_warn(hid, "hid_field_extract() called with n (%d) > 256! (%s)\n", n, current->comm); - n = 32; + n = 256; }
return __extract(report, offset, n);
I think it didn't happen on older kernel because the report size 192 > 128 so the code bailed early.
Try this: hid/hid- core.c b/drivers/ hid/hid- core.c .860e21ec6a49 100644 hid/hid- core.c hid/hid- core.c extract( const struct hid_device *hid, u8 *report,
unsigned offset, unsigned n) extract( ) called with n (%d) > 32! (%s)\n", extract( ) called with n (%d) > 256! (%s)\n",
n, current->comm);
diff --git a/drivers/
index 9993b692598f.
--- a/drivers/
+++ b/drivers/
@@ -1301,10 +1301,10 @@ static u32 __extract(u8 *report, unsigned offset, int n)
u32 hid_field_
{
- if (n > 32) {
- hid_warn(hid, "hid_field_
+ if (n > 256) {
+ hid_warn(hid, "hid_field_
- n = 32;
+ n = 256;
}
return __extract(report, offset, n);