Hi,
Three fixes for unbinding and error paths. Enable also compile testing as cherry on top.
Best regards, Krzysztof
--- Krzysztof Kozlowski (4): soc: versatile: integrator: fix OF node leak in probe() error path soc: versatile: realview: fix memory leak during device remove soc: versatile: realview: fix soc_dev leak during device remove soc: versatile: enable compile testing
drivers/soc/Makefile | 2 +- drivers/soc/versatile/Kconfig | 4 ++-- drivers/soc/versatile/soc-integrator.c | 1 + drivers/soc/versatile/soc-realview.c | 20 ++++++++++++++++---- 4 files changed, 20 insertions(+), 7 deletions(-) --- base-commit: 80a76294855640056006e29988f99d46438dcd2b change-id: 20240825-soc-dev-fixes-ec0889be8379
Best regards,
Driver is leaking OF node reference obtained from of_find_matching_node().
Fixes: f956a785a282 ("soc: move SoC driver for the ARM Integrator") Cc: stable@vger.kernel.org Signed-off-by: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org --- drivers/soc/versatile/soc-integrator.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/soc/versatile/soc-integrator.c b/drivers/soc/versatile/soc-integrator.c index bab4ad87aa75..d5099a3386b4 100644 --- a/drivers/soc/versatile/soc-integrator.c +++ b/drivers/soc/versatile/soc-integrator.c @@ -113,6 +113,7 @@ static int __init integrator_soc_init(void) return -ENODEV;
syscon_regmap = syscon_node_to_regmap(np); + of_node_put(np); if (IS_ERR(syscon_regmap)) return PTR_ERR(syscon_regmap);
If device is unbound, the soc_dev should be unregistered to prevent memory leak.
Fixes: a2974c9c1f83 ("soc: add driver for the ARM RealView") Cc: stable@vger.kernel.org Signed-off-by: Krzysztof Kozlowski krzysztof.kozlowski@linaro.org --- drivers/soc/versatile/soc-realview.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/soc/versatile/soc-realview.c b/drivers/soc/versatile/soc-realview.c index d304ee69287a..cf91abe07d38 100644 --- a/drivers/soc/versatile/soc-realview.c +++ b/drivers/soc/versatile/soc-realview.c @@ -4,6 +4,7 @@ * * Author: Linus Walleij linus.walleij@linaro.org */ +#include <linux/device.h> #include <linux/init.h> #include <linux/io.h> #include <linux/slab.h> @@ -81,6 +82,13 @@ static struct attribute *realview_attrs[] = {
ATTRIBUTE_GROUPS(realview);
+static void realview_soc_socdev_release(void *data) +{ + struct soc_device *soc_dev = data; + + soc_device_unregister(soc_dev); +} + static int realview_soc_probe(struct platform_device *pdev) { struct regmap *syscon_regmap; @@ -109,6 +117,11 @@ static int realview_soc_probe(struct platform_device *pdev) if (IS_ERR(soc_dev)) return -ENODEV;
+ ret = devm_add_action_or_reset(&pdev->dev, realview_soc_socdev_release, + soc_dev); + if (ret) + return ret; + ret = regmap_read(syscon_regmap, REALVIEW_SYS_ID_OFFSET, &realview_coreid); if (ret)
On Sun, Aug 25, 2024 at 8:05 PM Krzysztof Kozlowski krzysztof.kozlowski@linaro.org wrote:
Three fixes for unbinding and error paths. Enable also compile testing as cherry on top.
Nice, patches applied. I try to send a PR for them as soon as possible as well.
Yours, Linus Walleij
linux-stable-mirror@lists.linaro.org