diff mbox series

cpufreq: Fix kobject memleak

Message ID 815f7c7cea02e05c90d5bf678ea8717f01cc9f63.1556604312.git.viresh.kumar@linaro.org
State Accepted
Commit 4ebe36c94aed95de71a8ce6a6762226d31c938ee
Headers show
Series cpufreq: Fix kobject memleak | expand

Commit Message

Viresh Kumar April 30, 2019, 6:05 a.m. UTC
Currently the error return path from kobject_init_and_add() is not
followed by a call to kobject_put() - which means we are leaking the
kobject.

Fix it by adding a call to kobject_put() in the error path of
kobject_init_and_add().

Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

---
Tobin fixed this for schedutil already.

 drivers/cpufreq/cpufreq.c          | 1 +
 drivers/cpufreq/cpufreq_governor.c | 2 ++
 2 files changed, 3 insertions(+)

-- 
2.21.0.rc0.269.g1a574e7a288b

Comments

Tobin C. Harding April 30, 2019, 6:33 a.m. UTC | #1
On Tue, Apr 30, 2019 at 11:35:52AM +0530, Viresh Kumar wrote:
> Currently the error return path from kobject_init_and_add() is not

> followed by a call to kobject_put() - which means we are leaking the

> kobject.

> 

> Fix it by adding a call to kobject_put() in the error path of

> kobject_init_and_add().

> 

> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

> ---

> Tobin fixed this for schedutil already.


For what its worth:

 Reviewed-by: Tobin C. Harding <tobin@kernel.org>


Thanks Viresh, one less for me to do!

	Tobin
Rafael J. Wysocki May 1, 2019, 10:44 a.m. UTC | #2
On Tuesday, April 30, 2019 8:05:52 AM CEST Viresh Kumar wrote:
> Currently the error return path from kobject_init_and_add() is not

> followed by a call to kobject_put() - which means we are leaking the

> kobject.

> 

> Fix it by adding a call to kobject_put() in the error path of

> kobject_init_and_add().

> 

> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>

> ---

> Tobin fixed this for schedutil already.

> 

>  drivers/cpufreq/cpufreq.c          | 1 +

>  drivers/cpufreq/cpufreq_governor.c | 2 ++

>  2 files changed, 3 insertions(+)

> 

> diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c

> index e10922709d13..bbf79544d0ad 100644

> --- a/drivers/cpufreq/cpufreq.c

> +++ b/drivers/cpufreq/cpufreq.c

> @@ -1098,6 +1098,7 @@ static struct cpufreq_policy *cpufreq_policy_alloc(unsigned int cpu)

>  				   cpufreq_global_kobject, "policy%u", cpu);

>  	if (ret) {

>  		pr_err("%s: failed to init policy->kobj: %d\n", __func__, ret);

> +		kobject_put(&policy->kobj);

>  		goto err_free_real_cpus;

>  	}

>  

> diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c

> index ffa9adeaba31..9d1d9bf02710 100644

> --- a/drivers/cpufreq/cpufreq_governor.c

> +++ b/drivers/cpufreq/cpufreq_governor.c

> @@ -459,6 +459,8 @@ int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)

>  	/* Failure, so roll back. */

>  	pr_err("initialization failed (dbs_data kobject init error %d)\n", ret);

>  

> +	kobject_put(&dbs_data->attr_set.kobj);

> +

>  	policy->governor_data = NULL;

>  

>  	if (!have_governor_per_policy())

> 


Applied, thanks!
diff mbox series

Patch

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index e10922709d13..bbf79544d0ad 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -1098,6 +1098,7 @@  static struct cpufreq_policy *cpufreq_policy_alloc(unsigned int cpu)
 				   cpufreq_global_kobject, "policy%u", cpu);
 	if (ret) {
 		pr_err("%s: failed to init policy->kobj: %d\n", __func__, ret);
+		kobject_put(&policy->kobj);
 		goto err_free_real_cpus;
 	}
 
diff --git a/drivers/cpufreq/cpufreq_governor.c b/drivers/cpufreq/cpufreq_governor.c
index ffa9adeaba31..9d1d9bf02710 100644
--- a/drivers/cpufreq/cpufreq_governor.c
+++ b/drivers/cpufreq/cpufreq_governor.c
@@ -459,6 +459,8 @@  int cpufreq_dbs_governor_init(struct cpufreq_policy *policy)
 	/* Failure, so roll back. */
 	pr_err("initialization failed (dbs_data kobject init error %d)\n", ret);
 
+	kobject_put(&dbs_data->attr_set.kobj);
+
 	policy->governor_data = NULL;
 
 	if (!have_governor_per_policy())