mirror of https://github.com/torvalds/linux.git
cpufreq: s5pv210: fix refcount leak
In function `s5pv210_cpu_init`, a possible refcount inconsistency has been identified, causing a resource leak. Why it is a bug: 1. For every clk_get, there should be a matching clk_put on every successive error handling path. 2. After calling `clk_get(dmc1_clk)`, variable `dmc1_clk` will not be freed even if any error happens. How it is fixed: For every failed path, an extra goto label is added to ensure `dmc1_clk` will be freed regardlessly. Signed-off-by: Shuhao Fu <sfual@cse.ust.hk> Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
This commit is contained in:
parent
211ddde082
commit
2de5cb9606
|
|
@ -518,7 +518,7 @@ static int s5pv210_cpu_init(struct cpufreq_policy *policy)
|
|||
|
||||
if (policy->cpu != 0) {
|
||||
ret = -EINVAL;
|
||||
goto out_dmc1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -530,7 +530,7 @@ static int s5pv210_cpu_init(struct cpufreq_policy *policy)
|
|||
if ((mem_type != LPDDR) && (mem_type != LPDDR2)) {
|
||||
pr_err("CPUFreq doesn't support this memory type\n");
|
||||
ret = -EINVAL;
|
||||
goto out_dmc1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Find current refresh counter and frequency each DMC */
|
||||
|
|
@ -544,6 +544,8 @@ static int s5pv210_cpu_init(struct cpufreq_policy *policy)
|
|||
cpufreq_generic_init(policy, s5pv210_freq_table, 40000);
|
||||
return 0;
|
||||
|
||||
out:
|
||||
clk_put(dmc1_clk);
|
||||
out_dmc1:
|
||||
clk_put(dmc0_clk);
|
||||
out_dmc0:
|
||||
|
|
|
|||
Loading…
Reference in New Issue