| From c66eaff10d6850dd803a64e76d945f2541386bb9 Mon Sep 17 00:00:00 2001 |
| From: Viresh Kumar <viresh.kumar@linaro.org> |
| Date: Tue, 30 Apr 2019 11:35:52 +0530 |
| Subject: sched/cpufreq: Fix kobject memleak |
| |
| [ Upstream commit 9a4f26cc98d81b67ecc23b890c28e2df324e29f3 ] |
| |
| 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: Tobin C. Harding <tobin@kernel.org> |
| Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Tobin C. Harding <tobin@kernel.org> |
| Cc: Vincent Guittot <vincent.guittot@linaro.org> |
| Cc: Viresh Kumar <viresh.kumar@linaro.org> |
| Link: http://lkml.kernel.org/r/20190430001144.24890-1-tobin@kernel.org |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| 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 ef0e33e21b988..97b094963253d 100644 |
| --- a/drivers/cpufreq/cpufreq.c |
| +++ b/drivers/cpufreq/cpufreq.c |
| @@ -1103,6 +1103,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 ffa9adeaba31b..9d1d9bf02710b 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()) |
| -- |
| 2.20.1 |
| |