[PATCH] rtc: meson: fix refcount leak in meson_rtc_get_bus
WenTao Liang <[email protected]>
| Newsgroups | org.infradead.lists.linux-amlogic,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-rtc,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
In meson_rtc_get_bus(), reset_control_reset() is called to trigger a hardware reset when the serial bus is not ready. The function may retry up to three times, but neither the successful nor the failure path calls reset_control_rearm() to balance the reference count, leaking the triggered_count on shared reset controls. Fix this by adding reset_control_rearm() after reset_control_reset() on both the error return path and the success path within the retry loop, ensuring the reset control can be re-triggered on subsequent bus acquisition attempts. Cc: [email protected] Fixes: d8fe6009aa3e ("rtc: support for the Amlogic Meson RTC") Signed-off-by: WenTao Liang <[email protected]> --- drivers/rtc/rtc-meson.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-meson.c b/drivers/rtc/rtc-meson.c index 21eceb9e2e13..729384dceb12 100644 --- a/drivers/rtc/rtc-meson.c +++ b/drivers/rtc/rtc-meson.c @@ -146,8 +146,12 @@ static int meson_rtc_get_bus(struct meson_rtc *rtc) dev_warn(rtc->dev, "failed to get bus, resetting RTC\n"); ret = reset_control_reset(rtc->reset); - if (ret) + if (ret) { + reset_control_rearm(rtc->reset); return ret; + } + + reset_control_rearm(rtc->reset); } dev_err(rtc->dev, "bus is not ready\n"); -- 2.50.1 (Apple Git-155) _______________________________________________ linux-amlogic mailing list [email protected] http://lists.infradead.org/mailman/listinfo/linux-amlogic