Re: [PATCH v6 5/5] Bluetooth: Add toggle to switch off interleave scan

From: kernel test robot
Date: Fri Oct 30 2020 - 07:22:18 EST


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