[PATCH] iio: light: gp2ap002: Fix runtime PM leak in gp2ap002_read_raw()

Wentao Liang posted 1 patch 1 week, 1 day ago
drivers/iio/light/gp2ap002.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
[PATCH] iio: light: gp2ap002: Fix runtime PM leak in gp2ap002_read_raw()
Posted by Wentao Liang 1 week, 1 day ago
pm_runtime_get_sync() increments the usage counter even on failure,
so every successful call must be paired with a put. A failure of
gp2ap002_get_lux() returned early and skipped the paired
pm_runtime_put_autosuspend(), permanently preventing runtime
suspend. Jump to the common exit that releases the reference.

Fixes: f6dbf83c17cb ("iio: light: gp2ap002: Take runtime PM reference on light read")
Cc: stable@vger.kernel.org
Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>
---
 drivers/iio/light/gp2ap002.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/iio/light/gp2ap002.c b/drivers/iio/light/gp2ap002.c
index a0d8a58f2704..886accf5e859 100644
--- a/drivers/iio/light/gp2ap002.c
+++ b/drivers/iio/light/gp2ap002.c
@@ -258,7 +258,7 @@ static int gp2ap002_read_raw(struct iio_dev *indio_dev,
 		case IIO_LIGHT:
 			ret = gp2ap002_get_lux(gp2ap002);
 			if (ret < 0)
-				return ret;
+				goto out;
 			*val = ret;
 			ret = IIO_VAL_INT;
 			goto out;
-- 
2.34.1
Re: [PATCH] iio: light: gp2ap002: Fix runtime PM leak in gp2ap002_read_raw()
Posted by Linus Walleij 1 week, 1 day ago
On Wed, Sep 16, 2026 at 6:37 PM Wentao Liang <vulab@iscas.ac.cn> wrote:

> pm_runtime_get_sync() increments the usage counter even on failure,
> so every successful call must be paired with a put. A failure of
> gp2ap002_get_lux() returned early and skipped the paired
> pm_runtime_put_autosuspend(), permanently preventing runtime
> suspend. Jump to the common exit that releases the reference.
>
> Fixes: f6dbf83c17cb ("iio: light: gp2ap002: Take runtime PM reference on light read")
> Cc: stable@vger.kernel.org

IMO not stable material.

> Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>

Reviewed-by: Linus Walleij <linusw@kernel.org>

Yours,
Linus Walleij
Re: [PATCH] iio: light: gp2ap002: Fix runtime PM leak in gp2ap002_read_raw()
Posted by Jonathan Cameron 1 week, 1 day ago
On Wed, 16 Sep 2026 19:34:56 +0200
Linus Walleij <linusw@kernel.org> wrote:

> On Wed, Sep 16, 2026 at 6:37 PM Wentao Liang <vulab@iscas.ac.cn> wrote:
> 
> > pm_runtime_get_sync() increments the usage counter even on failure,
> > so every successful call must be paired with a put. A failure of
> > gp2ap002_get_lux() returned early and skipped the paired
> > pm_runtime_put_autosuspend(), permanently preventing runtime
> > suspend. Jump to the common exit that releases the reference.
> >
> > Fixes: f6dbf83c17cb ("iio: light: gp2ap002: Take runtime PM reference on light read")
> > Cc: stable@vger.kernel.org  
> 
> IMO not stable material.

Also that's not what upstream looks like:

https://elixir.bootlin.com/linux/v7.2.5/source/drivers/iio/light/gp2ap002.c#L246

Wentao, that function would definitely benefit form use of the
ACQUIRE macros in pm_runtime.h though if you do want to
improve it.

> 
> > Signed-off-by: Wentao Liang <vulab@iscas.ac.cn>  
> 
> Reviewed-by: Linus Walleij <linusw@kernel.org>
> 
> Yours,
> Linus Walleij