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

HID: multitouch: Fix fields from pen report ID being interpreted for multitouch

Fields like HID_DG_CONTACTCOUNT are outside of the physical collection,
but within the application collection and report ID. Make sure to catch
those fields that are not part of the mt_report_id and return 0 so they
can be processed with the pen. Otherwise, the wrong HID_DG_CONTACTCOUNT
will be applied to cc_index and result in dereferencing a null pointer in
mt_touch_report.

Signed-off-by: Brent Adam <brentadam@smarttech.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>

authored by

Brent Adam and committed by
Jiri Kosina
1cc1cc92 c5b2b809

+7
+7
drivers/hid/hid-multitouch.c
··· 778 778 /* 779 779 * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN" 780 780 * for the stylus. 781 + * The check for mt_report_id ensures we don't process 782 + * HID_DG_CONTACTCOUNT from the pen report as it is outside the physical 783 + * collection, but within the report ID. 781 784 */ 782 785 if (field->physical == HID_DG_STYLUS) 786 + return 0; 787 + else if ((field->physical == 0) && 788 + (field->report->id != td->mt_report_id) && 789 + (td->mt_report_id != -1)) 783 790 return 0; 784 791 785 792 if (field->application == HID_DG_TOUCHSCREEN ||