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

Commit b45432ce authored by Yang Yingliang's avatar Yang Yingliang Committed by Greg Kroah-Hartman
Browse files

pinctrl: ti: ti-iodelay: fix possible memory leak when pinctrl_enable() fails



[ Upstream commit 9b401f4a7170125365160c9af267a41ff6b39001 ]

This driver calls pinctrl_register_and_init() which is not
devm_ managed, it will leads memory leak if pinctrl_enable()
fails. Replace it with devm_pinctrl_register_and_init().
And add missing of_node_put() in the error path.

Fixes: 5038a66dad01 ("pinctrl: core: delete incorrect free in pinctrl_enable()")
Signed-off-by: default avatarYang Yingliang <yangyingliang@huawei.com>
Reviewed-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/r/20240606023704.3931561-4-yangyingliang@huawei.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 93281324
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -881,7 +881,7 @@ static int ti_iodelay_probe(struct platform_device *pdev)
	iod->desc.name = dev_name(dev);
	iod->desc.owner = THIS_MODULE;

	ret = pinctrl_register_and_init(&iod->desc, dev, iod, &iod->pctl);
	ret = devm_pinctrl_register_and_init(dev, &iod->desc, iod, &iod->pctl);
	if (ret) {
		dev_err(dev, "Failed to register pinctrl\n");
		goto exit_out;
@@ -889,7 +889,11 @@ static int ti_iodelay_probe(struct platform_device *pdev)

	platform_set_drvdata(pdev, iod);

	return pinctrl_enable(iod->pctl);
	ret = pinctrl_enable(iod->pctl);
	if (ret)
		goto exit_out;

	return 0;

exit_out:
	of_node_put(np);
@@ -906,9 +910,6 @@ static int ti_iodelay_remove(struct platform_device *pdev)
{
	struct ti_iodelay_device *iod = platform_get_drvdata(pdev);

	if (iod->pctl)
		pinctrl_unregister(iod->pctl);

	ti_iodelay_pinconf_deinit_dev(iod);

	/* Expect other allocations to be freed by devm */