tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   8b83369ddcb3fb9cab5c1088987ce477565bb630
commit: 67fc209b527d023db4d087c68e44e9790aa089ef cpufreq: qcom-hw: drop 
devm_xxx() calls from init/exit hooks
config: arm64-randconfig-m031-20210226 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>
Reported-by: Dan Carpenter <dan.carpen...@oracle.com>

smatch warnings:
drivers/cpufreq/qcom-cpufreq-hw.c:377 qcom_cpufreq_hw_cpu_init() error: we 
previously assumed 'data' could be null (see line 327)
drivers/cpufreq/qcom-cpufreq-hw.c:377 qcom_cpufreq_hw_cpu_init() error: 
dereferencing freed memory 'data'

vim +/data +377 drivers/cpufreq/qcom-cpufreq-hw.c

2849dd8bc72b62 Taniya Das            2018-12-14  277  static int 
qcom_cpufreq_hw_cpu_init(struct cpufreq_policy *policy)
2849dd8bc72b62 Taniya Das            2018-12-14  278  {
bd74e286b35413 Manivannan Sadhasivam 2020-09-08  279    struct platform_device 
*pdev = cpufreq_get_driver_data();
bd74e286b35413 Manivannan Sadhasivam 2020-09-08  280    struct device *dev = 
&pdev->dev;
2849dd8bc72b62 Taniya Das            2018-12-14  281    struct of_phandle_args 
args;
2849dd8bc72b62 Taniya Das            2018-12-14  282    struct device_node 
*cpu_np;
55538fbc79e926 Taniya Das            2019-01-31  283    struct device *cpu_dev;
67fc209b527d02 Shawn Guo             2021-01-19  284    struct resource *res;
2849dd8bc72b62 Taniya Das            2018-12-14  285    void __iomem *base;
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  286    struct 
qcom_cpufreq_data *data;
2849dd8bc72b62 Taniya Das            2018-12-14  287    int ret, index;
2849dd8bc72b62 Taniya Das            2018-12-14  288  
55538fbc79e926 Taniya Das            2019-01-31  289    cpu_dev = 
get_cpu_device(policy->cpu);
55538fbc79e926 Taniya Das            2019-01-31  290    if (!cpu_dev) {
55538fbc79e926 Taniya Das            2019-01-31  291            pr_err("%s: 
failed to get cpu%d device\n", __func__,
55538fbc79e926 Taniya Das            2019-01-31  292                   
policy->cpu);
55538fbc79e926 Taniya Das            2019-01-31  293            return -ENODEV;
55538fbc79e926 Taniya Das            2019-01-31  294    }
55538fbc79e926 Taniya Das            2019-01-31  295  
2849dd8bc72b62 Taniya Das            2018-12-14  296    cpu_np = 
of_cpu_device_node_get(policy->cpu);
2849dd8bc72b62 Taniya Das            2018-12-14  297    if (!cpu_np)
2849dd8bc72b62 Taniya Das            2018-12-14  298            return -EINVAL;
2849dd8bc72b62 Taniya Das            2018-12-14  299  
2849dd8bc72b62 Taniya Das            2018-12-14  300    ret = 
of_parse_phandle_with_args(cpu_np, "qcom,freq-domain",
2849dd8bc72b62 Taniya Das            2018-12-14  301                            
         "#freq-domain-cells", 0, &args);
2849dd8bc72b62 Taniya Das            2018-12-14  302    of_node_put(cpu_np);
2849dd8bc72b62 Taniya Das            2018-12-14  303    if (ret)
2849dd8bc72b62 Taniya Das            2018-12-14  304            return ret;
2849dd8bc72b62 Taniya Das            2018-12-14  305  
2849dd8bc72b62 Taniya Das            2018-12-14  306    index = args.args[0];
2849dd8bc72b62 Taniya Das            2018-12-14  307  
67fc209b527d02 Shawn Guo             2021-01-19  308    res = 
platform_get_resource(pdev, IORESOURCE_MEM, index);
67fc209b527d02 Shawn Guo             2021-01-19  309    if (!res) {
67fc209b527d02 Shawn Guo             2021-01-19  310            dev_err(dev, 
"failed to get mem resource %d\n", index);
67fc209b527d02 Shawn Guo             2021-01-19  311            return -ENODEV;
67fc209b527d02 Shawn Guo             2021-01-19  312    }
67fc209b527d02 Shawn Guo             2021-01-19  313  
67fc209b527d02 Shawn Guo             2021-01-19  314    if 
(!request_mem_region(res->start, resource_size(res), res->name)) {
67fc209b527d02 Shawn Guo             2021-01-19  315            dev_err(dev, 
"failed to request resource %pR\n", res);
67fc209b527d02 Shawn Guo             2021-01-19  316            return -EBUSY;
67fc209b527d02 Shawn Guo             2021-01-19  317    }
2849dd8bc72b62 Taniya Das            2018-12-14  318  
67fc209b527d02 Shawn Guo             2021-01-19  319    base = 
ioremap(res->start, resource_size(res));
67fc209b527d02 Shawn Guo             2021-01-19  320    if (IS_ERR(base)) {
67fc209b527d02 Shawn Guo             2021-01-19  321            dev_err(dev, 
"failed to map resource %pR\n", res);
67fc209b527d02 Shawn Guo             2021-01-19  322            ret = 
PTR_ERR(base);
67fc209b527d02 Shawn Guo             2021-01-19  323            goto 
release_region;
67fc209b527d02 Shawn Guo             2021-01-19  324    }
67fc209b527d02 Shawn Guo             2021-01-19  325  
67fc209b527d02 Shawn Guo             2021-01-19  326    data = 
kzalloc(sizeof(*data), GFP_KERNEL);
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15 @327    if (!data) {
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  328            ret = -ENOMEM;
67fc209b527d02 Shawn Guo             2021-01-19  329            goto unmap_base;
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  330    }
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  331  
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  332    data->soc_data = 
of_device_get_match_data(&pdev->dev);
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  333    data->base = base;
67fc209b527d02 Shawn Guo             2021-01-19  334    data->res = res;
2849dd8bc72b62 Taniya Das            2018-12-14  335  
2849dd8bc72b62 Taniya Das            2018-12-14  336    /* HW should be in 
enabled state to proceed */
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  337    if 
(!(readl_relaxed(base + data->soc_data->reg_enable) & 0x1)) {
2849dd8bc72b62 Taniya Das            2018-12-14  338            dev_err(dev, 
"Domain-%d cpufreq hardware not enabled\n", index);
2849dd8bc72b62 Taniya Das            2018-12-14  339            ret = -ENODEV;
2849dd8bc72b62 Taniya Das            2018-12-14  340            goto error;
2849dd8bc72b62 Taniya Das            2018-12-14  341    }
2849dd8bc72b62 Taniya Das            2018-12-14  342  
2849dd8bc72b62 Taniya Das            2018-12-14  343    
qcom_get_related_cpus(index, policy->cpus);
2849dd8bc72b62 Taniya Das            2018-12-14  344    if 
(!cpumask_weight(policy->cpus)) {
2849dd8bc72b62 Taniya Das            2018-12-14  345            dev_err(dev, 
"Domain-%d failed to get related CPUs\n", index);
2849dd8bc72b62 Taniya Das            2018-12-14  346            ret = -ENOENT;
2849dd8bc72b62 Taniya Das            2018-12-14  347            goto error;
2849dd8bc72b62 Taniya Das            2018-12-14  348    }
2849dd8bc72b62 Taniya Das            2018-12-14  349  
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  350    policy->driver_data = 
data;
2849dd8bc72b62 Taniya Das            2018-12-14  351  
dcd1fd724c19fe Manivannan Sadhasivam 2020-09-15  352    ret = 
qcom_cpufreq_hw_read_lut(cpu_dev, policy);
2849dd8bc72b62 Taniya Das            2018-12-14  353    if (ret) {
2849dd8bc72b62 Taniya Das            2018-12-14  354            dev_err(dev, 
"Domain-%d failed to read LUT\n", index);
2849dd8bc72b62 Taniya Das            2018-12-14  355            goto error;
2849dd8bc72b62 Taniya Das            2018-12-14  356    }
2849dd8bc72b62 Taniya Das            2018-12-14  357  
55538fbc79e926 Taniya Das            2019-01-31  358    ret = 
dev_pm_opp_get_opp_count(cpu_dev);
55538fbc79e926 Taniya Das            2019-01-31  359    if (ret <= 0) {
55538fbc79e926 Taniya Das            2019-01-31  360            
dev_err(cpu_dev, "Failed to add OPPs\n");
55538fbc79e926 Taniya Das            2019-01-31  361            ret = -ENODEV;
55538fbc79e926 Taniya Das            2019-01-31  362            goto error;
55538fbc79e926 Taniya Das            2019-01-31  363    }
55538fbc79e926 Taniya Das            2019-01-31  364  
0e0ffa855d1590 Lukasz Luba           2020-05-27  365    
dev_pm_opp_of_register_em(cpu_dev, policy->cpus);
dab535052f67db Matthias Kaehlcke     2019-02-05  366  
266991721c15f9 Shawn Guo             2021-01-13  367    if 
(policy_has_boost_freq(policy)) {
266991721c15f9 Shawn Guo             2021-01-13  368            ret = 
cpufreq_enable_boost_support();
266991721c15f9 Shawn Guo             2021-01-13  369            if (ret)
266991721c15f9 Shawn Guo             2021-01-13  370                    
dev_warn(cpu_dev, "failed to enable boost: %d\n", ret);
266991721c15f9 Shawn Guo             2021-01-13  371    }
266991721c15f9 Shawn Guo             2021-01-13  372  
2849dd8bc72b62 Taniya Das            2018-12-14  373    return 0;
2849dd8bc72b62 Taniya Das            2018-12-14  374  error:
67fc209b527d02 Shawn Guo             2021-01-19  375    kfree(data);
67fc209b527d02 Shawn Guo             2021-01-19  376  unmap_base:
67fc209b527d02 Shawn Guo             2021-01-19 @377    iounmap(data->base);

Use after free.  iounmap(base);

67fc209b527d02 Shawn Guo             2021-01-19  378  release_region:
67fc209b527d02 Shawn Guo             2021-01-19  379    
release_mem_region(res->start, resource_size(res));
2849dd8bc72b62 Taniya Das            2018-12-14  380    return ret;
2849dd8bc72b62 Taniya Das            2018-12-14  381  }

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-...@lists.01.org

Attachment: .config.gz
Description: application/gzip

Reply via email to