| From 65b4559ff63e76a4c94faf47b82bf8d592a0b135 Mon Sep 17 00:00:00 2001 |
| From: Viresh Kumar <viresh.kumar@linaro.org> |
| Date: Tue, 30 Apr 2019 11:35:52 +0530 |
| Subject: cpufreq: Fix kobject memleak |
| |
| [ Upstream commit 4ebe36c94aed95de71a8ce6a6762226d31c938ee ] |
| |
| 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> |
| Reviewed-by: Tobin C. Harding <tobin@kernel.org> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| 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 e10922709d139..bbf79544d0ad8 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 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 |
| |