linux/drivers/iio
Krzysztof Kozlowski 07d2390e36 iio: ak8975: Fix NULL pointer exception on early interrupt
In certain probe conditions the interrupt came right after registering
the handler causing a NULL pointer exception because of uninitialized
waitqueue:

$ udevadm trigger
i2c-gpio i2c-gpio-1: using pins 143 (SDA) and 144 (SCL)
i2c-gpio i2c-gpio-3: using pins 53 (SDA) and 52 (SCL)
Unable to handle kernel NULL pointer dereference at virtual address 00000000
pgd = e8b38000
[00000000] *pgd=00000000
Internal error: Oops: 5 [#1] SMP ARM
Modules linked in: snd_soc_i2s(+) i2c_gpio(+) snd_soc_idma snd_soc_s3c_dma snd_soc_core snd_pcm_dmaengine snd_pcm snd_timer snd soundcore ac97_bus spi_s3c64xx pwm_samsung dwc2 exynos_adc phy_exynos_usb2 exynosdrm exynos_rng rng_core rtc_s3c
CPU: 0 PID: 717 Comm: data-provider-m Not tainted 4.6.0-rc1-next-20160401-00011-g1b8d87473b9e-dirty #101
Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
(...)
(__wake_up_common) from [<c0379624>] (__wake_up+0x38/0x4c)
(__wake_up) from [<c0a41d30>] (ak8975_irq_handler+0x28/0x30)
(ak8975_irq_handler) from [<c0386720>] (handle_irq_event_percpu+0x88/0x140)
(handle_irq_event_percpu) from [<c038681c>] (handle_irq_event+0x44/0x68)
(handle_irq_event) from [<c0389c40>] (handle_edge_irq+0xf0/0x19c)
(handle_edge_irq) from [<c0385e04>] (generic_handle_irq+0x24/0x34)
(generic_handle_irq) from [<c05ee360>] (exynos_eint_gpio_irq+0x50/0x68)
(exynos_eint_gpio_irq) from [<c0386720>] (handle_irq_event_percpu+0x88/0x140)
(handle_irq_event_percpu) from [<c038681c>] (handle_irq_event+0x44/0x68)
(handle_irq_event) from [<c0389a70>] (handle_fasteoi_irq+0xb4/0x194)
(handle_fasteoi_irq) from [<c0385e04>] (generic_handle_irq+0x24/0x34)
(generic_handle_irq) from [<c03860b4>] (__handle_domain_irq+0x5c/0xb4)
(__handle_domain_irq) from [<c0301774>] (gic_handle_irq+0x54/0x94)
(gic_handle_irq) from [<c030c910>] (__irq_usr+0x50/0x80)

The bug was reproduced on exynos4412-trats2 (with a max77693 device also
using i2c-gpio) after building max77693 as a module.

Cc: <stable@vger.kernel.org>
Fixes: 94a6d5cf7c ("iio:ak8975 Implement data ready interrupt handling")
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Tested-by: Gregor Boirie <gregor.boirie@parrot.com>
Signed-off-by: Jonathan Cameron <jic23@kernel.org>
2016-04-17 12:16:36 +01:00
..
accel iio: accel: bmc150: fix endianness when reading axes 2016-04-03 11:16:11 +01:00
adc Second set of IIO fixes for the 4.6 cycle. 2016-04-04 13:45:10 -07:00
amplifiers spi: Updates for v4.4 2015-11-05 13:15:12 -08:00
buffer iio: buffer-dmaengine: Use dmaengine_terminate_sync() 2016-02-09 21:05:17 +00:00
chemical iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
common iio: st_sensors: support active-low interrupts 2016-01-10 12:35:32 +00:00
dac iio: dac: vf610_dac: Add IIO DAC driver for Vybrid SoC 2016-02-24 20:52:55 +00:00
dummy Second set of IIO new drivers, functionality and cleanups for the 4.5 cycle. 2015-12-26 17:03:33 -08:00
frequency spi: Updates for v4.4 2015-11-05 13:15:12 -08:00
gyro iio: gyro: bmg160: fix buffer read values 2016-04-03 11:21:33 +01:00
health iio: health: max30100: correct FIFO check condition 2016-03-28 10:09:58 +01:00
humidity iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
imu iio: imu: Fix inv_mpu6050 dependencies 2016-03-28 09:52:09 +01:00
light First round of IIO fixes for the 4.6 cycle. 2016-04-04 12:59:48 -07:00
magnetometer iio: ak8975: Fix NULL pointer exception on early interrupt 2016-04-17 12:16:36 +01:00
orientation iio: orientation: hid-sensor-rotation: Fix memory leak in probe() 2015-05-17 09:10:25 +01:00
potentiometer iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
pressure iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
proximity iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
temperature iio: convert to common i2c_check_functionality() return value 2016-02-27 17:17:43 +00:00
trigger iio: trigger: Introduce IIO hrtimer based trigger 2015-12-03 18:19:27 +00:00
iio_core_trigger.h
iio_core.h iio: Move buffer registration to the core 2014-12-12 12:28:31 +00:00
industrialio-buffer.c iio: fix config watermark initial value 2016-03-28 11:00:38 +01:00
industrialio-configfs.c iio:configfs: Introduce iio/configfs.h to provide a location for the configfs_subsystem 2015-12-05 16:25:30 +00:00
industrialio-core.c First round of new IIO device support, features and cleanups for the 4.6 cycle. 2016-02-01 13:10:03 -08:00
industrialio-event.c iio: event: Remove negative error code from iio_event_poll 2015-08-12 19:26:39 +01:00
industrialio-sw-trigger.c iio: core: fix ptr_ret.cocci warnings 2016-01-20 17:09:18 -08:00
industrialio-trigger.c iio: Support triggered events 2015-08-27 20:47:09 +01:00
industrialio-triggered-event.c iio: Support triggered events 2015-08-27 20:47:09 +01:00
inkern.c First set of IIO fixes for the 4.5 cycle. 2016-02-01 13:07:38 -08:00
Kconfig iio: light: add MAX30100 oximeter driver support 2015-12-12 12:14:37 +00:00
Makefile iio: light: add MAX30100 oximeter driver support 2015-12-12 12:14:37 +00:00