[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com>
Date: Mon, 15 Apr 2024 18:53:28 +0800
From: Zeng Heng <zengheng4@...wei.com>
To: <linus.walleij@...aro.org>
CC: <linux-kernel@...r.kernel.org>, <xiexiuqi@...wei.com>,
<linux-gpio@...r.kernel.org>, <weiyongjun1@...wei.com>,
<dan.carpenter@...aro.org>, <liwei391@...wei.com>
Subject: [PATCH] pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
If we fail to allocate propname buffer, we need to drop the reference
count we just took. Because the pinctrl_dt_free_maps() includes the
droping operation, here we call it directly.
Fixes: 91d5c5060ee2 ("pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map")
Suggested-by: Dan Carpenter <dan.carpenter@...aro.org>
Signed-off-by: Zeng Heng <zengheng4@...wei.com>
---
drivers/pinctrl/devicetree.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/pinctrl/devicetree.c b/drivers/pinctrl/devicetree.c
index df1efc2e5202..6a94ecd6a8de 100644
--- a/drivers/pinctrl/devicetree.c
+++ b/drivers/pinctrl/devicetree.c
@@ -220,14 +220,16 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
for (state = 0; ; state++) {
/* Retrieve the pinctrl-* property */
propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
- if (!propname)
- return -ENOMEM;
+ if (!propname) {
+ ret = -ENOMEM;
+ goto err;
+ }
prop = of_find_property(np, propname, &size);
kfree(propname);
if (!prop) {
if (state == 0) {
- of_node_put(np);
- return -ENODEV;
+ ret = -ENODEV;
+ goto err;
}
break;
}
--
2.25.1
Powered by blists - more mailing lists