Hi Howard,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on bluetooth-next/master]
[also build test WARNING on net-next/master net/master v5.10-rc1 next-20201030]
[cannot apply to bluetooth/master sparc-next/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    
https://github.com/0day-ci/linux/commits/Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045
base:   
https://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git 
master
config: x86_64-randconfig-s022-20201030 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-15) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.3-68-g49c98aa3-dirty
        # 
https://github.com/0day-ci/linux/commit/20ec572cf329be621588cca7150ec51d702fdfac
        git remote add linux-review https://github.com/0day-ci/linux
        git fetch --no-tags linux-review 
Howard-Chung/Bluetooth-Interleave-with-allowlist-scan/20201030-171045
        git checkout 20ec572cf329be621588cca7150ec51d702fdfac
        # save the attached .config to linux build tree
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <l...@intel.com>


"sparse warnings: (new ones prefixed by >>)"
>> net/bluetooth/mgmt_config.c:315:63: sparse: sparse: cast to restricted __le16

vim +315 net/bluetooth/mgmt_config.c

   127  
   128  int set_def_system_config(struct sock *sk, struct hci_dev *hdev, void 
*data,
   129                            u16 data_len)
   130  {
   131          u16 buffer_left = data_len;
   132          u8 *buffer = data;
   133  
   134          if (buffer_left < sizeof(struct mgmt_tlv)) {
   135                  return mgmt_cmd_status(sk, hdev->id,
   136                                         MGMT_OP_SET_DEF_SYSTEM_CONFIG,
   137                                         MGMT_STATUS_INVALID_PARAMS);
   138          }
   139  
   140          /* First pass to validate the tlv */
   141          while (buffer_left >= sizeof(struct mgmt_tlv)) {
   142                  const u8 len = TO_TLV(buffer)->length;
   143                  u8 exp_type_len;
   144                  const u16 exp_len = sizeof(struct mgmt_tlv) +
   145                                      len;
   146                  const u16 type = le16_to_cpu(TO_TLV(buffer)->type);
   147  
   148                  if (buffer_left < exp_len) {
   149                          bt_dev_warn(hdev, "invalid len left %d, exp >= 
%d",
   150                                      buffer_left, exp_len);
   151  
   152                          return mgmt_cmd_status(sk, hdev->id,
   153                                          MGMT_OP_SET_DEF_SYSTEM_CONFIG,
   154                                          MGMT_STATUS_INVALID_PARAMS);
   155                  }
   156  
   157                  /* Please see mgmt-api.txt for documentation of these 
values */
   158                  switch (type) {
   159                  case 0x0000:
   160                  case 0x0001:
   161                  case 0x0002:
   162                  case 0x0003:
   163                  case 0x0004:
   164                  case 0x0005:
   165                  case 0x0006:
   166                  case 0x0007:
   167                  case 0x0008:
   168                  case 0x0009:
   169                  case 0x000a:
   170                  case 0x000b:
   171                  case 0x000c:
   172                  case 0x000d:
   173                  case 0x000e:
   174                  case 0x000f:
   175                  case 0x0010:
   176                  case 0x0011:
   177                  case 0x0012:
   178                  case 0x0013:
   179                  case 0x0014:
   180                  case 0x0015:
   181                  case 0x0016:
   182                  case 0x0017:
   183                  case 0x0018:
   184                  case 0x0019:
   185                  case 0x001a:
   186                  case 0x001b:
   187                  case 0x001d:
   188                  case 0x001e:
   189                          exp_type_len = sizeof(u16);
   190                          break;
   191                  case 0x001f:
   192                          exp_type_len = sizeof(u8);
   193                          break;
   194                  default:
   195                          exp_type_len = 0;
   196                          bt_dev_warn(hdev, "unsupported parameter %u", 
type);
   197                          break;
   198                  }
   199  
   200                  if (exp_type_len && len != exp_type_len) {
   201                          bt_dev_warn(hdev, "invalid length %d, exp %zu 
for type %d",
   202                                      len, exp_type_len, type);
   203  
   204                          return mgmt_cmd_status(sk, hdev->id,
   205                                  MGMT_OP_SET_DEF_SYSTEM_CONFIG,
   206                                  MGMT_STATUS_INVALID_PARAMS);
   207                  }
   208  
   209                  buffer_left -= exp_len;
   210                  buffer += exp_len;
   211          }
   212  
   213          buffer_left = data_len;
   214          buffer = data;
   215          while (buffer_left >= sizeof(struct mgmt_tlv)) {
   216                  const u8 len = TO_TLV(buffer)->length;
   217                  const u16 exp_len = sizeof(struct mgmt_tlv) +
   218                                      len;
   219                  const u16 type = le16_to_cpu(TO_TLV(buffer)->type);
   220  
   221                  switch (type) {
   222                  case 0x0000:
   223                          hdev->def_page_scan_type = TLV_GET_LE16(buffer);
   224                          break;
   225                  case 0x0001:
   226                          hdev->def_page_scan_int = TLV_GET_LE16(buffer);
   227                          break;
   228                  case 0x0002:
   229                          hdev->def_page_scan_window = 
TLV_GET_LE16(buffer);
   230                          break;
   231                  case 0x0003:
   232                          hdev->def_inq_scan_type = TLV_GET_LE16(buffer);
   233                          break;
   234                  case 0x0004:
   235                          hdev->def_inq_scan_int = TLV_GET_LE16(buffer);
   236                          break;
   237                  case 0x0005:
   238                          hdev->def_inq_scan_window = 
TLV_GET_LE16(buffer);
   239                          break;
   240                  case 0x0006:
   241                          hdev->def_br_lsto = TLV_GET_LE16(buffer);
   242                          break;
   243                  case 0x0007:
   244                          hdev->def_page_timeout = TLV_GET_LE16(buffer);
   245                          break;
   246                  case 0x0008:
   247                          hdev->sniff_min_interval = TLV_GET_LE16(buffer);
   248                          break;
   249                  case 0x0009:
   250                          hdev->sniff_max_interval = TLV_GET_LE16(buffer);
   251                          break;
   252                  case 0x000a:
   253                          hdev->le_adv_min_interval = 
TLV_GET_LE16(buffer);
   254                          break;
   255                  case 0x000b:
   256                          hdev->le_adv_max_interval = 
TLV_GET_LE16(buffer);
   257                          break;
   258                  case 0x000c:
   259                          hdev->def_multi_adv_rotation_duration =
   260                                                             
TLV_GET_LE16(buffer);
   261                          break;
   262                  case 0x000d:
   263                          hdev->le_scan_interval = TLV_GET_LE16(buffer);
   264                          break;
   265                  case 0x000e:
   266                          hdev->le_scan_window = TLV_GET_LE16(buffer);
   267                          break;
   268                  case 0x000f:
   269                          hdev->le_scan_int_suspend = 
TLV_GET_LE16(buffer);
   270                          break;
   271                  case 0x0010:
   272                          hdev->le_scan_window_suspend = 
TLV_GET_LE16(buffer);
   273                          break;
   274                  case 0x0011:
   275                          hdev->le_scan_int_discovery = 
TLV_GET_LE16(buffer);
   276                          break;
   277                  case 0x00012:
   278                          hdev->le_scan_window_discovery = 
TLV_GET_LE16(buffer);
   279                          break;
   280                  case 0x00013:
   281                          hdev->le_scan_int_adv_monitor = 
TLV_GET_LE16(buffer);
   282                          break;
   283                  case 0x00014:
   284                          hdev->le_scan_window_adv_monitor = 
TLV_GET_LE16(buffer);
   285                          break;
   286                  case 0x00015:
   287                          hdev->le_scan_int_connect = 
TLV_GET_LE16(buffer);
   288                          break;
   289                  case 0x00016:
   290                          hdev->le_scan_window_connect = 
TLV_GET_LE16(buffer);
   291                          break;
   292                  case 0x00017:
   293                          hdev->le_conn_min_interval = 
TLV_GET_LE16(buffer);
   294                          break;
   295                  case 0x00018:
   296                          hdev->le_conn_max_interval = 
TLV_GET_LE16(buffer);
   297                          break;
   298                  case 0x00019:
   299                          hdev->le_conn_latency = TLV_GET_LE16(buffer);
   300                          break;
   301                  case 0x0001a:
   302                          hdev->le_supv_timeout = TLV_GET_LE16(buffer);
   303                          break;
   304                  case 0x0001b:
   305                          hdev->def_le_autoconnect_timeout =
   306                                          
msecs_to_jiffies(TLV_GET_LE16(buffer));
   307                          break;
   308                  case 0x0001d:
   309                          hdev->advmon_allowlist_duration = 
TLV_GET_LE16(buffer);
   310                          break;
   311                  case 0x0001e:
   312                          hdev->advmon_no_filter_duration = 
TLV_GET_LE16(buffer);
   313                          break;
   314                  case 0x0001f:
 > 315                          hdev->enable_advmon_interleave_scan = 
 > TLV_GET_LE8(buffer);
   316                          break;
   317                  default:
   318                          bt_dev_warn(hdev, "unsupported parameter %u", 
type);
   319                          break;
   320                  }
   321  
   322                  buffer_left -= exp_len;
   323                  buffer += exp_len;
   324          }
   325  
   326          return mgmt_cmd_complete(sk, hdev->id,
   327                                   MGMT_OP_SET_DEF_SYSTEM_CONFIG, 0, 
NULL, 0);
   328  }
   329  

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

Attachment: .config.gz
Description: application/gzip

Reply via email to