]> git.hungrycats.org Git - linux/commitdiff
soc: versatile: realview: fix soc_dev leak during device remove
authorKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Sun, 25 Aug 2024 18:05:24 +0000 (20:05 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:33:43 +0000 (16:33 +0200)
[ Upstream commit c774f2564c0086c23f5269fd4691f233756bf075 ]

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>
Link: https://lore.kernel.org/20240825-soc-dev-fixes-v1-3-ff4b35abed83@linaro.org
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/soc/versatile/soc-realview.c

index d304ee69287aff1412cb53250c2fdd58e2c1ce95..cf91abe07d38d006aea72c66b51d669208845f71 100644 (file)
@@ -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)