mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 06:31:52 +00:00
pinctrl: st: fix leaked of_node references
The call to of_get_child_by_name returns a node pointer with refcount incremented thus it must be explicitly decremented after the last usage. Detected by coccinelle with the following warnings: ./drivers/pinctrl/pinctrl-st.c:1188:3-9: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 1175, but without a corresponding object release within this function. ./drivers/pinctrl/pinctrl-st.c:1188:3-9: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 1175, but without a corresponding object release within this function. ./drivers/pinctrl/pinctrl-st.c:1199:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 1175, but without a corresponding object release within this function. ./drivers/pinctrl/pinctrl-st.c:1199:2-8: ERROR: missing of_node_put; acquired a node pointer with refcount incremented on line 1175, but without a corresponding object release within this function. Signed-off-by: Wen Yang <wen.yang99@zte.com.cn> Cc: Patrice Chotard <patrice.chotard@st.com> Cc: Linus Walleij <linus.walleij@linaro.org> Cc: linux-gpio@vger.kernel.org Cc: linux-kernel@vger.kernel.org (open list) Reviewed-by: Patrice Chotard <patrice.chotard@st.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
44b9f86cd4
commit
483d70d73b
@ -1170,7 +1170,7 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
|
||||
struct property *pp;
|
||||
struct st_pinconf *conf;
|
||||
struct device_node *pins;
|
||||
int i = 0, npins = 0, nr_props;
|
||||
int i = 0, npins = 0, nr_props, ret = 0;
|
||||
|
||||
pins = of_get_child_by_name(np, "st,pins");
|
||||
if (!pins)
|
||||
@ -1185,7 +1185,8 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
|
||||
npins++;
|
||||
} else {
|
||||
pr_warn("Invalid st,pins in %pOFn node\n", np);
|
||||
return -EINVAL;
|
||||
ret = -EINVAL;
|
||||
goto out_put_node;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1195,8 +1196,10 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
|
||||
grp->pin_conf = devm_kcalloc(info->dev,
|
||||
npins, sizeof(*conf), GFP_KERNEL);
|
||||
|
||||
if (!grp->pins || !grp->pin_conf)
|
||||
return -ENOMEM;
|
||||
if (!grp->pins || !grp->pin_conf) {
|
||||
ret = -ENOMEM;
|
||||
goto out_put_node;
|
||||
}
|
||||
|
||||
/* <bank offset mux direction rt_type rt_delay rt_clk> */
|
||||
for_each_property_of_node(pins, pp) {
|
||||
@ -1229,9 +1232,11 @@ static int st_pctl_dt_parse_groups(struct device_node *np,
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
out_put_node:
|
||||
of_node_put(pins);
|
||||
|
||||
return 0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int st_pctl_parse_functions(struct device_node *np,
|
||||
|
Loading…
Reference in New Issue
Block a user