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 --]
next 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.