2019-08-08 07:08:46

by Nishka Dasgupta

[permalink] [raw]
Subject: [PATCH v2] 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.

Signed-off-by: Nishka Dasgupta <[email protected]>
---
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(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index e0c0cf462004..4a27a46ec6e7 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -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;
}

/**
--
2.19.1


2019-08-08 12:28:55

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v2] regulator: core: Add of_node_put() before return

On Thu, Aug 08, 2019 at 12:35:53PM +0530, Nishka Dasgupta wrote:
> 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

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.


Attachments:
(No filename) (589.00 B)
signature.asc (499.00 B)
Download all attachments

2019-08-13 04:29:21

by Nishka Dasgupta

[permalink] [raw]
Subject: Re: [PATCH v2] regulator: core: Add of_node_put() before return

On 08/08/19 5:57 PM, Mark Brown wrote:
> On Thu, Aug 08, 2019 at 12:35:53PM +0530, Nishka Dasgupta wrote:
>> 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
>
> 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?

Thanking you,
Nishka

2019-08-13 11:25:14

by Mark Brown

[permalink] [raw]
Subject: Re: [PATCH v2] regulator: core: Add of_node_put() before return

On Tue, Aug 13, 2019 at 09:57:47AM +0530, Nishka Dasgupta wrote:
> On 08/08/19 5:57 PM, Mark Brown wrote:

> > 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.


Attachments:
(No filename) (722.00 B)
signature.asc (499.00 B)
Download all attachments

2019-08-15 05:47:33

by Nishka Dasgupta

[permalink] [raw]
Subject: [PATCH v2] 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.

Signed-off-by: Nishka Dasgupta <[email protected]>
---
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(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 7a5d52948703..4a27a46ec6e7 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -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;
}

/**
--
2.19.1

2019-08-15 19:11:17

by Mark Brown

[permalink] [raw]
Subject: Applied "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.

Signed-off-by: Nishka Dasgupta <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Mark Brown <[email protected]>
---
drivers/regulator/core.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 7a5d52948703..4a27a46ec6e7 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -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;
}

/**
--
2.20.1