Re: [PATCH v2 5/6] clk: mediatek: mt8173: fix memory leak on module removal

From: Brian Masney

Date: Tue Jul 28 2026 - 11:14:06 EST


Hi Akari,

On Tue, Jul 07, 2026 at 04:48:34PM +0900, Akari Tsuyukusa wrote:
> clk-mt8173-apmixedsys.c and clk-mt8173-infracfg.c do not call
> platform_set_drvdata() during their driver probe callback,
> but their remove callback calls platform_get_drvdata().
> This results in platform_get_drvdata() returning NULL,
> which leads to calling kfree(NULL) in mtk_free_clk_data(NULL).
> This leaves clk_data unreleased, causing a memory leak.
>
> Fix this by calling platform_set_drvdata() during probe.
>
> Fixes: 4c02c9af3cb9 ("clk: mediatek: mt8173: Break down clock drivers and allow module build")
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Akari Tsuyukusa <akkun11.open@xxxxxxxxx>
> ---
> drivers/clk/mediatek/clk-mt8173-apmixedsys.c | 2 ++
> drivers/clk/mediatek/clk-mt8173-infracfg.c | 2 ++
> 2 files changed, 4 insertions(+)
>
> diff --git a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
> index d7d416172ab3..65dc4489a09c 100644
> --- a/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
> +++ b/drivers/clk/mediatek/clk-mt8173-apmixedsys.c
> @@ -179,6 +179,8 @@ static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
> if (r)
> goto unregister_ref2usb;
>
> + platform_set_drvdata(pdev, clk_data);
> +
> return 0;
>
> unregister_ref2usb:
> diff --git a/drivers/clk/mediatek/clk-mt8173-infracfg.c b/drivers/clk/mediatek/clk-mt8173-infracfg.c
> index fa2d1d557e04..8b69009e1965 100644
> --- a/drivers/clk/mediatek/clk-mt8173-infracfg.c
> +++ b/drivers/clk/mediatek/clk-mt8173-infracfg.c
> @@ -128,6 +128,8 @@ static int clk_mt8173_infracfg_probe(struct platform_device *pdev)
> if (r)
> goto unregister_clk_hw;
>
> + platform_set_drvdata(pdev, clk_data);
> +

This patch doesn't compile.

drivers/clk/mediatek/clk-mt8173-infracfg.c: In function ‘clk_mt8173_infracfg_probe’:
drivers/clk/mediatek/clk-mt8173-infracfg.c:131:36: error: ‘clk_data’ undeclared (first use in this function); did you mean ‘clk_gate’?

Brian