]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/cpufreq/pasemi-cpufreq.c
cpufreq/pasemi: fix use-after-free in pas_cpufreq_cpu_init()
[linux.git] / drivers / cpufreq / pasemi-cpufreq.c
index 6b1e4abe32483d80f0af0db9cb0db43cc4a3dcfa..c66f566a854cb6775242df8a2078ee217269e260 100644 (file)
@@ -131,10 +131,18 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
        int err = -ENODEV;
 
        cpu = of_get_cpu_node(policy->cpu, NULL);
+       if (!cpu)
+               goto out;
 
+       max_freqp = of_get_property(cpu, "clock-frequency", NULL);
        of_node_put(cpu);
-       if (!cpu)
+       if (!max_freqp) {
+               err = -EINVAL;
                goto out;
+       }
+
+       /* we need the freq in kHz */
+       max_freq = *max_freqp / 1000;
 
        dn = of_find_compatible_node(NULL, NULL, "1682m-sdc");
        if (!dn)
@@ -171,16 +179,6 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
        }
 
        pr_debug("init cpufreq on CPU %d\n", policy->cpu);
-
-       max_freqp = of_get_property(cpu, "clock-frequency", NULL);
-       if (!max_freqp) {
-               err = -EINVAL;
-               goto out_unmap_sdcpwr;
-       }
-
-       /* we need the freq in kHz */
-       max_freq = *max_freqp / 1000;
-
        pr_debug("max clock-frequency is at %u kHz\n", max_freq);
        pr_debug("initializing frequency table\n");
 
@@ -196,10 +194,8 @@ static int pas_cpufreq_cpu_init(struct cpufreq_policy *policy)
        policy->cur = pas_freqs[cur_astate].frequency;
        ppc_proc_freq = policy->cur * 1000ul;
 
-       return cpufreq_generic_init(policy, pas_freqs, get_gizmo_latency());
-
-out_unmap_sdcpwr:
-       iounmap(sdcpwr_mapbase);
+       cpufreq_generic_init(policy, pas_freqs, get_gizmo_latency());
+       return 0;
 
 out_unmap_sdcasr:
        iounmap(sdcasr_mapbase);