Commit 7f028caa authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski

pinctrl: samsung: Fix device node refcount leaks in S3C64xx wakeup controller init

In s3c64xx_eint_eint0_init() the for_each_child_of_node() loop is used
with a break to find a matching child node.  Although each iteration of
for_each_child_of_node puts the previous node, but early exit from loop
misses it.  This leads to leak of device node.

Cc: <stable@vger.kernel.org>
Fixes: 61dd7261 ("pinctrl: Add pinctrl-s3c64xx driver")
Signed-off-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
parent 6fbbcb05
...@@ -704,8 +704,10 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d) ...@@ -704,8 +704,10 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
return -ENODEV; return -ENODEV;
data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
if (!data) if (!data) {
of_node_put(eint0_np);
return -ENOMEM; return -ENOMEM;
}
data->drvdata = d; data->drvdata = d;
for (i = 0; i < NUM_EINT0_IRQ; ++i) { for (i = 0; i < NUM_EINT0_IRQ; ++i) {
...@@ -714,6 +716,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d) ...@@ -714,6 +716,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
irq = irq_of_parse_and_map(eint0_np, i); irq = irq_of_parse_and_map(eint0_np, i);
if (!irq) { if (!irq) {
dev_err(dev, "failed to get wakeup EINT IRQ %d\n", i); dev_err(dev, "failed to get wakeup EINT IRQ %d\n", i);
of_node_put(eint0_np);
return -ENXIO; return -ENXIO;
} }
...@@ -721,6 +724,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d) ...@@ -721,6 +724,7 @@ static int s3c64xx_eint_eint0_init(struct samsung_pinctrl_drv_data *d)
s3c64xx_eint0_handlers[i], s3c64xx_eint0_handlers[i],
data); data);
} }
of_node_put(eint0_np);
bank = d->pin_banks; bank = d->pin_banks;
for (i = 0; i < d->nr_banks; ++i, ++bank) { for (i = 0; i < d->nr_banks; ++i, ++bank) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment