mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
leds: various: fix OF node leaks
Fix OF node leaks by calling of_node_put in for_each_available_child_of_node when the cycle breaks or returns. Signed-off-by: Marek Behún <marek.behun@nic.cz> Cc: Nikita Travkin <nikitos.tr@gmail.com> Cc: Milo Kim <milo.kim@ti.com> Cc: Dan Murphy <dmurphy@ti.com> Signed-off-by: Pavel Machek <pavel@ucw.cz> Not-for-stable: untested, theoretical, insignificant leaks
This commit is contained in:
parent
99a013c840
commit
2c67756254
@ -305,8 +305,10 @@ static int aw2013_probe_dt(struct aw2013 *chip)
|
||||
|
||||
ret = devm_led_classdev_register_ext(&chip->client->dev,
|
||||
&led->cdev, &init_data);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
@ -614,8 +614,10 @@ static int lp55xx_parse_multi_led(struct device_node *np,
|
||||
for_each_available_child_of_node(np, child) {
|
||||
ret = lp55xx_parse_multi_led_child(child, cfg, child_number,
|
||||
num_colors);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
num_colors++;
|
||||
}
|
||||
|
||||
@ -681,8 +683,10 @@ struct lp55xx_platform_data *lp55xx_of_populate_pdata(struct device *dev,
|
||||
|
||||
for_each_available_child_of_node(np, child) {
|
||||
ret = lp55xx_parse_logical_led(child, cfg, i);
|
||||
if (ret)
|
||||
if (ret) {
|
||||
of_node_put(child);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
|
@ -236,8 +236,10 @@ static int omnia_leds_probe(struct i2c_client *client,
|
||||
led = &leds->leds[0];
|
||||
for_each_available_child_of_node(np, child) {
|
||||
ret = omnia_led_register(client, led, child);
|
||||
if (ret < 0)
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
|
||||
led += ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user