android_kernel_oneplus_msm8998/drivers/input/touchscreen
Guenter Roeck 085f4ebec7 Input: elants_i2c - avoid divide by 0 errors on bad touchscreen data
commit 1c3415a06b1016a596bfe59e0cfee56c773aa958 upstream.

The following crash may be seen if bad data is received from the
touchscreen.

[ 2189.425150] elants_i2c i2c-ELAN0001:00: unknown packet ff ff ff ff
[ 2189.430738] divide error: 0000 [#1] PREEMPT SMP
[ 2189.434679] gsmi: Log Shutdown Reason 0x03
[ 2189.434689] Modules linked in: ip6t_REJECT nf_reject_ipv6 rfcomm evdi
uinput uvcvideo cmac videobuf2_vmalloc videobuf2_memops snd_hda_codec_hdmi
i2c_dev videobuf2_core snd_soc_sst_cht_bsw_rt5645 snd_hda_intel
snd_intel_sst_acpi btusb btrtl btbcm btintel bluetooth snd_soc_sst_acpi
snd_hda_codec snd_intel_sst_core snd_hwdep snd_soc_sst_mfld_platform
snd_hda_core snd_soc_rt5645 memconsole_x86_legacy memconsole zram snd_soc_rl6231
fuse ip6table_filter iwlmvm iwlwifi iwl7000_mac80211 cfg80211 iio_trig_sysfs
joydev cros_ec_sensors cros_ec_sensors_core industrialio_triggered_buffer
kfifo_buf industrialio snd_seq_midi snd_seq_midi_event snd_rawmidi snd_seq
snd_seq_device ppp_async ppp_generic slhc tun
[ 2189.434866] CPU: 0 PID: 106 Comm: irq/184-ELAN000 Tainted: G        W
3.18.0-13101-g57e8190 #1
[ 2189.434883] Hardware name: GOOGLE Ultima, BIOS Google_Ultima.7287.131.43 07/20/2016
[ 2189.434898] task: ffff88017a0b6d80 ti: ffff88017a2bc000 task.ti: ffff88017a2bc000
[ 2189.434913] RIP: 0010:[<ffffffffbecc48d5>]  [<ffffffffbecc48d5>] elants_i2c_irq+0x190/0x200
[ 2189.434937] RSP: 0018:ffff88017a2bfd98  EFLAGS: 00010293
[ 2189.434948] RAX: 0000000000000000 RBX: ffff88017a967828 RCX: ffff88017a9678e8
[ 2189.434962] RDX: 0000000000000000 RSI: 0000000000000246 RDI: 0000000000000000
[ 2189.434975] RBP: ffff88017a2bfdd8 R08: 00000000000003e8 R09: 0000000000000000
[ 2189.434989] R10: 0000000000000000 R11: 000000000044a2bd R12: ffff88017a991800
[ 2189.435001] R13: ffffffffbe8a2a53 R14: ffff88017a0b6d80 R15: ffff88017a0b6d80
[ 2189.435011] FS:  0000000000000000(0000) GS:ffff88017fc00000(0000) knlGS:0000000000000000
[ 2189.435022] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[ 2189.435030] CR2: 00007f678d94b000 CR3: 000000003f41a000 CR4: 00000000001007f0
[ 2189.435039] Stack:
[ 2189.435044]  ffff88017a2bfda8 ffff88017a9678e8 646464647a2bfdd8 0000000006e09574
[ 2189.435060]  0000000000000000 ffff88017a088b80 ffff88017a921000 ffffffffbe8a2a53
[ 2189.435074]  ffff88017a2bfe08 ffffffffbe8a2a73 ffff88017a0b6d80 0000000006e09574
[ 2189.435089] Call Trace:
[ 2189.435101]  [<ffffffffbe8a2a53>] ? irq_thread_dtor+0xa9/0xa9
[ 2189.435112]  [<ffffffffbe8a2a73>] irq_thread_fn+0x20/0x40
[ 2189.435123]  [<ffffffffbe8a2be1>] irq_thread+0x14e/0x222
[ 2189.435135]  [<ffffffffbee8cbeb>] ? __schedule+0x3b3/0x57a
[ 2189.435145]  [<ffffffffbe8a29aa>] ? wake_threads_waitq+0x2d/0x2d
[ 2189.435156]  [<ffffffffbe8a2a93>] ? irq_thread_fn+0x40/0x40
[ 2189.435168]  [<ffffffffbe87c385>] kthread+0x10e/0x116
[ 2189.435178]  [<ffffffffbe87c277>] ? __kthread_parkme+0x67/0x67
[ 2189.435189]  [<ffffffffbee900ac>] ret_from_fork+0x7c/0xb0
[ 2189.435199]  [<ffffffffbe87c277>] ? __kthread_parkme+0x67/0x67
[ 2189.435208] Code: ff ff eb 73 0f b6 bb c1 00 00 00 83 ff 03 7e 13 49 8d 7c
24 20 ba 04 00 00 00 48 c7 c6 8a cd 21 bf eb 4d 0f b6 83 c2 00 00 00 99 <f7> ff
83 f8 37 75 15 48 6b f7 37 4c 8d a3 c4 00 00 00 4c 8d ac
[ 2189.435312] RIP  [<ffffffffbecc48d5>] elants_i2c_irq+0x190/0x200
[ 2189.435323]  RSP <ffff88017a2bfd98>
[ 2189.435350] ---[ end trace f4945345a75d96dd ]---
[ 2189.443841] Kernel panic - not syncing: Fatal exception
[ 2189.444307] Kernel Offset: 0x3d800000 from 0xffffffff81000000
	(relocation range: 0xffffffff80000000-0xffffffffbfffffff)
[ 2189.444519] gsmi: Log Shutdown Reason 0x02

The problem was seen with a 3.18 based kernel, but there is no reason
to believe that the upstream code is safe.

Fixes: 66aee90088 ("Input: add support for Elan eKTH I2C touchscreens")
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2017-01-19 20:17:20 +01:00
..
88pm860x-ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
ad7877.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
ad7879-i2c.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
ad7879-spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
ad7879.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2014-12-17 10:06:02 -08:00
ad7879.h
ads7846.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-11-06 11:57:41 -08:00
ar1021_i2c.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
atmel-wm97xx.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
atmel_mxt_ts.c Input: atmel_mxt_ts - add maxtouch to I2C table for module autoload 2015-12-11 13:25:21 -08:00
auo-pixcir-ts.c Input: auo-pixcir-ts - simplify function return logic 2015-10-02 11:44:18 -07:00
bcm_iproc_tsc.c Input: add Broadcom iProc touchscreen driver 2015-03-23 11:04:48 -07:00
bu21013_ts.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
chipone_icn8318.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
colibri-vf50-ts.c Input: Add touchscreen support for Colibri VF50 2015-09-05 11:11:48 -07:00
cy8ctmg110_ts.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
cyttsp4_core.c Input: cyttsp4 - use swap() in cyttsp4_get_touch() 2015-06-11 16:47:34 -07:00
cyttsp4_core.h Input: cyttsp4 - use 16bit address for I2C/SPI communication 2013-07-06 21:57:06 -07:00
cyttsp4_i2c.c Input: cyttsp - use PTR_ERR_OR_ZERO() 2015-10-02 11:44:19 -07:00
cyttsp4_spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
cyttsp_core.c Input: touchscreen - use __maybe_unused instead of ifdef around suspend/resume 2014-11-02 00:10:07 -07:00
cyttsp_core.h Input: cyttsp4 - use 16bit address for I2C/SPI communication 2013-07-06 21:57:06 -07:00
cyttsp_i2c.c Input: cyttsp - remove unnecessary MODULE_ALIAS() 2015-09-03 10:56:19 -07:00
cyttsp_i2c_common.c Input: cyttsp - include appropriate header file in cyttsp_i2c_common.c 2013-12-15 02:54:04 -08:00
cyttsp_spi.c spi: Drop owner assignment from spi_drivers 2015-10-28 10:30:17 +09:00
da9034-ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
da9052_tsi.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
dynapro.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
edt-ft5x06.c Input: edt-ft5x06 - work around FT5506 firmware bug 2015-10-16 16:58:45 -07:00
eeti_ts.c Input: touchscreen - use __maybe_unused instead of ifdef around suspend/resume 2014-11-02 00:10:07 -07:00
egalax_ts.c Input: touchscreen - export OF module alias information 2015-07-30 11:05:37 -07:00
elants_i2c.c Input: elants_i2c - avoid divide by 0 errors on bad touchscreen data 2017-01-19 20:17:20 +01:00
elo.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
ft6236.c Input: ft6236 - change module license string to match copyright notice 2015-10-10 11:27:04 -07:00
fujitsu_ts.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
goodix.c Merge branch 'next' into for-linus 2015-09-03 10:01:44 -07:00
gunze.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
hampshire.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
hp680_ts_input.c
htcpen.c Input: htcpen - remove redundant dev_set_drvdata 2013-09-18 07:53:30 -07:00
ili210x.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2015-09-04 12:02:11 -07:00
imx6ul_tsc.c Input: imx6ul_tsc - fix controller name 2015-09-19 11:41:54 -07:00
inexio.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
intel-mid-touch.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
ipaq-micro-ts.c Input: touchscreen - use __maybe_unused instead of ifdef around suspend/resume 2014-11-02 00:10:07 -07:00
jornada720_ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
Kconfig Merge branch 'next' into for-linus 2015-11-13 11:56:45 -08:00
lpc32xx_ts.c Input: lpc32xx_ts - fix warnings caused by enabling unprepared clock 2015-10-17 11:33:05 -07:00
mainstone-wm97xx.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
Makefile Input: tsc2004 - add support for tsc2004 2015-11-03 14:54:22 -08:00
max11801_ts.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
mc13783_ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
mcs5000_ts.c Input: mcs5000_ts - remove ifdef around power management methods 2014-07-30 22:52:56 -07:00
migor_ts.c
mk712.c
mms114.c Input: mms114 - remove unneded semicolons 2015-09-19 11:39:03 -07:00
mtouch.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
of_touchscreen.c Input: of_touchscreen - switch to using device properties 2015-07-11 17:26:45 -07:00
pcap_ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
penmount.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
pixcir_i2c_ts.c Input: pixcir_i2c_ts - remove wakeirq related code from pixcir driver 2015-10-13 23:33:02 -07:00
rohm_bu21023.c Input: add support for ROHM BU21023/24 touchscreen 2015-10-05 17:50:53 -07:00
s3c2410_ts.c Input: s3c2410_ts - constify platform_device_id 2015-05-06 16:56:55 -07:00
st1232.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
stmpe-ts.c Input: stmpe-ts - enforce device tree only mode 2015-05-26 14:16:08 -07:00
sun4i-ts.c thermal: consistently use int for temperatures 2015-08-03 23:15:50 +08:00
sur40.c sur40: fix occasional oopses on device close 2016-08-20 18:09:19 +02:00
sx8654.c Input: sx8654 - fix memory allocation check 2015-05-13 10:29:33 -07:00
ti_am335x_tsc.c Input: ti_am335x_tsc - replace delta filtering with median filtering 2015-02-03 11:50:39 -08:00
touchit213.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
touchright.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
touchwin.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
tps6507x-ts.c Input: tps6507x-ts - simplify function return logic 2015-10-02 11:44:18 -07:00
tsc40.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00
tsc200x-core.c Input: tsc200x - report proper input_dev name 2016-08-10 11:49:26 +02:00
tsc200x-core.h Input: tsc200x - report proper input_dev name 2016-08-10 11:49:26 +02:00
tsc2004.c Input: tsc200x - report proper input_dev name 2016-08-10 11:49:26 +02:00
tsc2005.c Input: tsc200x - report proper input_dev name 2016-08-10 11:49:26 +02:00
tsc2007.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
ucb1400_ts.c Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input 2014-12-17 10:06:02 -08:00
usbtouchscreen.c Input: usbtouchscreen - avoid unresponsive TSC-30 touch screen 2015-07-23 14:43:17 -07:00
w90p910_ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
wacom_i2c.c Input: drop owner assignment from i2c_driver 2015-07-17 16:57:00 -07:00
wacom_w8001.c Input: wacom_w8001 - w8001_MAX_LENGTH should be 13 2016-08-10 11:49:26 +02:00
wdt87xx_i2c.c Input: wdt87xx_i2c - change the sleep time to 2500ms after the sw reset 2015-07-11 23:26:33 -07:00
wm97xx-core.c ALSA: ac97: Switch to dev_pm_ops 2015-08-21 19:27:23 +02:00
wm831x-ts.c input: touchscreen: drop owner assignment from platform_drivers 2014-10-20 16:20:41 +02:00
wm9705.c
wm9712.c Input: wm971x - fix typo in module parameter description 2014-09-09 16:52:09 -07:00
wm9713.c Input: wm971x - fix typo in module parameter description 2014-09-09 16:52:09 -07:00
zforce_ts.c Input: zforce_ts - fix dual touch recognition 2016-05-11 11:21:16 +02:00
zylonite-wm97xx.c Input: delete non-required instances of include <linux/init.h> 2014-01-06 23:23:57 -08:00