[PATCH 1/3] clk: imx: imx8qxp-lpcg: Reject duplicate clock indices
Abel Vesa
abel.vesa at oss.qualcomm.com
Mon Nov 2 03:48:49 PST 2026
imx_lpcg_parse_clks_from_dt() stores each clock it registers in
clk_hws[bit_offset / 4], as every clock output of an LPCG owns a 4-bit
field. Nothing checks that the clock-indices property names each field
only once, though. If two entries fall into the same field, the second
registration overwrites the first one in clk_hws[], leaking it, and if
a later step fails, the error path computes the same index for both
entries and unregisters the second clock twice.
Reject a bit offset whose field already has a clock registered.
Fixes: d5f1e6a2bb61 ("clk: imx: imx8qxp-lpcg: add parsing clocks from device tree")
Cc: stable at vger.kernel.org
Reported-by: Sashiko <sashiko-bot at kernel.org>
Closes: https://sashiko.dev/#/bug/linux-07b8d98e-feb9-4c88-afb6-3b5e0b05dc00
Signed-off-by: Abel Vesa <abel.vesa at oss.qualcomm.com>
---
drivers/clk/imx/clk-imx8qxp-lpcg.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/drivers/clk/imx/clk-imx8qxp-lpcg.c b/drivers/clk/imx/clk-imx8qxp-lpcg.c
index f0cf6cf91899..e57e7bc074a9 100644
--- a/drivers/clk/imx/clk-imx8qxp-lpcg.c
+++ b/drivers/clk/imx/clk-imx8qxp-lpcg.c
@@ -251,6 +251,19 @@ static int imx_lpcg_parse_clks_from_dt(struct platform_device *pdev,
goto unreg;
}
+ /*
+ * Each clock output owns a 4-bit field, so two bit offsets in
+ * the same field would describe the same clock. Registering it
+ * twice would leak the first registration, and the error path
+ * would then unregister the second one twice.
+ */
+ if (clk_hws[idx]) {
+ dev_warn(&pdev->dev, "duplicate bit offset of clock %d\n",
+ i);
+ ret = -EINVAL;
+ goto unreg;
+ }
+
clk_hws[idx] = imx_clk_lpcg_scu_dev(&pdev->dev, output_names[i],
parent_names[i], 0, base,
bit_offset[i], false);
--
2.54.0
More information about the linux-arm-kernel
mailing list