regulator: core: Add of_node_put() before return
PATCH v2 1/1 regulator: core: Add of_node_put() before return
In function of_get_child_regulator(), the loop for_each_child_of_node() contains two mid-loop return statements. Ordinarily the loop gets the node child at the beginning of every iteration and automatically puts child after the main body has been executed. However in the case of a mid-loop return child is not put, which may cause a memory leak. Hence create a new label, err_node_put, that puts child and then returns the required value; edit the mid-loop return statements to instead go to this new label.
Issue found with Coccinelle.
---
Changes in v2:
- Create a new label to put the node and return regnode.
drivers/regulator/core.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
drivers/regulator/core.c +6 -2
@@ -381,12 +381,16 @@ static struct device_node *of_get_child_regulator(struct device_node *parent,if (!regnode) { regnode =of_get_child_regulator (child, prop_name);if (regnode) -return regnode; + goto err_node_put; }else { -return regnode; + goto err_node_put; } }return NULL ; + +err_node_put: +of_node_put (child); +return regnode; }/**
Signature · 1 line
2.19.1
Mark Brown
maintainerQuoted 3 lines · Nishka Dasgupta
In function
of_get_child_regulator(), the loopfor_each_child_of_node()contains two mid-loop return statements. Ordinarily the loop gets the node child at the beginning of every iteration and automatically puts
Please do not submit new versions of already applied patches, please submit incremental updates to the existing code. Modifying existing commits creates problems for other users building on top of those commits so it's best practice to only change pubished git commits if absolutely essential.
Quoted 11 lines · Mark Brown
Quoted 3 lines · Nishka Dasgupta
In function
of_get_child_regulator(), the loopfor_each_child_of_node()contains two mid-loop return statements. Ordinarily the loop gets the node child at the beginning of every iteration and automatically putsPlease do not submit new versions of already applied patches, please submit incremental updates to the existing code. Modifying existing commits creates problems for other users building on top of those commits so it's best practice to only change pubished git commits if absolutely essential.
I am very sorry about this; I wasn't sure whether this particular commit had been applied. Should I split the commit and resend only the change to the old commit, or should I leave it as it is?
Thanking you,
Nishka
Mark Brown
maintainerQuoted 11 lines · Nishka Dasgupta
Quoted 5 lines · Mark Brown
Please do not submit new versions of already applied patches, please submit incremental updates to the existing code. Modifying existing commits creates problems for other users building on top of those commits so it's best practice to only change pubished git commits if absolutely essential.
I am very sorry about this; I wasn't sure whether this particular commit had been applied. Should I split the commit and resend only the change to the old commit, or should I leave it as it is?
If there's any changes you think are a good idea please send a new patch for them.
PATCH v2 1/1 regulator: core: Add label to collate of_node_put() statements
In function of_get_child_regulator(), the loop for_each_child_of_node() contains two mid-loop return statements, each preceded by a statement putting child. In order to reduce this repetition, create a new label, err_node_put, that puts child and then returns the required value; edit the mid-loop return blocks to instead go to this new label.
---
Changes in v2:
- Submit this as a separate patch instead of updating a previous patch.
drivers/regulator/core.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/regulator/core.c +7 -6
@@ -380,16 +380,17 @@ static struct device_node *of_get_child_regulator(struct device_node *parent,if (!regnode) { regnode =of_get_child_regulator (child, prop_name); -if (regnode) { -of_node_put (child); -return regnode; - } +if (regnode) + goto err_node_put; }else { -of_node_put (child); -return regnode; + goto err_node_put; } }return NULL ; + +err_node_put: +of_node_put (child); +return regnode; }/**
Signature · 1 line
2.19.1
Mark Brown
maintainerApplied "regulator: core: Add label to collate of_node_put() statements" to the regulator tree
The patch
regulator: core: Add label to collate of_node_put() statements
has been applied to the regulator tree at
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator.git for-5.4
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks,
Mark
From 81eeb0a35c2e40bcaf122c6aae3be4f7d9abe201 Mon Sep 17 00:00:00 2001
From: Nishka Dasgupta <[email protected]>
Date: Thu, 15 Aug 2019 11:07:04 +0530
Subject: [PATCH] regulator: core: Add label to collate of_node_put()
statements
In function of_get_child_regulator(), the loop for_each_child_of_node() contains two mid-loop return statements, each preceded by a statement putting child. In order to reduce this repetition, create a new label, err_node_put, that puts child and then returns the required value; edit the mid-loop return blocks to instead go to this new label.
--- drivers/regulator/core.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-)
drivers/regulator/core.c +7 -6
@@ -380,16 +380,17 @@ static struct device_node *of_get_child_regulator(struct device_node *parent,if (!regnode) { regnode =of_get_child_regulator (child, prop_name); -if (regnode) { -of_node_put (child); -return regnode; - } +if (regnode) + goto err_node_put; }else { -of_node_put (child); -return regnode; + goto err_node_put; } }return NULL ; + +err_node_put: +of_node_put (child); +return regnode; }/**
Signature · 1 line
2.20.1