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 <lkp@xxxxxxxxx> "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-all@xxxxxxxxxxxx
Attachment:
.config.gz
Description: application/gzip