Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c37bca2c authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Greg Kroah-Hartman
Browse files

soc: versatile: realview: fix soc_dev leak during device remove



[ Upstream commit c774f2564c0086c23f5269fd4691f233756bf075 ]

If device is unbound, the soc_dev should be unregistered to prevent
memory leak.

Fixes: a2974c9c ("soc: add driver for the ARM RealView")
Cc: stable@vger.kernel.org
Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Link: https://lore.kernel.org/20240825-soc-dev-fixes-v1-3-ff4b35abed83@linaro.org


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 0f167c14
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -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>
@@ -79,6 +80,13 @@ static ssize_t realview_get_build(struct device *dev,
static struct device_attribute realview_build_attr =
	__ATTR(build,  S_IRUGO, realview_get_build,  NULL);

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;
@@ -106,6 +114,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)