| From a827a4984664308f13599a0b26c77018176d0c7c Mon Sep 17 00:00:00 2001 |
| From: Lars-Peter Clausen <lars@metafoo.de> |
| Date: Sun, 24 Oct 2021 11:27:00 +0200 |
| Subject: iio: trigger: Fix reference counting |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| From: Lars-Peter Clausen <lars@metafoo.de> |
| |
| commit a827a4984664308f13599a0b26c77018176d0c7c upstream. |
| |
| In viio_trigger_alloc() device_initialize() is used to set the initial |
| reference count of the trigger to 1. Then another get_device() is called on |
| trigger. This sets the reference count to 2 before the trigger is returned. |
| |
| iio_trigger_free(), which is the matching API to viio_trigger_alloc(), |
| calls put_device() which decreases the reference count by 1. But the second |
| reference count acquired in viio_trigger_alloc() is never dropped. |
| |
| As a result the iio_trigger_release() function is never called and the |
| memory associated with the trigger is never freed. |
| |
| Since there is no reason for the trigger to start its lifetime with two |
| reference counts just remove the extra get_device() in |
| viio_trigger_alloc(). |
| |
| Fixes: 5f9c035cae18 ("staging:iio:triggers. Add a reference get to the core for triggers.") |
| Signed-off-by: Lars-Peter Clausen <lars@metafoo.de> |
| Acked-by: Nuno Sรก <nuno.sa@analog.com> |
| Link: https://lore.kernel.org/r/20211024092700.6844-2-lars@metafoo.de |
| 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/industrialio-trigger.c | 1 - |
| 1 file changed, 1 deletion(-) |
| |
| --- a/drivers/iio/industrialio-trigger.c |
| +++ b/drivers/iio/industrialio-trigger.c |
| @@ -549,7 +549,6 @@ static struct iio_trigger *viio_trigger_ |
| irq_modify_status(trig->subirq_base + i, |
| IRQ_NOREQUEST | IRQ_NOAUTOEN, IRQ_NOPROBE); |
| } |
| - get_device(&trig->dev); |
| |
| return trig; |
| |