mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 06:10:56 +00:00
pinctrl: devicetree: fix refcount leak in pinctrl_dt_to_map()
[ Upstream commita0cedbcc88
] 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:91d5c5060e
("pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map") Suggested-by: Dan Carpenter <dan.carpenter@linaro.org> Signed-off-by: Zeng Heng <zengheng4@huawei.com> Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org> Message-ID: <20240415105328.3651441-1-zengheng4@huawei.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
109b9ecdcb
commit
026e24cf31
1 changed files with 6 additions and 4 deletions
|
@ -220,14 +220,16 @@ int pinctrl_dt_to_map(struct pinctrl *p, struct pinctrl_dev *pctldev)
|
||||||
for (state = 0; ; state++) {
|
for (state = 0; ; state++) {
|
||||||
/* Retrieve the pinctrl-* property */
|
/* Retrieve the pinctrl-* property */
|
||||||
propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
|
propname = kasprintf(GFP_KERNEL, "pinctrl-%d", state);
|
||||||
if (!propname)
|
if (!propname) {
|
||||||
return -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
goto err;
|
||||||
|
}
|
||||||
prop = of_find_property(np, propname, &size);
|
prop = of_find_property(np, propname, &size);
|
||||||
kfree(propname);
|
kfree(propname);
|
||||||
if (!prop) {
|
if (!prop) {
|
||||||
if (state == 0) {
|
if (state == 0) {
|
||||||
of_node_put(np);
|
ret = -ENODEV;
|
||||||
return -ENODEV;
|
goto err;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue