clk: Fix memory leak in devm_clk_notifier_register()
authorFei Shao <fshao@chromium.org>
Mon, 19 Jun 2023 03:22:53 +0000 (11:22 +0800)
committerStephen Boyd <sboyd@kernel.org>
Tue, 20 Jun 2023 19:03:21 +0000 (12:03 -0700)
devm_clk_notifier_register() allocates a devres resource for clk
notifier but didn't register that to the device, so the notifier didn't
get unregistered on device detach and the allocated resource was leaked.

Fix the issue by registering the resource through devres_add().

This issue was found with kmemleak on a Chromebook.

Fixes: 6d30d50d037d ("clk: add devm variant of clk_notifier_register")
Signed-off-by: Fei Shao <fshao@chromium.org>
Link: https://lore.kernel.org/r/20230619112253.v2.1.I13f060c10549ef181603e921291bdea95f83033c@changeid
Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Stephen Boyd <sboyd@kernel.org>
drivers/clk/clk.c

index 27c30a533759ad390b3576f8aceebe5a3c3bbfc9..ce9dbef314d5c624b9e3e691d65115a07abd09b2 100644 (file)
@@ -4695,6 +4695,7 @@ int devm_clk_notifier_register(struct device *dev, struct clk *clk,
        if (!ret) {
                devres->clk = clk;
                devres->nb = nb;
+               devres_add(dev, devres);
        } else {
                devres_free(devres);
        }