From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf0-f196.google.com ([209.85.192.196]:36438 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751336AbcGMWpz (ORCPT ); Wed, 13 Jul 2016 18:45:55 -0400 Received: by mail-pf0-f196.google.com with SMTP id i123so3805473pfg.3 for ; Wed, 13 Jul 2016 15:45:55 -0700 (PDT) From: Aaron Armstrong Skomra To: linuxwacom-devel@lists.sourceforge.net, pinglinux@gmail.com, killertofu@gmail.com Cc: Aaron Armstrong Skomra , Ping Cheng , stable@vger.kernel.org, Dmitry Torokhov , Jason Gerecke , Aaron Skomra Subject: [PATCH input-wacom 3/4] backport: Input: wacom_w8001 - ignore invalid pen data packets Date: Wed, 13 Jul 2016 15:45:28 -0700 Message-Id: <1468449929-17092-3-git-send-email-skomra@gmail.com> In-Reply-To: <1468449929-17092-1-git-send-email-skomra@gmail.com> References: <1468449929-17092-1-git-send-email-skomra@gmail.com> Sender: stable-owner@vger.kernel.org List-ID: ThinkPad X60 Tablet PC (pen only device) sometime posts packets that are larger than W8001_PKTLEN_TPCPEN. NOTE: The w8001 struct has no touch_dev member in 2.6.36 or 2.6.30. Reported-by: Chris J Arges Tested-by: Chris J Arges Signed-off-by: Ping Cheng Reviewed-by: Peter Hutterer Cc: stable@vger.kernel.org Signed-off-by: Dmitry Torokhov [jason.gerecke@wacom.com: Imported into input-wacom repository (9e72ac7)] Signed-off-by: Jason Gerecke [aaron.skomra@wacom.com: backported from input-wacom repository (0ae81e81)] Signed-off-by: Aaron Skomra --- 2.6.38/wacom_w8001.c | 9 +++++++++ 3.7/wacom_w8001.c | 9 +++++++++ 2 files changed, 18 insertions(+) diff --git a/2.6.38/wacom_w8001.c b/2.6.38/wacom_w8001.c index ed04bb9..de7b8ef 100644 --- a/2.6.38/wacom_w8001.c +++ b/2.6.38/wacom_w8001.c @@ -339,6 +339,15 @@ static irqreturn_t w8001_interrupt(struct serio *serio, w8001->idx = 0; parse_multi_touch(w8001); break; + + default: + /* + * ThinkPad X60 Tablet PC (pen only device) sometimes + * sends invalid data packets that are larger than + * W8001_PKTLEN_TPCPEN. Let's start over again. + */ + if (!w8001->touch_dev && w8001->idx > W8001_PKTLEN_TPCPEN - 1) + w8001->idx = 0; } return IRQ_HANDLED; diff --git a/3.7/wacom_w8001.c b/3.7/wacom_w8001.c index b1b4127..0c9191c 100644 --- a/3.7/wacom_w8001.c +++ b/3.7/wacom_w8001.c @@ -339,6 +339,15 @@ static irqreturn_t w8001_interrupt(struct serio *serio, w8001->idx = 0; parse_multi_touch(w8001); break; + + default: + /* + * ThinkPad X60 Tablet PC (pen only device) sometimes + * sends invalid data packets that are larger than + * W8001_PKTLEN_TPCPEN. Let's start over again. + */ + if (!w8001->touch_dev && w8001->idx > W8001_PKTLEN_TPCPEN - 1) + w8001->idx = 0; } return IRQ_HANDLED; -- 1.9.1