:::::: 
:::::: 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: kbuild-...@lists.01.org
BCC: l...@intel.com
TO: Ammar Faizi <ammarfai...@gnuweeb.org>

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/202207090313.a7netolk-...@intel.com/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 <l...@intel.com>


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 <alexander.shish...@linux.intel.com>
:::::: CC: Ingo Molnar <mi...@kernel.org>

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp
_______________________________________________
kbuild mailing list -- kbuild@lists.01.org
To unsubscribe send an email to kbuild-le...@lists.01.org

Reply via email to