::::::
:::::: Manual check reason: "low confidence bisect report"
:::::: Manual check reason: "low confidence static check first_new_problem:
arch/x86/events/intel/pt.c:475:44: warning: shift by count ('32') >= precision
of type ('32') [-Wanalyzer-shift-count-overflow]"
::::::
CC: [email protected]
BCC: [email protected]
TO: Ammar Faizi <[email protected]>
tree: https://github.com/ammarfaizi2/linux-block
google/android/kernel/common/android12-kiwi-5.10
head: edf4da79d443f97049926ace891b5d6d235f7539
commit: c108d79a122aa94d1c5fe6305be8c4fec4b64ec5 [6824/9999] UPSTREAM: ubsan:
disable object-size sanitizer under GCC
:::::: branch date: 3 months ago
:::::: commit date: 9 months ago
config: i386-randconfig-c001
(https://download.01.org/0day-ci/archive/20220709/[email protected]/config)
compiler: gcc-11 (Debian 11.3.0-3) 11.3.0
reproduce (this is a W=1 build):
wget
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O
~/bin/make.cross
chmod +x ~/bin/make.cross
#
https://github.com/ammarfaizi2/linux-block/commit/c108d79a122aa94d1c5fe6305be8c4fec4b64ec5
git remote add ammarfaizi2-block
https://github.com/ammarfaizi2/linux-block
git fetch --no-tags ammarfaizi2-block
google/android/kernel/common/android12-kiwi-5.10
git checkout c108d79a122aa94d1c5fe6305be8c4fec4b64ec5
# save the config file
ARCH=i386 KBUILD_USERCFLAGS='-fanalyzer -Wno-error'
If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email protected]>
gcc-analyzer warnings: (new ones prefixed by >>)
arch/x86/events/intel/pt.c: In function 'pt_config_filters':
>> arch/x86/events/intel/pt.c:475:44: warning: shift by count ('32') >=
>> precision of type ('32') [-Wanalyzer-shift-count-overflow]
475 | rtit_ctl |= filter->config <<
pt_address_ranges[range].reg_off;
| ^~
'pt_event_add.part.0': events 1-2
|
| 1634 | static int pt_event_add(struct perf_event *event, int mode)
| | ^~~~~~~~~~~~
| | |
| | (1) entry to 'pt_event_add.part.0'
|......
| 1644 | pt_event_start(event, 0);
| | ~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (2) calling 'pt_event_start' from
'pt_event_add.part.0'
|
+--> 'pt_event_start': events 3-6
|
| 1513 | static void pt_event_start(struct perf_event *event, int
mode)
| | ^~~~~~~~~~~~~~
| | |
| | (3) entry to 'pt_event_start'
|......
| 1520 | if (!buf)
| | ~
| | |
| | (4) following 'false' branch (when 'buf' is
non-NULL)...
|......
| 1523 | pt_buffer_reset_offsets(buf, pt->handle.head);
| | ~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (5) ...to here
|......
| 1533 | pt_config(event);
| | ~~~~~~~~~~~~~~~~
| | |
| | (6) calling 'pt_config' from 'pt_event_start'
|
+--> 'pt_config': events 7-8
|
| 481 | static void pt_config(struct perf_event *event)
| | ^~~~~~~~~
| | |
| | (7) entry to 'pt_config'
|......
| 493 | reg = pt_config_filters(event);
| | ~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (8) calling 'pt_config_filters'
from 'pt_config'
|
+--> 'pt_config_filters': events 9-16
|
| 440 | static u64 pt_config_filters(struct
perf_event *event)
| | ^~~~~~~~~~~~~~~~~
| | |
| | (9) entry to 'pt_config_filters'
|......
| 447 | if (!filters)
| | ~
| | |
| | (10) following 'false' branch
(when 'filters' is non-NULL)...
|......
| 450 |
perf_event_addr_filters_sync(event);
| | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (11) ...to here
| 451 |
| 452 | for (range = 0; range <
filters->nr_filters; range++) {
| |
~~~~~~~~~~~~~~~~~~~~~~~~~~~
| | |
| | (12)
following 'true' branch...
| 453 | struct pt_filter *filter =
&filters->filter[range];
| | ~~~~~~
| | |
| | (13) ...to here
|......
| 475 | rtit_ctl |= filter->config
<< pt_address_ranges[range].reg_off;
| |
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| |
| |
| |
| (15) ...to here
| |
(14) following 'true' branch...
| |
(16) shift by count '32' here
|
vim +475 arch/x86/events/intel/pt.c
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 439
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 440 static u64
pt_config_filters(struct perf_event *event)
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 441 {
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 442 struct pt_filters
*filters = event->hw.addr_filters;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 443 struct pt *pt =
this_cpu_ptr(&pt_ctx);
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 444 unsigned int range = 0;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 445 u64 rtit_ctl = 0;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 446
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 447 if (!filters)
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 448 return 0;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 449
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 450
perf_event_addr_filters_sync(event);
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 451
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 452 for (range = 0; range <
filters->nr_filters; range++) {
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 453 struct
pt_filter *filter = &filters->filter[range];
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 454
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 455 /*
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 456 * Note, if the
range has zero start/end addresses due
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 457 * to its
dynamic object not being loaded yet, we just
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 458 * go ahead and
program zeroed range, which will simply
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 459 * produce no
data. Note^2: if executable code at 0x0
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 460 * is a
concern, we can set up an "invalid" configuration
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 461 * such as
msr_b < msr_a.
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 462 */
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 463
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 464 /* avoid
redundant msr writes */
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 465 if
(pt->filters.filter[range].msr_a != filter->msr_a) {
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 466
wrmsrl(pt_address_ranges[range].msr_a, filter->msr_a);
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 467
pt->filters.filter[range].msr_a = filter->msr_a;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 468 }
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 469
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 470 if
(pt->filters.filter[range].msr_b != filter->msr_b) {
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 471
wrmsrl(pt_address_ranges[range].msr_b, filter->msr_b);
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 472
pt->filters.filter[range].msr_b = filter->msr_b;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 473 }
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 474
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 @475 rtit_ctl |=
filter->config << pt_address_ranges[range].reg_off;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 476 }
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 477
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 478 return rtit_ctl;
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 479 }
eadf48cab4b6b0a Alexander Shishkin 2016-04-27 480
:::::: The code at line 475 was first introduced by commit
:::::: eadf48cab4b6b0ab8bcd53feb7d52a71e72debd0 perf/x86/intel/pt: Add support
for address range filtering in PT
:::::: TO: Alexander Shishkin <[email protected]>
:::::: CC: Ingo Molnar <[email protected]>
--
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]