lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:   Sat, 23 Sep 2017 11:40:59 +0800
From:   kbuild test robot <fengguang.wu@...el.com>
To:     Larry Finger <Larry.Finger@...inger.net>
Cc:     kbuild-all@...org, linux-kernel@...r.kernel.org,
        Greg Kroah-Hartman <gregkh@...uxfoundation.org>
Subject: drivers/staging//rtlwifi/phydm/phydm_dig.c:494:45: warning: array
 subscript is below array bounds

Hi Larry,

First bad commit (maybe != root cause):

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   c0a3a64e723324ae6dda53214061a71de63808c3
commit: 5b5ab4cb5cda824ef59e0511ac5d585f35f1a1a6 staging: r8822be: Add Makefiles and Kconfig for new driver
date:   5 weeks ago
config: x86_64-randconfig-n0-09231026 (attached as .config)
compiler: gcc-4.8 (Debian 4.8.4-1) 4.8.4
reproduce:
        git checkout 5b5ab4cb5cda824ef59e0511ac5d585f35f1a1a6
        # save the attached .config to linux build tree
        make ARCH=x86_64 

Note: it may well be a FALSE warning. FWIW you are at least aware of it now.

All warnings (new ones prefixed by >>):

   Cyclomatic Complexity 5 drivers/staging//rtlwifi/phydm/phydm_dig.c:get_igi_for_diff
   Cyclomatic Complexity 11 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_fa_threshold_check
   Cyclomatic Complexity 7 drivers/staging//rtlwifi/phydm/phydm_dig.c:phydm_get_current_igi
   Cyclomatic Complexity 21 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_dig_abort
   Cyclomatic Complexity 16 drivers/staging//rtlwifi/phydm/phydm_dig.c:phydm_set_big_jump_step
   Cyclomatic Complexity 19 drivers/staging//rtlwifi/phydm/phydm_dig.c:phydm_check_ap_write_dig
   Cyclomatic Complexity 60 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_forbidden_igi_check
   Cyclomatic Complexity 21 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_change_dynamic_init_gain_thresh
   Cyclomatic Complexity 59 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_write_dig
   Cyclomatic Complexity 56 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_pause_dig
   Cyclomatic Complexity 13 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_dig_init
   Cyclomatic Complexity 197 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_DIG
   Cyclomatic Complexity 22 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_dig_by_rssi_lps
   Cyclomatic Complexity 35 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_false_alarm_counter_statistics
   Cyclomatic Complexity 3 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_write_cck_cca_thres
   Cyclomatic Complexity 56 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_pause_cck_packet_detection
   Cyclomatic Complexity 31 drivers/staging//rtlwifi/phydm/phydm_dig.c:odm_cck_packet_detection_thresh
   Cyclomatic Complexity 1 drivers/staging//rtlwifi/phydm/phydm_dig.c:phydm_dig_go_up_check
   drivers/staging//rtlwifi/phydm/phydm_dig.c: In function 'odm_pause_dig':
>> drivers/staging//rtlwifi/phydm/phydm_dig.c:494:45: warning: array subscript is below array bounds [-Warray-bounds]
      odm_write_dig(dm, dig_tab->pause_dig_value[max_level]);
                                                ^
   drivers/staging//rtlwifi/phydm/phydm_dig.c: In function 'odm_pause_cck_packet_detection':
   drivers/staging//rtlwifi/phydm/phydm_dig.c:1429:32: warning: array subscript is below array bounds [-Warray-bounds]
         dig_tab->pause_cckpd_value[max_level]);
                                   ^

vim +494 drivers/staging//rtlwifi/phydm/phydm_dig.c

9ce99b04 Ping-Ke Shih 2017-08-17  380  
9ce99b04 Ping-Ke Shih 2017-08-17  381  void odm_pause_dig(void *dm_void, enum phydm_pause_type pause_type,
9ce99b04 Ping-Ke Shih 2017-08-17  382  		   enum phydm_pause_level pause_level, u8 igi_value)
9ce99b04 Ping-Ke Shih 2017-08-17  383  {
9ce99b04 Ping-Ke Shih 2017-08-17  384  	struct phy_dm_struct *dm = (struct phy_dm_struct *)dm_void;
9ce99b04 Ping-Ke Shih 2017-08-17  385  	struct dig_thres *dig_tab = &dm->dm_dig_table;
9ce99b04 Ping-Ke Shih 2017-08-17  386  	s8 max_level;
9ce99b04 Ping-Ke Shih 2017-08-17  387  
9ce99b04 Ping-Ke Shih 2017-08-17  388  	ODM_RT_TRACE(dm, ODM_COMP_DIG, "%s()=========> level = %d\n", __func__,
9ce99b04 Ping-Ke Shih 2017-08-17  389  		     pause_level);
9ce99b04 Ping-Ke Shih 2017-08-17  390  
9ce99b04 Ping-Ke Shih 2017-08-17  391  	if ((dig_tab->pause_dig_level == 0) &&
9ce99b04 Ping-Ke Shih 2017-08-17  392  	    (!(dm->support_ability & ODM_BB_DIG) ||
9ce99b04 Ping-Ke Shih 2017-08-17  393  	     !(dm->support_ability & ODM_BB_FA_CNT))) {
9ce99b04 Ping-Ke Shih 2017-08-17  394  		ODM_RT_TRACE(
9ce99b04 Ping-Ke Shih 2017-08-17  395  			dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  396  			"%s(): Return: support_ability DIG or FA is disabled !!\n",
9ce99b04 Ping-Ke Shih 2017-08-17  397  			__func__);
9ce99b04 Ping-Ke Shih 2017-08-17  398  		return;
9ce99b04 Ping-Ke Shih 2017-08-17  399  	}
9ce99b04 Ping-Ke Shih 2017-08-17  400  
9ce99b04 Ping-Ke Shih 2017-08-17  401  	if (pause_level > DM_DIG_MAX_PAUSE_TYPE) {
9ce99b04 Ping-Ke Shih 2017-08-17  402  		ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  403  			     "%s(): Return: Wrong pause level !!\n", __func__);
9ce99b04 Ping-Ke Shih 2017-08-17  404  		return;
9ce99b04 Ping-Ke Shih 2017-08-17  405  	}
9ce99b04 Ping-Ke Shih 2017-08-17  406  
9ce99b04 Ping-Ke Shih 2017-08-17  407  	ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  408  		     "%s(): pause level = 0x%x, Current value = 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  409  		     __func__, dig_tab->pause_dig_level, igi_value);
9ce99b04 Ping-Ke Shih 2017-08-17  410  	ODM_RT_TRACE(
9ce99b04 Ping-Ke Shih 2017-08-17  411  		dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  412  		"%s(): pause value = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  413  		__func__, dig_tab->pause_dig_value[7],
9ce99b04 Ping-Ke Shih 2017-08-17  414  		dig_tab->pause_dig_value[6], dig_tab->pause_dig_value[5],
9ce99b04 Ping-Ke Shih 2017-08-17  415  		dig_tab->pause_dig_value[4], dig_tab->pause_dig_value[3],
9ce99b04 Ping-Ke Shih 2017-08-17  416  		dig_tab->pause_dig_value[2], dig_tab->pause_dig_value[1],
9ce99b04 Ping-Ke Shih 2017-08-17  417  		dig_tab->pause_dig_value[0]);
9ce99b04 Ping-Ke Shih 2017-08-17  418  
9ce99b04 Ping-Ke Shih 2017-08-17  419  	switch (pause_type) {
9ce99b04 Ping-Ke Shih 2017-08-17  420  	/* Pause DIG */
9ce99b04 Ping-Ke Shih 2017-08-17  421  	case PHYDM_PAUSE: {
9ce99b04 Ping-Ke Shih 2017-08-17  422  		/* Disable DIG */
9ce99b04 Ping-Ke Shih 2017-08-17  423  		odm_cmn_info_update(dm, ODM_CMNINFO_ABILITY,
9ce99b04 Ping-Ke Shih 2017-08-17  424  				    dm->support_ability & (~ODM_BB_DIG));
9ce99b04 Ping-Ke Shih 2017-08-17  425  		ODM_RT_TRACE(dm, ODM_COMP_DIG, "%s(): Pause DIG !!\n",
9ce99b04 Ping-Ke Shih 2017-08-17  426  			     __func__);
9ce99b04 Ping-Ke Shih 2017-08-17  427  
9ce99b04 Ping-Ke Shih 2017-08-17  428  		/* Backup IGI value */
9ce99b04 Ping-Ke Shih 2017-08-17  429  		if (dig_tab->pause_dig_level == 0) {
9ce99b04 Ping-Ke Shih 2017-08-17  430  			dig_tab->igi_backup = dig_tab->cur_ig_value;
9ce99b04 Ping-Ke Shih 2017-08-17  431  			ODM_RT_TRACE(
9ce99b04 Ping-Ke Shih 2017-08-17  432  				dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  433  				"%s(): Backup IGI  = 0x%x, new IGI = 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  434  				__func__, dig_tab->igi_backup, igi_value);
9ce99b04 Ping-Ke Shih 2017-08-17  435  		}
9ce99b04 Ping-Ke Shih 2017-08-17  436  
9ce99b04 Ping-Ke Shih 2017-08-17  437  		/* Record IGI value */
9ce99b04 Ping-Ke Shih 2017-08-17  438  		dig_tab->pause_dig_value[pause_level] = igi_value;
9ce99b04 Ping-Ke Shih 2017-08-17  439  
9ce99b04 Ping-Ke Shih 2017-08-17  440  		/* Update pause level */
9ce99b04 Ping-Ke Shih 2017-08-17  441  		dig_tab->pause_dig_level =
9ce99b04 Ping-Ke Shih 2017-08-17  442  			(dig_tab->pause_dig_level | BIT(pause_level));
9ce99b04 Ping-Ke Shih 2017-08-17  443  
9ce99b04 Ping-Ke Shih 2017-08-17  444  		/* Write new IGI value */
9ce99b04 Ping-Ke Shih 2017-08-17  445  		if (BIT(pause_level + 1) > dig_tab->pause_dig_level) {
9ce99b04 Ping-Ke Shih 2017-08-17  446  			odm_write_dig(dm, igi_value);
9ce99b04 Ping-Ke Shih 2017-08-17  447  			ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  448  				     "%s(): IGI of higher level = 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  449  				     __func__, igi_value);
9ce99b04 Ping-Ke Shih 2017-08-17  450  		}
9ce99b04 Ping-Ke Shih 2017-08-17  451  		break;
9ce99b04 Ping-Ke Shih 2017-08-17  452  	}
9ce99b04 Ping-Ke Shih 2017-08-17  453  	/* Resume DIG */
9ce99b04 Ping-Ke Shih 2017-08-17  454  	case PHYDM_RESUME: {
9ce99b04 Ping-Ke Shih 2017-08-17  455  		/* check if the level is illegal or not */
9ce99b04 Ping-Ke Shih 2017-08-17  456  		if ((dig_tab->pause_dig_level & (BIT(pause_level))) != 0) {
9ce99b04 Ping-Ke Shih 2017-08-17  457  			dig_tab->pause_dig_level = dig_tab->pause_dig_level &
9ce99b04 Ping-Ke Shih 2017-08-17  458  						   (~(BIT(pause_level)));
9ce99b04 Ping-Ke Shih 2017-08-17  459  			dig_tab->pause_dig_value[pause_level] = 0;
9ce99b04 Ping-Ke Shih 2017-08-17  460  			ODM_RT_TRACE(dm, ODM_COMP_DIG, "%s(): Resume DIG !!\n",
9ce99b04 Ping-Ke Shih 2017-08-17  461  				     __func__);
9ce99b04 Ping-Ke Shih 2017-08-17  462  		} else {
9ce99b04 Ping-Ke Shih 2017-08-17  463  			ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  464  				     "%s(): Wrong resume level !!\n", __func__);
9ce99b04 Ping-Ke Shih 2017-08-17  465  			break;
9ce99b04 Ping-Ke Shih 2017-08-17  466  		}
9ce99b04 Ping-Ke Shih 2017-08-17  467  
9ce99b04 Ping-Ke Shih 2017-08-17  468  		/* Resume DIG */
9ce99b04 Ping-Ke Shih 2017-08-17  469  		if (dig_tab->pause_dig_level == 0) {
9ce99b04 Ping-Ke Shih 2017-08-17  470  			/* Write backup IGI value */
9ce99b04 Ping-Ke Shih 2017-08-17  471  			odm_write_dig(dm, dig_tab->igi_backup);
9ce99b04 Ping-Ke Shih 2017-08-17  472  			dig_tab->is_ignore_dig = true;
9ce99b04 Ping-Ke Shih 2017-08-17  473  			ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  474  				     "%s(): Write original IGI = 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  475  				     __func__, dig_tab->igi_backup);
9ce99b04 Ping-Ke Shih 2017-08-17  476  
9ce99b04 Ping-Ke Shih 2017-08-17  477  			/* Enable DIG */
9ce99b04 Ping-Ke Shih 2017-08-17  478  			odm_cmn_info_update(dm, ODM_CMNINFO_ABILITY,
9ce99b04 Ping-Ke Shih 2017-08-17  479  					    dm->support_ability | ODM_BB_DIG);
9ce99b04 Ping-Ke Shih 2017-08-17  480  			break;
9ce99b04 Ping-Ke Shih 2017-08-17  481  		}
9ce99b04 Ping-Ke Shih 2017-08-17  482  
9ce99b04 Ping-Ke Shih 2017-08-17  483  		if (BIT(pause_level) <= dig_tab->pause_dig_level)
9ce99b04 Ping-Ke Shih 2017-08-17  484  			break;
9ce99b04 Ping-Ke Shih 2017-08-17  485  
9ce99b04 Ping-Ke Shih 2017-08-17  486  		/* Calculate the maximum level now */
9ce99b04 Ping-Ke Shih 2017-08-17  487  		for (max_level = (pause_level - 1); max_level >= 0;
9ce99b04 Ping-Ke Shih 2017-08-17  488  		     max_level--) {
9ce99b04 Ping-Ke Shih 2017-08-17  489  			if ((dig_tab->pause_dig_level & BIT(max_level)) > 0)
9ce99b04 Ping-Ke Shih 2017-08-17  490  				break;
9ce99b04 Ping-Ke Shih 2017-08-17  491  		}
9ce99b04 Ping-Ke Shih 2017-08-17  492  
9ce99b04 Ping-Ke Shih 2017-08-17  493  		/* write IGI of lower level */
9ce99b04 Ping-Ke Shih 2017-08-17 @494  		odm_write_dig(dm, dig_tab->pause_dig_value[max_level]);
9ce99b04 Ping-Ke Shih 2017-08-17  495  		ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  496  			     "%s(): Write IGI (0x%x) of level (%d)\n", __func__,
9ce99b04 Ping-Ke Shih 2017-08-17  497  			     dig_tab->pause_dig_value[max_level], max_level);
9ce99b04 Ping-Ke Shih 2017-08-17  498  		break;
9ce99b04 Ping-Ke Shih 2017-08-17  499  	}
9ce99b04 Ping-Ke Shih 2017-08-17  500  	default:
9ce99b04 Ping-Ke Shih 2017-08-17  501  		ODM_RT_TRACE(dm, ODM_COMP_DIG, "%s(): Wrong  type !!\n",
9ce99b04 Ping-Ke Shih 2017-08-17  502  			     __func__);
9ce99b04 Ping-Ke Shih 2017-08-17  503  		break;
9ce99b04 Ping-Ke Shih 2017-08-17  504  	}
9ce99b04 Ping-Ke Shih 2017-08-17  505  
9ce99b04 Ping-Ke Shih 2017-08-17  506  	ODM_RT_TRACE(dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  507  		     "%s(): pause level = 0x%x, Current value = 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  508  		     __func__, dig_tab->pause_dig_level, igi_value);
9ce99b04 Ping-Ke Shih 2017-08-17  509  	ODM_RT_TRACE(
9ce99b04 Ping-Ke Shih 2017-08-17  510  		dm, ODM_COMP_DIG,
9ce99b04 Ping-Ke Shih 2017-08-17  511  		"%s(): pause value = 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
9ce99b04 Ping-Ke Shih 2017-08-17  512  		__func__, dig_tab->pause_dig_value[7],
9ce99b04 Ping-Ke Shih 2017-08-17  513  		dig_tab->pause_dig_value[6], dig_tab->pause_dig_value[5],
9ce99b04 Ping-Ke Shih 2017-08-17  514  		dig_tab->pause_dig_value[4], dig_tab->pause_dig_value[3],
9ce99b04 Ping-Ke Shih 2017-08-17  515  		dig_tab->pause_dig_value[2], dig_tab->pause_dig_value[1],
9ce99b04 Ping-Ke Shih 2017-08-17  516  		dig_tab->pause_dig_value[0]);
9ce99b04 Ping-Ke Shih 2017-08-17  517  }
9ce99b04 Ping-Ke Shih 2017-08-17  518  

:::::: The code at line 494 was first introduced by commit
:::::: 9ce99b04b5b82fdf11e4c76b60a5f82c1e541297 staging: r8822be: Add phydm mini driver

:::::: TO: Ping-Ke Shih <pkshih@...ltek.com>
:::::: CC: Greg Kroah-Hartman <gregkh@...uxfoundation.org>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Download attachment ".config.gz" of type "application/gzip" (29867 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ