diff options
| author | Viresh Kumar <viresh.kumar@linaro.org> | 2019-04-30 02:05:52 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2019-04-30 04:54:23 -0400 |
| commit | 4ebe36c94aed95de71a8ce6a6762226d31c938ee (patch) | |
| tree | aeeab4c5f504e0ad0df8f2d79c526f3b01eeb611 | |
| parent | 0a0cf5988f52247259d05d6661820f6fef08a6da (diff) | |
cpufreq: Fix kobject memleak
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>
| -rw-r--r-- | drivers/cpufreq/cpufreq.c | 1 | ||||
| -rw-r--r-- | drivers/cpufreq/cpufreq_governor.c | 2 |
2 files changed, 3 insertions, 0 deletions
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c index 92604afdeec4..7ea217c88c2e 100644 --- a/drivers/cpufreq/cpufreq.c +++ b/drivers/cpufreq/cpufreq.c | |||
| @@ -1133,6 +1133,7 @@ static struct cpufreq_policy *cpufreq_policy_alloc(unsigned int cpu) | |||
| 1133 | cpufreq_global_kobject, "policy%u", cpu); | 1133 | cpufreq_global_kobject, "policy%u", cpu); |
| 1134 | if (ret) { | 1134 | if (ret) { |
| 1135 | pr_err("%s: failed to init policy->kobj: %d\n", __func__, ret); | 1135 | pr_err("%s: failed to init policy->kobj: %d\n", __func__, ret); |
| 1136 | kobject_put(&policy->kobj); | ||
| 1136 | goto err_free_real_cpus; | 1137 | goto err_free_real_cpus; |
| 1137 | } | 1138 | } |
| 1138 | 1139 | ||
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) | |||
| 459 | /* Failure, so roll back. */ | 459 | /* Failure, so roll back. */ |
| 460 | pr_err("initialization failed (dbs_data kobject init error %d)\n", ret); | 460 | pr_err("initialization failed (dbs_data kobject init error %d)\n", ret); |
| 461 | 461 | ||
| 462 | kobject_put(&dbs_data->attr_set.kobj); | ||
| 463 | |||
| 462 | policy->governor_data = NULL; | 464 | policy->governor_data = NULL; |
| 463 | 465 | ||
| 464 | if (!have_governor_per_policy()) | 466 | if (!have_governor_per_policy()) |
