Re: [PATCH v2] iio: light: isl29028: fix runtime PM reference leak on error paths
From: Joshua Crofts
Date: Mon Sep 07 2026 - 03:41:32 EST
On Mon, 7 Sep 2026 00:37:30 +0200
Fabio Cesari <fabio.cesari@xxxxxxxxx> wrote:
> Both isl29028_read_raw() and isl29028_write_raw() take a runtime PM
> reference with pm_runtime_resume_and_get() and are supposed to drop it
> again with pm_runtime_put_autosuspend() before returning. On their error
> paths they return directly instead, leaking the reference.
>
> The usage count is then never balanced, so the device stops entering
> autosuspend for the rest of its lifetime. The effect accumulates: every
> failed access leaks another reference.
>
> In isl29028_write_raw() this is reachable from userspace with a single
> rejected sysfs write, for example
>
> echo 200 > in_proximity_sampling_frequency
>
> which is outside the accepted [1:100] range. It returns -EINVAL with the
> reference still held. In isl29028_read_raw() the leak is reached when
> the underlying regmap access fails.
>
> Take the reference with PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND()
> instead. It is then released when the function returns, on every path
> and without an explicit call, so no error path added later can leak it
> again.
>
> This also stops the result of pm_runtime_put_autosuspend() from reaching
> userspace, which fixes a second problem: that value reports whether the
> device could be suspended right away, so -EAGAIN or -EBUSY turned a
> successful access into a failure. With CONFIG_PM=n it is a stub
> returning -ENOSYS, so every read and write fails today.
>
> PM_RUNTIME_ACQUIRE_IF_ENABLED_AUTOSUSPEND() is v6.19 and later, so this
> does not apply as-is to older trees. The adjustment there is to keep
> pm_runtime_resume_and_get() and drop the reference on the way out with
> an unchecked pm_runtime_put_autosuspend(), which fixes both the leak and
> the return value.
>
> Fixes: 2db5054ac28d ("staging: iio: isl29028: add runtime power management support")
> Suggested-by: Joshua Crofts <joshua.crofts1@xxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx> # see patch description, needs adjustments for < 6.19
> Assisted-by: LLM coccinelle
> Signed-off-by: Fabio Cesari <fabio.cesari@xxxxxxxxx>
> ---
Please don't send a new version as a reply to the previous version,
it breaks certain tooling and workflows (b4 for example).
--
Kind regards,
Joshua Crofts