All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@lists.01.org
Subject: [chanwoo:devfreq-testing-passive-gov 3/3] drivers/devfreq/governor_passive.c:251 cpufreq_passive_notifier_call() warn: variable dereferenced before check 'freqs' (see line 247)
Date: Mon, 01 Mar 2021 12:22:04 +0300	[thread overview]
Message-ID: <20210301092204.GM2222@kadam> (raw)

[-- Attachment #1: Type: text/plain, Size: 7766 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git  devfreq-testing-passive-gov
head:   82d4ff586ae2fb6d89cad871949004bed3438ccb
commit: 82d4ff586ae2fb6d89cad871949004bed3438ccb [3/3] PM / devfreq: Add cpu based scaling support to passive governor
config: x86_64-randconfig-m001-20210301 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

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

New smatch warnings:
drivers/devfreq/governor_passive.c:251 cpufreq_passive_notifier_call() warn: variable dereferenced before check 'freqs' (see line 247)
drivers/devfreq/governor_passive.c:403 devfreq_passive_event_handler() warn: ignoring unreachable code.

Old smatch warnings:
drivers/devfreq/governor_passive.c:339 cpufreq_passive_register() warn: possible memory leak of 'state'
drivers/devfreq/governor_passive.c:348 cpufreq_passive_register() warn: possible memory leak of 'state'

vim +/freqs +251 drivers/devfreq/governor_passive.c

82d4ff586ae2fb Saravana Kannan 2021-03-01  239  static int cpufreq_passive_notifier_call(struct notifier_block *nb,
82d4ff586ae2fb Saravana Kannan 2021-03-01  240  					 unsigned long event, void *ptr)
82d4ff586ae2fb Saravana Kannan 2021-03-01  241  {
82d4ff586ae2fb Saravana Kannan 2021-03-01  242  	struct devfreq_passive_data *data =
82d4ff586ae2fb Saravana Kannan 2021-03-01  243  			container_of(nb, struct devfreq_passive_data, nb);
82d4ff586ae2fb Saravana Kannan 2021-03-01  244  	struct devfreq *devfreq = (struct devfreq *)data->this;
82d4ff586ae2fb Saravana Kannan 2021-03-01  245  	struct devfreq_cpu_state *cpu_state;
82d4ff586ae2fb Saravana Kannan 2021-03-01  246  	struct cpufreq_freqs *freqs = ptr;
82d4ff586ae2fb Saravana Kannan 2021-03-01 @247  	unsigned long freq = freqs->new;
                                                                             ^^^^^^^^^^
Dereferenced.

82d4ff586ae2fb Saravana Kannan 2021-03-01  248  	unsigned int cur_freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  249  	int ret;
82d4ff586ae2fb Saravana Kannan 2021-03-01  250  
82d4ff586ae2fb Saravana Kannan 2021-03-01 @251  	if (event != CPUFREQ_POSTCHANGE || !freqs ||
                                                                                           ^^^^^^
Checked too late.

82d4ff586ae2fb Saravana Kannan 2021-03-01  252  		!data->cpu_state[freqs->policy->cpu])
82d4ff586ae2fb Saravana Kannan 2021-03-01  253  		return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  254  
82d4ff586ae2fb Saravana Kannan 2021-03-01  255  	cpu_state = data->cpu_state[freqs->policy->cpu];
82d4ff586ae2fb Saravana Kannan 2021-03-01  256  	if (cpu_state->freq == freqs->new)
82d4ff586ae2fb Saravana Kannan 2021-03-01  257  		return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  258  
82d4ff586ae2fb Saravana Kannan 2021-03-01  259  	/* Backup current freq and pre-update cpu state freq*/
82d4ff586ae2fb Saravana Kannan 2021-03-01  260  	cur_freq = cpu_state->freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  261  	cpu_state->freq = freqs->new;
82d4ff586ae2fb Saravana Kannan 2021-03-01  262  
82d4ff586ae2fb Saravana Kannan 2021-03-01  263  	mutex_lock(&devfreq->lock);
82d4ff586ae2fb Saravana Kannan 2021-03-01  264  	ret = devfreq_update_target(devfreq, freq);
82d4ff586ae2fb Saravana Kannan 2021-03-01  265  	mutex_unlock(&devfreq->lock);
82d4ff586ae2fb Saravana Kannan 2021-03-01  266  	if (ret) {
82d4ff586ae2fb Saravana Kannan 2021-03-01  267  		cpu_state->freq = cur_freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  268  		dev_err(&devfreq->dev, "Couldn't update the frequency.\n");
82d4ff586ae2fb Saravana Kannan 2021-03-01  269  		return ret;
82d4ff586ae2fb Saravana Kannan 2021-03-01  270  	}
82d4ff586ae2fb Saravana Kannan 2021-03-01  271  
82d4ff586ae2fb Saravana Kannan 2021-03-01  272  	return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  273  }

[ snip! ]

996133119f5733 Chanwoo Choi    2016-03-22  374  static int devfreq_passive_event_handler(struct devfreq *devfreq,
996133119f5733 Chanwoo Choi    2016-03-22  375  				unsigned int event, void *data)
996133119f5733 Chanwoo Choi    2016-03-22  376  {
996133119f5733 Chanwoo Choi    2016-03-22  377  	struct devfreq_passive_data *p_data
996133119f5733 Chanwoo Choi    2016-03-22  378  			= (struct devfreq_passive_data *)devfreq->data;
996133119f5733 Chanwoo Choi    2016-03-22  379  	struct devfreq *parent = (struct devfreq *)p_data->parent;
996133119f5733 Chanwoo Choi    2016-03-22  380  	struct notifier_block *nb = &p_data->nb;
996133119f5733 Chanwoo Choi    2016-03-22  381  	int ret = 0;
996133119f5733 Chanwoo Choi    2016-03-22  382  
82d4ff586ae2fb Saravana Kannan 2021-03-01  383  	if (p_data->parent_type == DEVFREQ_PARENT_DEV && !parent)
996133119f5733 Chanwoo Choi    2016-03-22  384  		return -EPROBE_DEFER;
996133119f5733 Chanwoo Choi    2016-03-22  385  
996133119f5733 Chanwoo Choi    2016-03-22  386  	switch (event) {
996133119f5733 Chanwoo Choi    2016-03-22  387  	case DEVFREQ_GOV_START:
996133119f5733 Chanwoo Choi    2016-03-22  388  		if (!p_data->this)
996133119f5733 Chanwoo Choi    2016-03-22  389  			p_data->this = devfreq;
996133119f5733 Chanwoo Choi    2016-03-22  390  
82d4ff586ae2fb Saravana Kannan 2021-03-01  391  		if (p_data->parent_type == DEVFREQ_PARENT_DEV) {
996133119f5733 Chanwoo Choi    2016-03-22  392  			nb->notifier_call = devfreq_passive_notifier_call;
0ef7c7cce43f6e Leonard Crestez 2019-08-08  393  			ret = devfreq_register_notifier(parent, nb,
996133119f5733 Chanwoo Choi    2016-03-22  394  						DEVFREQ_TRANSITION_NOTIFIER);
82d4ff586ae2fb Saravana Kannan 2021-03-01  395  		} else if (p_data->parent_type == CPUFREQ_PARENT_DEV) {
82d4ff586ae2fb Saravana Kannan 2021-03-01  396  			ret = cpufreq_passive_register(&p_data);
82d4ff586ae2fb Saravana Kannan 2021-03-01  397  		} else {
82d4ff586ae2fb Saravana Kannan 2021-03-01  398  			ret = -EINVAL;
82d4ff586ae2fb Saravana Kannan 2021-03-01  399  		}
996133119f5733 Chanwoo Choi    2016-03-22  400  		break;
996133119f5733 Chanwoo Choi    2016-03-22  401  	case DEVFREQ_GOV_STOP:
82d4ff586ae2fb Saravana Kannan 2021-03-01  402  		break;
                                                                ^^^^^^

82d4ff586ae2fb Saravana Kannan 2021-03-01 @403  		if (p_data->parent_type == DEVFREQ_PARENT_DEV)
                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unreachable code

0ef7c7cce43f6e Leonard Crestez 2019-08-08  404  			WARN_ON(devfreq_unregister_notifier(parent, nb,
0ef7c7cce43f6e Leonard Crestez 2019-08-08  405  						DEVFREQ_TRANSITION_NOTIFIER));
82d4ff586ae2fb Saravana Kannan 2021-03-01  406  		else if (p_data->parent_type == CPUFREQ_PARENT_DEV)
82d4ff586ae2fb Saravana Kannan 2021-03-01  407  			WARN_ON(cpufreq_passive_unregister(&p_data));
82d4ff586ae2fb Saravana Kannan 2021-03-01  408  		else
82d4ff586ae2fb Saravana Kannan 2021-03-01  409  			ret = -EINVAL;
996133119f5733 Chanwoo Choi    2016-03-22  410   		break;
996133119f5733 Chanwoo Choi    2016-03-22  411  	default:
996133119f5733 Chanwoo Choi    2016-03-22  412  		break;
996133119f5733 Chanwoo Choi    2016-03-22  413  	}
996133119f5733 Chanwoo Choi    2016-03-22  414  
996133119f5733 Chanwoo Choi    2016-03-22  415  	return ret;
996133119f5733 Chanwoo Choi    2016-03-22  416  }

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

_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30943 bytes --]

WARNING: multiple messages have this Message-ID (diff)
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild-all@lists.01.org
Subject: [kbuild] [chanwoo:devfreq-testing-passive-gov 3/3] drivers/devfreq/governor_passive.c:251 cpufreq_passive_notifier_call() warn: variable dereferenced before check 'freqs' (see line 247)
Date: Mon, 01 Mar 2021 12:22:04 +0300	[thread overview]
Message-ID: <20210301092204.GM2222@kadam> (raw)

[-- Attachment #1: Type: text/plain, Size: 7766 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/chanwoo/linux.git  devfreq-testing-passive-gov
head:   82d4ff586ae2fb6d89cad871949004bed3438ccb
commit: 82d4ff586ae2fb6d89cad871949004bed3438ccb [3/3] PM / devfreq: Add cpu based scaling support to passive governor
config: x86_64-randconfig-m001-20210301 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0

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

New smatch warnings:
drivers/devfreq/governor_passive.c:251 cpufreq_passive_notifier_call() warn: variable dereferenced before check 'freqs' (see line 247)
drivers/devfreq/governor_passive.c:403 devfreq_passive_event_handler() warn: ignoring unreachable code.

Old smatch warnings:
drivers/devfreq/governor_passive.c:339 cpufreq_passive_register() warn: possible memory leak of 'state'
drivers/devfreq/governor_passive.c:348 cpufreq_passive_register() warn: possible memory leak of 'state'

vim +/freqs +251 drivers/devfreq/governor_passive.c

82d4ff586ae2fb Saravana Kannan 2021-03-01  239  static int cpufreq_passive_notifier_call(struct notifier_block *nb,
82d4ff586ae2fb Saravana Kannan 2021-03-01  240  					 unsigned long event, void *ptr)
82d4ff586ae2fb Saravana Kannan 2021-03-01  241  {
82d4ff586ae2fb Saravana Kannan 2021-03-01  242  	struct devfreq_passive_data *data =
82d4ff586ae2fb Saravana Kannan 2021-03-01  243  			container_of(nb, struct devfreq_passive_data, nb);
82d4ff586ae2fb Saravana Kannan 2021-03-01  244  	struct devfreq *devfreq = (struct devfreq *)data->this;
82d4ff586ae2fb Saravana Kannan 2021-03-01  245  	struct devfreq_cpu_state *cpu_state;
82d4ff586ae2fb Saravana Kannan 2021-03-01  246  	struct cpufreq_freqs *freqs = ptr;
82d4ff586ae2fb Saravana Kannan 2021-03-01 @247  	unsigned long freq = freqs->new;
                                                                             ^^^^^^^^^^
Dereferenced.

82d4ff586ae2fb Saravana Kannan 2021-03-01  248  	unsigned int cur_freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  249  	int ret;
82d4ff586ae2fb Saravana Kannan 2021-03-01  250  
82d4ff586ae2fb Saravana Kannan 2021-03-01 @251  	if (event != CPUFREQ_POSTCHANGE || !freqs ||
                                                                                           ^^^^^^
Checked too late.

82d4ff586ae2fb Saravana Kannan 2021-03-01  252  		!data->cpu_state[freqs->policy->cpu])
82d4ff586ae2fb Saravana Kannan 2021-03-01  253  		return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  254  
82d4ff586ae2fb Saravana Kannan 2021-03-01  255  	cpu_state = data->cpu_state[freqs->policy->cpu];
82d4ff586ae2fb Saravana Kannan 2021-03-01  256  	if (cpu_state->freq == freqs->new)
82d4ff586ae2fb Saravana Kannan 2021-03-01  257  		return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  258  
82d4ff586ae2fb Saravana Kannan 2021-03-01  259  	/* Backup current freq and pre-update cpu state freq*/
82d4ff586ae2fb Saravana Kannan 2021-03-01  260  	cur_freq = cpu_state->freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  261  	cpu_state->freq = freqs->new;
82d4ff586ae2fb Saravana Kannan 2021-03-01  262  
82d4ff586ae2fb Saravana Kannan 2021-03-01  263  	mutex_lock(&devfreq->lock);
82d4ff586ae2fb Saravana Kannan 2021-03-01  264  	ret = devfreq_update_target(devfreq, freq);
82d4ff586ae2fb Saravana Kannan 2021-03-01  265  	mutex_unlock(&devfreq->lock);
82d4ff586ae2fb Saravana Kannan 2021-03-01  266  	if (ret) {
82d4ff586ae2fb Saravana Kannan 2021-03-01  267  		cpu_state->freq = cur_freq;
82d4ff586ae2fb Saravana Kannan 2021-03-01  268  		dev_err(&devfreq->dev, "Couldn't update the frequency.\n");
82d4ff586ae2fb Saravana Kannan 2021-03-01  269  		return ret;
82d4ff586ae2fb Saravana Kannan 2021-03-01  270  	}
82d4ff586ae2fb Saravana Kannan 2021-03-01  271  
82d4ff586ae2fb Saravana Kannan 2021-03-01  272  	return 0;
82d4ff586ae2fb Saravana Kannan 2021-03-01  273  }

[ snip! ]

996133119f5733 Chanwoo Choi    2016-03-22  374  static int devfreq_passive_event_handler(struct devfreq *devfreq,
996133119f5733 Chanwoo Choi    2016-03-22  375  				unsigned int event, void *data)
996133119f5733 Chanwoo Choi    2016-03-22  376  {
996133119f5733 Chanwoo Choi    2016-03-22  377  	struct devfreq_passive_data *p_data
996133119f5733 Chanwoo Choi    2016-03-22  378  			= (struct devfreq_passive_data *)devfreq->data;
996133119f5733 Chanwoo Choi    2016-03-22  379  	struct devfreq *parent = (struct devfreq *)p_data->parent;
996133119f5733 Chanwoo Choi    2016-03-22  380  	struct notifier_block *nb = &p_data->nb;
996133119f5733 Chanwoo Choi    2016-03-22  381  	int ret = 0;
996133119f5733 Chanwoo Choi    2016-03-22  382  
82d4ff586ae2fb Saravana Kannan 2021-03-01  383  	if (p_data->parent_type == DEVFREQ_PARENT_DEV && !parent)
996133119f5733 Chanwoo Choi    2016-03-22  384  		return -EPROBE_DEFER;
996133119f5733 Chanwoo Choi    2016-03-22  385  
996133119f5733 Chanwoo Choi    2016-03-22  386  	switch (event) {
996133119f5733 Chanwoo Choi    2016-03-22  387  	case DEVFREQ_GOV_START:
996133119f5733 Chanwoo Choi    2016-03-22  388  		if (!p_data->this)
996133119f5733 Chanwoo Choi    2016-03-22  389  			p_data->this = devfreq;
996133119f5733 Chanwoo Choi    2016-03-22  390  
82d4ff586ae2fb Saravana Kannan 2021-03-01  391  		if (p_data->parent_type == DEVFREQ_PARENT_DEV) {
996133119f5733 Chanwoo Choi    2016-03-22  392  			nb->notifier_call = devfreq_passive_notifier_call;
0ef7c7cce43f6e Leonard Crestez 2019-08-08  393  			ret = devfreq_register_notifier(parent, nb,
996133119f5733 Chanwoo Choi    2016-03-22  394  						DEVFREQ_TRANSITION_NOTIFIER);
82d4ff586ae2fb Saravana Kannan 2021-03-01  395  		} else if (p_data->parent_type == CPUFREQ_PARENT_DEV) {
82d4ff586ae2fb Saravana Kannan 2021-03-01  396  			ret = cpufreq_passive_register(&p_data);
82d4ff586ae2fb Saravana Kannan 2021-03-01  397  		} else {
82d4ff586ae2fb Saravana Kannan 2021-03-01  398  			ret = -EINVAL;
82d4ff586ae2fb Saravana Kannan 2021-03-01  399  		}
996133119f5733 Chanwoo Choi    2016-03-22  400  		break;
996133119f5733 Chanwoo Choi    2016-03-22  401  	case DEVFREQ_GOV_STOP:
82d4ff586ae2fb Saravana Kannan 2021-03-01  402  		break;
                                                                ^^^^^^

82d4ff586ae2fb Saravana Kannan 2021-03-01 @403  		if (p_data->parent_type == DEVFREQ_PARENT_DEV)
                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Unreachable code

0ef7c7cce43f6e Leonard Crestez 2019-08-08  404  			WARN_ON(devfreq_unregister_notifier(parent, nb,
0ef7c7cce43f6e Leonard Crestez 2019-08-08  405  						DEVFREQ_TRANSITION_NOTIFIER));
82d4ff586ae2fb Saravana Kannan 2021-03-01  406  		else if (p_data->parent_type == CPUFREQ_PARENT_DEV)
82d4ff586ae2fb Saravana Kannan 2021-03-01  407  			WARN_ON(cpufreq_passive_unregister(&p_data));
82d4ff586ae2fb Saravana Kannan 2021-03-01  408  		else
82d4ff586ae2fb Saravana Kannan 2021-03-01  409  			ret = -EINVAL;
996133119f5733 Chanwoo Choi    2016-03-22  410   		break;
996133119f5733 Chanwoo Choi    2016-03-22  411  	default:
996133119f5733 Chanwoo Choi    2016-03-22  412  		break;
996133119f5733 Chanwoo Choi    2016-03-22  413  	}
996133119f5733 Chanwoo Choi    2016-03-22  414  
996133119f5733 Chanwoo Choi    2016-03-22  415  	return ret;
996133119f5733 Chanwoo Choi    2016-03-22  416  }

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

_______________________________________________
kbuild mailing list -- kbuild(a)lists.01.org
To unsubscribe send an email to kbuild-leave(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 30943 bytes --]

             reply	other threads:[~2021-03-01  9:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-01  9:22 Dan Carpenter [this message]
2021-03-01  9:22 ` [kbuild] [chanwoo:devfreq-testing-passive-gov 3/3] drivers/devfreq/governor_passive.c:251 cpufreq_passive_notifier_call() warn: variable dereferenced before check 'freqs' (see line 247) Dan Carpenter
  -- strict thread matches above, loose matches on Subject: below --
2021-03-01  8:11 kernel test robot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20210301092204.GM2222@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=kbuild@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.