Skip to content

Commit 8f773bf

Browse files
Yang YingliangLinus Walleij
authored andcommitted
pinctrl: single: fix possible memory leak when pinctrl_enable() fails
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 call pcs_free_resources() if pinctrl_enable() fails. Fixes: 5038a66 ("pinctrl: core: delete incorrect free in pinctrl_enable()") Signed-off-by: Yang Yingliang <yangyingliang@huawei.com> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Link: https://lore.kernel.org/r/20240606023704.3931561-3-yangyingliang@huawei.com Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
1 parent ae1cf47 commit 8f773bf

1 file changed

Lines changed: 4 additions & 3 deletions

File tree

drivers/pinctrl/pinctrl-single.c

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1329,7 +1329,6 @@ static void pcs_irq_free(struct pcs_device *pcs)
13291329
static void pcs_free_resources(struct pcs_device *pcs)
13301330
{
13311331
pcs_irq_free(pcs);
1332-
pinctrl_unregister(pcs->pctl);
13331332

13341333
#if IS_BUILTIN(CONFIG_PINCTRL_SINGLE)
13351334
if (pcs->missing_nr_pinctrl_cells)
@@ -1879,7 +1878,7 @@ static int pcs_probe(struct platform_device *pdev)
18791878
if (ret < 0)
18801879
goto free;
18811880

1882-
ret = pinctrl_register_and_init(&pcs->desc, pcs->dev, pcs, &pcs->pctl);
1881+
ret = devm_pinctrl_register_and_init(pcs->dev, &pcs->desc, pcs, &pcs->pctl);
18831882
if (ret) {
18841883
dev_err(pcs->dev, "could not register single pinctrl driver\n");
18851884
goto free;
@@ -1912,8 +1911,10 @@ static int pcs_probe(struct platform_device *pdev)
19121911

19131912
dev_info(pcs->dev, "%i pins, size %u\n", pcs->desc.npins, pcs->size);
19141913

1915-
return pinctrl_enable(pcs->pctl);
1914+
if (pinctrl_enable(pcs->pctl))
1915+
goto free;
19161916

1917+
return 0;
19171918
free:
19181919
pcs_free_resources(pcs);
19191920

0 commit comments

Comments
 (0)