Skip to contentSkip to conversation

clk: gpio: fix memory leak in of_gpio_clk_setup()

PATCH In review Brian Norris 2 participants 4 messages Dec 16, 2015 – Jan 1, 2016 Common clk

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 clk: gpio: fix memory leak in of_gpio_clk_setup()

Reported by Coverity.

Fixes f66541ba02d5 ("clk: gpio: Get parent clk names in of_gpio_clk_setup()")
Cc Jyri Sarha <[email protected]>
Cc Sergej Sawazki <[email protected]>
Cc Stephen Boyd <[email protected]>
---
 drivers/clk/clk-gpio.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
drivers/clk/clk-gpio.c +3 -1
index 335322dc403f..c1baa89cbf91 100644
@@ -294,8 +294,10 @@ static void __init of_gpio_clk_setup(struct device_node *node,
 	num_parents = of_clk_get_parent_count(node);
 
 	parent_names = kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
-	if (!parent_names)
+	if (!parent_names) {
+		kfree(data);
 		return;
+	}
 
 	for (i = 0; i < num_parents; i++)
 		parent_names[i] = of_clk_get_parent_name(node, i);
Signature · 1 line
2.6.0.rc2.230.g3dd15c0
#1 lore raw

PATCH 1/1 clk: gpio: handle error codes for of_clk_get_parent_count()

We might make bad memory allocations if we get (e.g.) -ENOSYS from of_clk_get_parent_count().

Noticed by Coverity.

Fixes f66541ba02d5 ("clk: gpio: Get parent clk names in of_gpio_clk_setup()")
Cc Jyri Sarha <[email protected]>
Cc Sergej Sawazki <[email protected]>
Cc Stephen Boyd <[email protected]>

---
Sorry, I noticed Coverity was complaining about 1 more.

 drivers/clk/clk-gpio.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/clk/clk-gpio.c +4 -2
index c1baa89cbf91..1767b9e3ca93 100644
@@ -287,12 +287,14 @@ static void __init of_gpio_clk_setup(struct device_node *node,
 	const char **parent_names;
 	int i, num_parents;
 
+	num_parents = of_clk_get_parent_count(node);
+	if (num_parents < 0)
+		return;
+
 	data = kzalloc(sizeof(*data), GFP_KERNEL);
 	if (!data)
 		return;
 
-	num_parents = of_clk_get_parent_count(node);
-
 	parent_names = kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
 	if (!parent_names) {
 		kfree(data);
Signature · 1 line
2.6.0.rc2.230.g3dd15c0
#2 lore raw

Re: [PATCH] clk: gpio: handle error codes for of_clk_get_parent_count()

Quoting Brian Norris (2015-12-16 10:35:03)

Quoted 8 lines

We might make bad memory allocations if we get (e.g.) -ENOSYS from of_clk_get_parent_count().
=

Noticed by Coverity.
=

Fixes f66541ba02d5 ("clk: gpio: Get parent clk names in of_gpio_clk_setu=

p()")

Quoted 4 lines
Cc Jyri Sarha <[email protected]>
Cc Sergej Sawazki <[email protected]>
Cc Stephen Boyd <[email protected]>

Thanks for the fix. Applied.

Regards,
Mike

drivers/clk/clk-gpio.c static void __init of_gpio_clk_setup(struct device_=

Quoted 13 lines

---
Sorry, I noticed Coverity was complaining about 1 more. =

 drivers/clk/clk-gpio.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

=

drivers/clk/clk-gpio.c +0 -0
index c1baa89cbf91..1767b9e3ca93 100644
@@ -287,12 +287,14 @@ static void __init of_gpio_clk_setup(struct device_=

node *node,

Quoted 22 lines
drivers/clk/clk-gpio.c +4 -2
        const char **parent_names;
        int i, num_parents;
 =
 
+       num_parents =3D of_clk_get_parent_count(node);
+       if (num_parents < 0)
+               return;
+
        data =3D kzalloc(sizeof(*data), GFP_KERNEL);
        if (!data)
                return;
 =
 
-       num_parents =3D of_clk_get_parent_count(node);
-
        parent_names =3D kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
        if (!parent_names) {
                kfree(data);

-- =

2.6.0.rc2.230.g3dd15c0
=20

#3 lore raw
In reply to Brian Norris

Quoting Brian Norris (2015-12-16 10:28:31)

Quoted 4 lines

Reported by Coverity.
=

Fixes f66541ba02d5 ("clk: gpio: Get parent clk names in of_gpio_clk_setu=

p()")

Quoted 4 lines
Cc Jyri Sarha <[email protected]>
Cc Sergej Sawazki <[email protected]>
Cc Stephen Boyd <[email protected]>

Thanks for the fix. I already applied this one:

http://lkml.kernel.org/r/<1450852439-366-1-git-send-email-sudipm.mukherjee@=
gmail.com>

Regards,
Mike

drivers/clk/clk-gpio.c static void __init of_gpio_clk_setup(struct device_n=

Quoted 10 lines
---
 drivers/clk/clk-gpio.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

=

drivers/clk/clk-gpio.c +0 -0
index 335322dc403f..c1baa89cbf91 100644
@@ -294,8 +294,10 @@ static void __init of_gpio_clk_setup(struct device_n=

ode *node,

Quoted 17 lines
drivers/clk/clk-gpio.c +3 -1
        num_parents =3D of_clk_get_parent_count(node);
 =
 
        parent_names =3D kcalloc(num_parents, sizeof(char *), GFP_KERNEL);
-       if (!parent_names)
+       if (!parent_names) {
+               kfree(data);
                return;
+       }
 =
 
        for (i =3D 0; i < num_parents; i++)
                parent_names[i] =3D of_clk_get_parent_name(node, i);

-- =

2.6.0.rc2.230.g3dd15c0
=20