diff options
author | Brent Adam <brentadamdev@gmail.com> | 2015-06-19 12:53:35 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.com> | 2015-07-08 05:30:00 -0400 |
commit | 1cc1cc92c4c4891abc48a777fb9fbc69077d5673 (patch) | |
tree | 2cf93a0390dbb12e2d76eabf1a38f85dd2a37a29 /drivers/hid/hid-multitouch.c | |
parent | c5b2b809cee8db018ac68566fe2114c175d79b5b (diff) |
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>
Diffstat (limited to 'drivers/hid/hid-multitouch.c')
-rw-r--r-- | drivers/hid/hid-multitouch.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 6a9b05b328a9..7c811252c1ce 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c | |||
@@ -778,9 +778,16 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi, | |||
778 | /* | 778 | /* |
779 | * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN" | 779 | * some egalax touchscreens have "application == HID_DG_TOUCHSCREEN" |
780 | * for the stylus. | 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 | if (field->physical == HID_DG_STYLUS) | 785 | if (field->physical == HID_DG_STYLUS) |
783 | return 0; | 786 | return 0; |
787 | else if ((field->physical == 0) && | ||
788 | (field->report->id != td->mt_report_id) && | ||
789 | (td->mt_report_id != -1)) | ||
790 | return 0; | ||
784 | 791 | ||
785 | if (field->application == HID_DG_TOUCHSCREEN || | 792 | if (field->application == HID_DG_TOUCHSCREEN || |
786 | field->application == HID_DG_TOUCHPAD) | 793 | field->application == HID_DG_TOUCHPAD) |