Unverified Commit 603dff42 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!12270 pinctrl: core: fix possible memory leak when pinctrl_enable() fails

parents b4c65e94 efa95177
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
@@ -1992,6 +1992,14 @@ pinctrl_init_controller(struct pinctrl_desc *pctldesc, struct device *dev,
	return ERR_PTR(ret);
}

static void pinctrl_uninit_controller(struct pinctrl_dev *pctldev, struct pinctrl_desc *pctldesc)
{
	pinctrl_free_pindescs(pctldev, pctldesc->pins,
			      pctldesc->npins);
	mutex_destroy(&pctldev->mutex);
	kfree(pctldev);
}

static int pinctrl_claim_hogs(struct pinctrl_dev *pctldev)
{
	pctldev->p = create_pinctrl(pctldev->dev, pctldev);
@@ -2073,8 +2081,10 @@ struct pinctrl_dev *pinctrl_register(struct pinctrl_desc *pctldesc,
		return pctldev;

	error = pinctrl_enable(pctldev);
	if (error)
	if (error) {
		pinctrl_uninit_controller(pctldev, pctldesc);
		return ERR_PTR(error);
	}

	return pctldev;