| From 7cd04c863f9e1655d607705455e7714f24451984 Mon Sep 17 00:00:00 2001 |
| From: frank zago <frank@zago.net> |
| Date: Mon, 26 Apr 2021 21:20:17 -0500 |
| Subject: iio: light: tcs3472: do not free unallocated IRQ |
| |
| From: frank zago <frank@zago.net> |
| |
| commit 7cd04c863f9e1655d607705455e7714f24451984 upstream. |
| |
| Allocating an IRQ is conditional to the IRQ existence, but freeing it |
| was not. If no IRQ was allocate, the driver would still try to free |
| IRQ 0. Add the missing checks. |
| |
| This fixes the following trace when the driver is removed: |
| |
| [ 100.667788] Trying to free already-free IRQ 0 |
| [ 100.667793] WARNING: CPU: 0 PID: 2315 at kernel/irq/manage.c:1826 free_irq+0x1fd/0x370 |
| ... |
| [ 100.667914] Call Trace: |
| [ 100.667920] tcs3472_remove+0x3a/0x90 [tcs3472] |
| [ 100.667927] i2c_device_remove+0x2b/0xa0 |
| |
| Signed-off-by: frank zago <frank@zago.net> |
| Link: https://lore.kernel.org/r/20210427022017.19314-2-frank@zago.net |
| Fixes: 9d2f715d592e ("iio: light: tcs3472: support out-of-threshold events") |
| Cc: <Stable@vger.kernel.org> |
| Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/iio/light/tcs3472.c | 6 ++++-- |
| 1 file changed, 4 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/iio/light/tcs3472.c |
| +++ b/drivers/iio/light/tcs3472.c |
| @@ -531,7 +531,8 @@ static int tcs3472_probe(struct i2c_clie |
| return 0; |
| |
| free_irq: |
| - free_irq(client->irq, indio_dev); |
| + if (client->irq) |
| + free_irq(client->irq, indio_dev); |
| buffer_cleanup: |
| iio_triggered_buffer_cleanup(indio_dev); |
| return ret; |
| @@ -559,7 +560,8 @@ static int tcs3472_remove(struct i2c_cli |
| struct iio_dev *indio_dev = i2c_get_clientdata(client); |
| |
| iio_device_unregister(indio_dev); |
| - free_irq(client->irq, indio_dev); |
| + if (client->irq) |
| + free_irq(client->irq, indio_dev); |
| iio_triggered_buffer_cleanup(indio_dev); |
| tcs3472_powerdown(iio_priv(indio_dev)); |
| |