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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-linus-2022120801' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid

Pull HID fixes from Jiri Kosina:
"A regression fix for handling Logitech HID++ devices and memory
corruption fixes:

- regression fix (revert) for catch-all handling of Logitech HID++
Bluetooth devices; there are devices that turn out not to work with
this, and the root cause is yet to be properly understood. So we
are dropping it for now, and it will be revisited for 6.2 or 6.3
(Benjamin Tissoires)

- memory corruption fix in HID core (ZhangPeng)

- memory corruption fix in hid-lg4ff (Anastasia Belova)

- Kconfig fix for I2C_HID (Benjamin Tissoires)

- a few device-id specific quirks that piggy-back on top of the
important fixes above"

* tag 'for-linus-2022120801' of git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid:
Revert "HID: logitech-hidpp: Enable HID++ for all the Logitech Bluetooth devices"
Revert "HID: logitech-hidpp: Remove special-casing of Bluetooth devices"
HID: usbhid: Add ALWAYS_POLL quirk for some mice
HID: core: fix shift-out-of-bounds in hid_report_raw_event
HID: uclogic: Add HID_QUIRK_HIDINPUT_FORCE quirk
HID: fix I2C_HID not selected when I2C_HID_OF_ELAN is
HID: hid-lg4ff: Add check for empty lbuf
HID: ite: Enable QUIRK_TOUCHPAD_ON_OFF_REPORT on Acer Aspire Switch V 10
HID: uclogic: Fix frame templates for big endian architectures

+34 -22
+3
drivers/hid/hid-core.c
··· 1315 1315 if (!value || !n) 1316 1316 return 0; 1317 1317 1318 + if (n > 32) 1319 + n = 32; 1320 + 1318 1321 switch (n) { 1319 1322 case 8: return ((__s8)value); 1320 1323 case 16: return ((__s16)value);
+4
drivers/hid/hid-ids.h
··· 274 274 #define USB_DEVICE_ID_CH_AXIS_295 0x001c 275 275 276 276 #define USB_VENDOR_ID_CHERRY 0x046a 277 + #define USB_DEVICE_ID_CHERRY_MOUSE_000C 0x000c 277 278 #define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 278 279 #define USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR 0x0027 279 280 ··· 918 917 #define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER 0x02fd 919 918 #define USB_DEVICE_ID_MS_PIXART_MOUSE 0x00cb 920 919 #define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS 0x02e0 920 + #define USB_DEVICE_ID_MS_MOUSE_0783 0x0783 921 921 922 922 #define USB_VENDOR_ID_MOJO 0x8282 923 923 #define USB_DEVICE_ID_RETRO_ADAPTER 0x3201 ··· 1217 1215 #define USB_DEVICE_ID_SYNAPTICS_DELL_K15A 0x6e21 1218 1216 #define USB_DEVICE_ID_SYNAPTICS_ACER_ONE_S1002 0x73f4 1219 1217 #define USB_DEVICE_ID_SYNAPTICS_ACER_ONE_S1003 0x73f5 1218 + #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_017 0x73f6 1220 1219 #define USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5 0x81a7 1221 1220 1222 1221 #define USB_VENDOR_ID_TEXAS_INSTRUMENTS 0x2047 ··· 1384 1381 1385 1382 #define USB_VENDOR_ID_PRIMAX 0x0461 1386 1383 #define USB_DEVICE_ID_PRIMAX_MOUSE_4D22 0x4d22 1384 + #define USB_DEVICE_ID_PRIMAX_MOUSE_4E2A 0x4e2a 1387 1385 #define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05 1388 1386 #define USB_DEVICE_ID_PRIMAX_REZEL 0x4e72 1389 1387 #define USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F 0x4d0f
+5
drivers/hid/hid-ite.c
··· 121 121 USB_VENDOR_ID_SYNAPTICS, 122 122 USB_DEVICE_ID_SYNAPTICS_ACER_ONE_S1003), 123 123 .driver_data = QUIRK_TOUCHPAD_ON_OFF_REPORT }, 124 + /* ITE8910 USB kbd ctlr, with Synaptics touchpad connected to it. */ 125 + { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 126 + USB_VENDOR_ID_SYNAPTICS, 127 + USB_DEVICE_ID_SYNAPTICS_ACER_SWITCH5_017), 128 + .driver_data = QUIRK_TOUCHPAD_ON_OFF_REPORT }, 124 129 { } 125 130 }; 126 131 MODULE_DEVICE_TABLE(hid, ite_devices);
+6
drivers/hid/hid-lg4ff.c
··· 872 872 return -ENOMEM; 873 873 874 874 i = strlen(lbuf); 875 + 876 + if (i == 0) { 877 + kfree(lbuf); 878 + return -EINVAL; 879 + } 880 + 875 881 if (lbuf[i-1] == '\n') { 876 882 if (i == 1) { 877 883 kfree(lbuf);
+9 -19
drivers/hid/hid-logitech-hidpp.c
··· 4269 4269 mutex_destroy(&hidpp->send_mutex); 4270 4270 } 4271 4271 4272 - static const struct hid_device_id unhandled_hidpp_devices[] = { 4273 - /* Logitech Harmony Adapter for PS3, handled in hid-sony */ 4274 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_HARMONY_PS3) }, 4275 - /* Handled in hid-generic */ 4276 - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD) }, 4277 - {} 4278 - }; 4279 - 4280 - static bool hidpp_match(struct hid_device *hdev, 4281 - bool ignore_special_driver) 4282 - { 4283 - /* Refuse to handle devices handled by other HID drivers */ 4284 - return !hid_match_id(hdev, unhandled_hidpp_devices); 4285 - } 4286 - 4287 4272 #define LDJ_DEVICE(product) \ 4288 4273 HID_DEVICE(BUS_USB, HID_GROUP_LOGITECH_DJ_DEVICE, \ 4289 4274 USB_VENDOR_ID_LOGITECH, (product)) ··· 4352 4367 { /* MX5500 keyboard over Bluetooth */ 4353 4368 HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb30b), 4354 4369 .driver_data = HIDPP_QUIRK_HIDPP_CONSUMER_VENDOR_KEYS }, 4355 - 4356 - { /* And try to enable HID++ for all the Logitech Bluetooth devices */ 4357 - HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_ANY, USB_VENDOR_ID_LOGITECH, HID_ANY_ID) }, 4370 + { /* M-RCQ142 V470 Cordless Laser Mouse over Bluetooth */ 4371 + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb008) }, 4372 + { /* MX Master mouse over Bluetooth */ 4373 + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb012) }, 4374 + { /* MX Ergo trackball over Bluetooth */ 4375 + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01d) }, 4376 + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb01e) }, 4377 + { /* MX Master 3 mouse over Bluetooth */ 4378 + HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, 0xb023) }, 4358 4379 {} 4359 4380 }; 4360 4381 ··· 4374 4383 static struct hid_driver hidpp_driver = { 4375 4384 .name = "logitech-hidpp-device", 4376 4385 .id_table = hidpp_devices, 4377 - .match = hidpp_match, 4378 4386 .report_fixup = hidpp_report_fixup, 4379 4387 .probe = hidpp_probe, 4380 4388 .remove = hidpp_remove,
+3
drivers/hid/hid-quirks.c
··· 54 54 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), HID_QUIRK_NOGET }, 55 55 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), HID_QUIRK_NOGET }, 56 56 { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), HID_QUIRK_NOGET }, 57 + { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_MOUSE_000C), HID_QUIRK_ALWAYS_POLL }, 57 58 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), HID_QUIRK_NO_INIT_REPORTS }, 58 59 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPIDFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, 59 60 { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), HID_QUIRK_NO_INIT_REPORTS }, ··· 123 122 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05A), HID_QUIRK_ALWAYS_POLL }, 124 123 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06A), HID_QUIRK_ALWAYS_POLL }, 125 124 { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT }, 125 + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_MOUSE_0783), HID_QUIRK_ALWAYS_POLL }, 126 126 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), HID_QUIRK_ALWAYS_POLL }, 127 127 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS }, 128 128 { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER), HID_QUIRK_NO_INIT_REPORTS }, ··· 148 146 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN), HID_QUIRK_NO_INIT_REPORTS }, 149 147 { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, 150 148 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), HID_QUIRK_ALWAYS_POLL }, 149 + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4E2A), HID_QUIRK_ALWAYS_POLL }, 151 150 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D0F), HID_QUIRK_ALWAYS_POLL }, 152 151 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4D65), HID_QUIRK_ALWAYS_POLL }, 153 152 { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_4E22), HID_QUIRK_ALWAYS_POLL },
+1
drivers/hid/hid-uclogic-core.c
··· 192 192 * than the pen, so use QUIRK_MULTI_INPUT for all tablets. 193 193 */ 194 194 hdev->quirks |= HID_QUIRK_MULTI_INPUT; 195 + hdev->quirks |= HID_QUIRK_HIDINPUT_FORCE; 195 196 196 197 /* Allocate and assign driver data */ 197 198 drvdata = devm_kzalloc(&hdev->dev, sizeof(*drvdata), GFP_KERNEL);
+1 -1
drivers/hid/hid-uclogic-rdesc.c
··· 1193 1193 p[sizeof(btn_head)] < param_num) { 1194 1194 v = param_list[p[sizeof(btn_head)]]; 1195 1195 put_unaligned((__u8)0x2A, p); /* Usage Maximum */ 1196 - put_unaligned_le16((__force u16)cpu_to_le16(v), p + 1); 1196 + put_unaligned((__force u16)cpu_to_le16(v), (s16 *)(p + 1)); 1197 1197 p += sizeof(btn_head) + 1; 1198 1198 } else { 1199 1199 p++;
+2 -2
drivers/hid/i2c-hid/Kconfig
··· 66 66 67 67 config I2C_HID_CORE 68 68 tristate 69 - default y if I2C_HID_ACPI=y || I2C_HID_OF=y || I2C_HID_OF_GOODIX=y 70 - default m if I2C_HID_ACPI=m || I2C_HID_OF=m || I2C_HID_OF_GOODIX=m 69 + default y if I2C_HID_ACPI=y || I2C_HID_OF=y || I2C_HID_OF_ELAN=y || I2C_HID_OF_GOODIX=y 70 + default m if I2C_HID_ACPI=m || I2C_HID_OF=m || I2C_HID_OF_ELAN=m || I2C_HID_OF_GOODIX=m 71 71 select HID