[PATCH] iio: adc: ad7779: Fix trigger reference leak in ad7779_setup_without_backend()

Wentao Liang posted 1 patch 1 week, 1 day ago
drivers/iio/adc/ad7779.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
[PATCH] iio: adc: ad7779: Fix trigger reference leak in ad7779_setup_without_backend()
Posted by Wentao Liang 1 week, 1 day ago
The reference taken with iio_trigger_get() is only dropped by
iio_dev_release() when INDIO_BUFFER_TRIGGERED is set. If
devm_iio_triggered_buffer_setup() fails before setting that mode, the
reference acquired for indio_dev->trig leaks. Move the
iio_trigger_get() after the buffer setup succeeds.

Fixes: c9a3f8c7bfcb ("drivers: iio: adc: add support for ad777x family")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 drivers/iio/adc/ad7779.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/iio/adc/ad7779.c b/drivers/iio/adc/ad7779.c
index 695cc79e78da..76834275b1ca 100644
--- a/drivers/iio/adc/ad7779.c
+++ b/drivers/iio/adc/ad7779.c
@@ -850,8 +850,6 @@ static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev
 	if (ret)
 		return ret;
 
-	indio_dev->trig = iio_trigger_get(st->trig);
-
 	init_completion(&st->completion);
 
 	ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
@@ -861,6 +859,8 @@ static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev
 	if (ret)
 		return ret;
 
+	indio_dev->trig = iio_trigger_get(st->trig);
+
 	return ad7779_spi_write_mask(st, AD7779_REG_DOUT_FORMAT,
 				     AD7779_DCLK_CLK_DIV_MSK,
 				     FIELD_PREP(AD7779_DCLK_CLK_DIV_MSK, 7));
-- 
2.34.1
Re: [PATCH] iio: adc: ad7779: Fix trigger reference leak in ad7779_setup_without_backend()
Posted by Jonathan Cameron 1 week, 1 day ago
On Wed, 16 Sep 2026 16:19:17 +0000
Wentao Liang <vulab@iscas.ac.cn> wrote:

> The reference taken with iio_trigger_get() is only dropped by
> iio_dev_release() when INDIO_BUFFER_TRIGGERED is set. If
> devm_iio_triggered_buffer_setup() fails before setting that mode, the
> reference acquired for indio_dev->trig leaks. Move the
> iio_trigger_get() after the buffer setup succeeds.
> 
> Fixes: c9a3f8c7bfcb ("drivers: iio: adc: add support for ad777x family")
> Cc: stable@vger.kernel.org
> Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
Same again.  Not this solution. Note I'm replying to all these patches
simply because others may open just one of them and not see the earlier
replies.

This is why you send one test patch (or at least put similar changes in a
series).

When something has been obviously wrong for a while in the world of LLM
review, it is worth checking earlier discussions to see why.

Jonathan

> ---
>  drivers/iio/adc/ad7779.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/iio/adc/ad7779.c b/drivers/iio/adc/ad7779.c
> index 695cc79e78da..76834275b1ca 100644
> --- a/drivers/iio/adc/ad7779.c
> +++ b/drivers/iio/adc/ad7779.c
> @@ -850,8 +850,6 @@ static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev
>  	if (ret)
>  		return ret;
>  
> -	indio_dev->trig = iio_trigger_get(st->trig);
> -
>  	init_completion(&st->completion);
>  
>  	ret = devm_iio_triggered_buffer_setup(dev, indio_dev,
> @@ -861,6 +859,8 @@ static int ad7779_setup_without_backend(struct ad7779_state *st, struct iio_dev
>  	if (ret)
>  		return ret;
>  
> +	indio_dev->trig = iio_trigger_get(st->trig);
> +
>  	return ad7779_spi_write_mask(st, AD7779_REG_DOUT_FORMAT,
>  				     AD7779_DCLK_CLK_DIV_MSK,
>  				     FIELD_PREP(AD7779_DCLK_CLK_DIV_MSK, 7));