1 /*
2 BlueZ - Bluetooth protocol stack for Linux
3
4 Copyright (C) 2014 Intel Corporation
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation;
9
10 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED.
22 */
23
24 #include <linux/debugfs.h>
25
26 #include <net/bluetooth/bluetooth.h>
27 #include <net/bluetooth/hci_core.h>
28
29 #include "smp.h"
30 #include "hci_debugfs.h"
31
32 #define DEFINE_QUIRK_ATTRIBUTE(__name, __quirk) \
33 static ssize_t __name ## _read(struct file *file, \
34 char __user *user_buf, \
35 size_t count, loff_t *ppos) \
36 { \
37 struct hci_dev *hdev = file->private_data; \
38 char buf[3]; \
39 \
40 buf[0] = test_bit(__quirk, &hdev->quirks) ? 'Y' : 'N'; \
41 buf[1] = '\n'; \
42 buf[2] = '\0'; \
43 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); \
44 } \
45 \
46 static ssize_t __name ## _write(struct file *file, \
47 const char __user *user_buf, \
48 size_t count, loff_t *ppos) \
49 { \
50 struct hci_dev *hdev = file->private_data; \
51 bool enable; \
52 int err; \
53 \
54 if (test_bit(HCI_UP, &hdev->flags)) \
55 return -EBUSY; \
56 \
57 err = kstrtobool_from_user(user_buf, count, &enable); \
58 if (err) \
59 return err; \
60 \
61 if (enable == test_bit(__quirk, &hdev->quirks)) \
62 return -EALREADY; \
63 \
64 change_bit(__quirk, &hdev->quirks); \
65 \
66 return count; \
67 } \
68 \
69 static const struct file_operations __name ## _fops = { \
70 .open = simple_open, \
71 .read = __name ## _read, \
72 .write = __name ## _write, \
73 .llseek = default_llseek, \
74 } \
75
76 #define DEFINE_INFO_ATTRIBUTE(__name, __field) \
77 static int __name ## _show(struct seq_file *f, void *ptr) \
78 { \
79 struct hci_dev *hdev = f->private; \
80 \
81 hci_dev_lock(hdev); \
82 seq_printf(f, "%s\n", hdev->__field ? : ""); \
83 hci_dev_unlock(hdev); \
84 \
85 return 0; \
86 } \
87 \
88 DEFINE_SHOW_ATTRIBUTE(__name)
89
features_show(struct seq_file *f, void *ptr)90 static int features_show(struct seq_file *f, void *ptr)
91 {
92 struct hci_dev *hdev = f->private;
93 u8 p;
94
95 hci_dev_lock(hdev);
96 for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++)
97 seq_printf(f, "%2u: %8ph\n", p, hdev->features[p]);
98 if (lmp_le_capable(hdev))
99 seq_printf(f, "LE: %8ph\n", hdev->le_features);
100 hci_dev_unlock(hdev);
101
102 return 0;
103 }
104
105 DEFINE_SHOW_ATTRIBUTE(features);
106
device_id_show(struct seq_file *f, void *ptr)107 static int device_id_show(struct seq_file *f, void *ptr)
108 {
109 struct hci_dev *hdev = f->private;
110
111 hci_dev_lock(hdev);
112 seq_printf(f, "%4.4x:%4.4x:%4.4x:%4.4x\n", hdev->devid_source,
113 hdev->devid_vendor, hdev->devid_product, hdev->devid_version);
114 hci_dev_unlock(hdev);
115
116 return 0;
117 }
118
119 DEFINE_SHOW_ATTRIBUTE(device_id);
120
device_list_show(struct seq_file *f, void *ptr)121 static int device_list_show(struct seq_file *f, void *ptr)
122 {
123 struct hci_dev *hdev = f->private;
124 struct hci_conn_params *p;
125 struct bdaddr_list *b;
126
127 hci_dev_lock(hdev);
128 list_for_each_entry(b, &hdev->accept_list, list)
129 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
130 list_for_each_entry(p, &hdev->le_conn_params, list) {
131 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
132 p->auto_connect);
133 }
134 hci_dev_unlock(hdev);
135
136 return 0;
137 }
138
139 DEFINE_SHOW_ATTRIBUTE(device_list);
140
blacklist_show(struct seq_file *f, void *p)141 static int blacklist_show(struct seq_file *f, void *p)
142 {
143 struct hci_dev *hdev = f->private;
144 struct bdaddr_list *b;
145
146 hci_dev_lock(hdev);
147 list_for_each_entry(b, &hdev->reject_list, list)
148 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
149 hci_dev_unlock(hdev);
150
151 return 0;
152 }
153
154 DEFINE_SHOW_ATTRIBUTE(blacklist);
155
blocked_keys_show(struct seq_file *f, void *p)156 static int blocked_keys_show(struct seq_file *f, void *p)
157 {
158 struct hci_dev *hdev = f->private;
159 struct blocked_key *key;
160
161 rcu_read_lock();
162 list_for_each_entry_rcu(key, &hdev->blocked_keys, list)
163 seq_printf(f, "%u %*phN\n", key->type, 16, key->val);
164 rcu_read_unlock();
165
166 return 0;
167 }
168
169 DEFINE_SHOW_ATTRIBUTE(blocked_keys);
170
uuids_show(struct seq_file *f, void *p)171 static int uuids_show(struct seq_file *f, void *p)
172 {
173 struct hci_dev *hdev = f->private;
174 struct bt_uuid *uuid;
175
176 hci_dev_lock(hdev);
177 list_for_each_entry(uuid, &hdev->uuids, list) {
178 u8 i, val[16];
179
180 /* The Bluetooth UUID values are stored in big endian,
181 * but with reversed byte order. So convert them into
182 * the right order for the %pUb modifier.
183 */
184 for (i = 0; i < 16; i++)
185 val[i] = uuid->uuid[15 - i];
186
187 seq_printf(f, "%pUb\n", val);
188 }
189 hci_dev_unlock(hdev);
190
191 return 0;
192 }
193
194 DEFINE_SHOW_ATTRIBUTE(uuids);
195
remote_oob_show(struct seq_file *f, void *ptr)196 static int remote_oob_show(struct seq_file *f, void *ptr)
197 {
198 struct hci_dev *hdev = f->private;
199 struct oob_data *data;
200
201 hci_dev_lock(hdev);
202 list_for_each_entry(data, &hdev->remote_oob_data, list) {
203 seq_printf(f, "%pMR (type %u) %u %*phN %*phN %*phN %*phN\n",
204 &data->bdaddr, data->bdaddr_type, data->present,
205 16, data->hash192, 16, data->rand192,
206 16, data->hash256, 16, data->rand256);
207 }
208 hci_dev_unlock(hdev);
209
210 return 0;
211 }
212
213 DEFINE_SHOW_ATTRIBUTE(remote_oob);
214
conn_info_min_age_set(void *data, u64 val)215 static int conn_info_min_age_set(void *data, u64 val)
216 {
217 struct hci_dev *hdev = data;
218
219 hci_dev_lock(hdev);
220 if (val == 0 || val > hdev->conn_info_max_age) {
221 hci_dev_unlock(hdev);
222 return -EINVAL;
223 }
224
225 hdev->conn_info_min_age = val;
226 hci_dev_unlock(hdev);
227
228 return 0;
229 }
230
conn_info_min_age_get(void *data, u64 *val)231 static int conn_info_min_age_get(void *data, u64 *val)
232 {
233 struct hci_dev *hdev = data;
234
235 hci_dev_lock(hdev);
236 *val = hdev->conn_info_min_age;
237 hci_dev_unlock(hdev);
238
239 return 0;
240 }
241
242 DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
243 conn_info_min_age_set, "%llu\n");
244
conn_info_max_age_set(void *data, u64 val)245 static int conn_info_max_age_set(void *data, u64 val)
246 {
247 struct hci_dev *hdev = data;
248
249 hci_dev_lock(hdev);
250 if (val == 0 || val < hdev->conn_info_min_age) {
251 hci_dev_unlock(hdev);
252 return -EINVAL;
253 }
254
255 hdev->conn_info_max_age = val;
256 hci_dev_unlock(hdev);
257
258 return 0;
259 }
260
conn_info_max_age_get(void *data, u64 *val)261 static int conn_info_max_age_get(void *data, u64 *val)
262 {
263 struct hci_dev *hdev = data;
264
265 hci_dev_lock(hdev);
266 *val = hdev->conn_info_max_age;
267 hci_dev_unlock(hdev);
268
269 return 0;
270 }
271
272 DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
273 conn_info_max_age_set, "%llu\n");
274
use_debug_keys_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)275 static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
276 size_t count, loff_t *ppos)
277 {
278 struct hci_dev *hdev = file->private_data;
279 char buf[3];
280
281 buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y': 'N';
282 buf[1] = '\n';
283 buf[2] = '\0';
284 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
285 }
286
287 static const struct file_operations use_debug_keys_fops = {
288 .open = simple_open,
289 .read = use_debug_keys_read,
290 .llseek = default_llseek,
291 };
292
sc_only_mode_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)293 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
294 size_t count, loff_t *ppos)
295 {
296 struct hci_dev *hdev = file->private_data;
297 char buf[3];
298
299 buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y': 'N';
300 buf[1] = '\n';
301 buf[2] = '\0';
302 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
303 }
304
305 static const struct file_operations sc_only_mode_fops = {
306 .open = simple_open,
307 .read = sc_only_mode_read,
308 .llseek = default_llseek,
309 };
310
311 DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
312 DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
313
hci_debugfs_create_common(struct hci_dev *hdev)314 void hci_debugfs_create_common(struct hci_dev *hdev)
315 {
316 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
317 &features_fops);
318 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
319 &hdev->manufacturer);
320 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
321 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
322 debugfs_create_u8("hardware_error", 0444, hdev->debugfs,
323 &hdev->hw_error_code);
324 debugfs_create_file("device_id", 0444, hdev->debugfs, hdev,
325 &device_id_fops);
326
327 debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
328 &device_list_fops);
329 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
330 &blacklist_fops);
331 debugfs_create_file("blocked_keys", 0444, hdev->debugfs, hdev,
332 &blocked_keys_fops);
333 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
334 debugfs_create_file("remote_oob", 0400, hdev->debugfs, hdev,
335 &remote_oob_fops);
336
337 debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
338 &conn_info_min_age_fops);
339 debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
340 &conn_info_max_age_fops);
341
342 if (lmp_ssp_capable(hdev) || lmp_le_capable(hdev))
343 debugfs_create_file("use_debug_keys", 0444, hdev->debugfs,
344 hdev, &use_debug_keys_fops);
345
346 if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
347 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
348 hdev, &sc_only_mode_fops);
349
350 if (hdev->hw_info)
351 debugfs_create_file("hardware_info", 0444, hdev->debugfs,
352 hdev, &hardware_info_fops);
353
354 if (hdev->fw_info)
355 debugfs_create_file("firmware_info", 0444, hdev->debugfs,
356 hdev, &firmware_info_fops);
357 }
358
inquiry_cache_show(struct seq_file *f, void *p)359 static int inquiry_cache_show(struct seq_file *f, void *p)
360 {
361 struct hci_dev *hdev = f->private;
362 struct discovery_state *cache = &hdev->discovery;
363 struct inquiry_entry *e;
364
365 hci_dev_lock(hdev);
366
367 list_for_each_entry(e, &cache->all, all) {
368 struct inquiry_data *data = &e->data;
369 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
370 &data->bdaddr,
371 data->pscan_rep_mode, data->pscan_period_mode,
372 data->pscan_mode, data->dev_class[2],
373 data->dev_class[1], data->dev_class[0],
374 __le16_to_cpu(data->clock_offset),
375 data->rssi, data->ssp_mode, e->timestamp);
376 }
377
378 hci_dev_unlock(hdev);
379
380 return 0;
381 }
382
383 DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
384
link_keys_show(struct seq_file *f, void *ptr)385 static int link_keys_show(struct seq_file *f, void *ptr)
386 {
387 struct hci_dev *hdev = f->private;
388 struct link_key *key;
389
390 rcu_read_lock();
391 list_for_each_entry_rcu(key, &hdev->link_keys, list)
392 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
393 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
394 rcu_read_unlock();
395
396 return 0;
397 }
398
399 DEFINE_SHOW_ATTRIBUTE(link_keys);
400
dev_class_show(struct seq_file *f, void *ptr)401 static int dev_class_show(struct seq_file *f, void *ptr)
402 {
403 struct hci_dev *hdev = f->private;
404
405 hci_dev_lock(hdev);
406 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
407 hdev->dev_class[1], hdev->dev_class[0]);
408 hci_dev_unlock(hdev);
409
410 return 0;
411 }
412
413 DEFINE_SHOW_ATTRIBUTE(dev_class);
414
voice_setting_get(void *data, u64 *val)415 static int voice_setting_get(void *data, u64 *val)
416 {
417 struct hci_dev *hdev = data;
418
419 hci_dev_lock(hdev);
420 *val = hdev->voice_setting;
421 hci_dev_unlock(hdev);
422
423 return 0;
424 }
425
426 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
427 NULL, "0x%4.4llx\n");
428
ssp_debug_mode_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)429 static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
430 size_t count, loff_t *ppos)
431 {
432 struct hci_dev *hdev = file->private_data;
433 char buf[3];
434
435 buf[0] = hdev->ssp_debug_mode ? 'Y': 'N';
436 buf[1] = '\n';
437 buf[2] = '\0';
438 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
439 }
440
441 static const struct file_operations ssp_debug_mode_fops = {
442 .open = simple_open,
443 .read = ssp_debug_mode_read,
444 .llseek = default_llseek,
445 };
446
auto_accept_delay_set(void *data, u64 val)447 static int auto_accept_delay_set(void *data, u64 val)
448 {
449 struct hci_dev *hdev = data;
450
451 hci_dev_lock(hdev);
452 hdev->auto_accept_delay = val;
453 hci_dev_unlock(hdev);
454
455 return 0;
456 }
457
min_encrypt_key_size_set(void *data, u64 val)458 static int min_encrypt_key_size_set(void *data, u64 val)
459 {
460 struct hci_dev *hdev = data;
461
462 if (val < 1 || val > 16)
463 return -EINVAL;
464
465 hci_dev_lock(hdev);
466 hdev->min_enc_key_size = val;
467 hci_dev_unlock(hdev);
468
469 return 0;
470 }
471
min_encrypt_key_size_get(void *data, u64 *val)472 static int min_encrypt_key_size_get(void *data, u64 *val)
473 {
474 struct hci_dev *hdev = data;
475
476 hci_dev_lock(hdev);
477 *val = hdev->min_enc_key_size;
478 hci_dev_unlock(hdev);
479
480 return 0;
481 }
482
483 DEFINE_SIMPLE_ATTRIBUTE(min_encrypt_key_size_fops,
484 min_encrypt_key_size_get,
485 min_encrypt_key_size_set, "%llu\n");
486
auto_accept_delay_get(void *data, u64 *val)487 static int auto_accept_delay_get(void *data, u64 *val)
488 {
489 struct hci_dev *hdev = data;
490
491 hci_dev_lock(hdev);
492 *val = hdev->auto_accept_delay;
493 hci_dev_unlock(hdev);
494
495 return 0;
496 }
497
498 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
499 auto_accept_delay_set, "%llu\n");
500
idle_timeout_set(void *data, u64 val)501 static int idle_timeout_set(void *data, u64 val)
502 {
503 struct hci_dev *hdev = data;
504
505 if (val != 0 && (val < 500 || val > 3600000))
506 return -EINVAL;
507
508 hci_dev_lock(hdev);
509 hdev->idle_timeout = val;
510 hci_dev_unlock(hdev);
511
512 return 0;
513 }
514
idle_timeout_get(void *data, u64 *val)515 static int idle_timeout_get(void *data, u64 *val)
516 {
517 struct hci_dev *hdev = data;
518
519 hci_dev_lock(hdev);
520 *val = hdev->idle_timeout;
521 hci_dev_unlock(hdev);
522
523 return 0;
524 }
525
526 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
527 idle_timeout_set, "%llu\n");
528
sniff_min_interval_set(void *data, u64 val)529 static int sniff_min_interval_set(void *data, u64 val)
530 {
531 struct hci_dev *hdev = data;
532
533 hci_dev_lock(hdev);
534 if (val == 0 || val % 2 || val > hdev->sniff_max_interval) {
535 hci_dev_unlock(hdev);
536 return -EINVAL;
537 }
538
539 hdev->sniff_min_interval = val;
540 hci_dev_unlock(hdev);
541
542 return 0;
543 }
544
sniff_min_interval_get(void *data, u64 *val)545 static int sniff_min_interval_get(void *data, u64 *val)
546 {
547 struct hci_dev *hdev = data;
548
549 hci_dev_lock(hdev);
550 *val = hdev->sniff_min_interval;
551 hci_dev_unlock(hdev);
552
553 return 0;
554 }
555
556 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
557 sniff_min_interval_set, "%llu\n");
558
sniff_max_interval_set(void *data, u64 val)559 static int sniff_max_interval_set(void *data, u64 val)
560 {
561 struct hci_dev *hdev = data;
562
563 hci_dev_lock(hdev);
564 if (val == 0 || val % 2 || val < hdev->sniff_min_interval) {
565 hci_dev_unlock(hdev);
566 return -EINVAL;
567 }
568
569 hdev->sniff_max_interval = val;
570 hci_dev_unlock(hdev);
571
572 return 0;
573 }
574
sniff_max_interval_get(void *data, u64 *val)575 static int sniff_max_interval_get(void *data, u64 *val)
576 {
577 struct hci_dev *hdev = data;
578
579 hci_dev_lock(hdev);
580 *val = hdev->sniff_max_interval;
581 hci_dev_unlock(hdev);
582
583 return 0;
584 }
585
586 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
587 sniff_max_interval_set, "%llu\n");
588
hci_debugfs_create_bredr(struct hci_dev *hdev)589 void hci_debugfs_create_bredr(struct hci_dev *hdev)
590 {
591 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
592 &inquiry_cache_fops);
593 debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
594 &link_keys_fops);
595 debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
596 &dev_class_fops);
597 debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
598 &voice_setting_fops);
599
600 if (lmp_ssp_capable(hdev)) {
601 debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
602 hdev, &ssp_debug_mode_fops);
603 debugfs_create_file("min_encrypt_key_size", 0644, hdev->debugfs,
604 hdev, &min_encrypt_key_size_fops);
605 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
606 hdev, &auto_accept_delay_fops);
607 }
608
609 if (lmp_sniff_capable(hdev)) {
610 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
611 hdev, &idle_timeout_fops);
612 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
613 hdev, &sniff_min_interval_fops);
614 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
615 hdev, &sniff_max_interval_fops);
616 }
617 }
618
identity_show(struct seq_file *f, void *p)619 static int identity_show(struct seq_file *f, void *p)
620 {
621 struct hci_dev *hdev = f->private;
622 bdaddr_t addr;
623 u8 addr_type;
624
625 hci_dev_lock(hdev);
626
627 hci_copy_identity_address(hdev, &addr, &addr_type);
628
629 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
630 16, hdev->irk, &hdev->rpa);
631
632 hci_dev_unlock(hdev);
633
634 return 0;
635 }
636
637 DEFINE_SHOW_ATTRIBUTE(identity);
638
rpa_timeout_set(void *data, u64 val)639 static int rpa_timeout_set(void *data, u64 val)
640 {
641 struct hci_dev *hdev = data;
642
643 /* Require the RPA timeout to be at least 30 seconds and at most
644 * 24 hours.
645 */
646 if (val < 30 || val > (60 * 60 * 24))
647 return -EINVAL;
648
649 hci_dev_lock(hdev);
650 hdev->rpa_timeout = val;
651 hci_dev_unlock(hdev);
652
653 return 0;
654 }
655
rpa_timeout_get(void *data, u64 *val)656 static int rpa_timeout_get(void *data, u64 *val)
657 {
658 struct hci_dev *hdev = data;
659
660 hci_dev_lock(hdev);
661 *val = hdev->rpa_timeout;
662 hci_dev_unlock(hdev);
663
664 return 0;
665 }
666
667 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
668 rpa_timeout_set, "%llu\n");
669
random_address_show(struct seq_file *f, void *p)670 static int random_address_show(struct seq_file *f, void *p)
671 {
672 struct hci_dev *hdev = f->private;
673
674 hci_dev_lock(hdev);
675 seq_printf(f, "%pMR\n", &hdev->random_addr);
676 hci_dev_unlock(hdev);
677
678 return 0;
679 }
680
681 DEFINE_SHOW_ATTRIBUTE(random_address);
682
static_address_show(struct seq_file *f, void *p)683 static int static_address_show(struct seq_file *f, void *p)
684 {
685 struct hci_dev *hdev = f->private;
686
687 hci_dev_lock(hdev);
688 seq_printf(f, "%pMR\n", &hdev->static_addr);
689 hci_dev_unlock(hdev);
690
691 return 0;
692 }
693
694 DEFINE_SHOW_ATTRIBUTE(static_address);
695
force_static_address_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)696 static ssize_t force_static_address_read(struct file *file,
697 char __user *user_buf,
698 size_t count, loff_t *ppos)
699 {
700 struct hci_dev *hdev = file->private_data;
701 char buf[3];
702
703 buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N';
704 buf[1] = '\n';
705 buf[2] = '\0';
706 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
707 }
708
force_static_address_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)709 static ssize_t force_static_address_write(struct file *file,
710 const char __user *user_buf,
711 size_t count, loff_t *ppos)
712 {
713 struct hci_dev *hdev = file->private_data;
714 bool enable;
715 int err;
716
717 if (test_bit(HCI_UP, &hdev->flags))
718 return -EBUSY;
719
720 err = kstrtobool_from_user(user_buf, count, &enable);
721 if (err)
722 return err;
723
724 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
725 return -EALREADY;
726
727 hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
728
729 return count;
730 }
731
732 static const struct file_operations force_static_address_fops = {
733 .open = simple_open,
734 .read = force_static_address_read,
735 .write = force_static_address_write,
736 .llseek = default_llseek,
737 };
738
white_list_show(struct seq_file *f, void *ptr)739 static int white_list_show(struct seq_file *f, void *ptr)
740 {
741 struct hci_dev *hdev = f->private;
742 struct bdaddr_list *b;
743
744 hci_dev_lock(hdev);
745 list_for_each_entry(b, &hdev->le_accept_list, list)
746 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
747 hci_dev_unlock(hdev);
748
749 return 0;
750 }
751
752 DEFINE_SHOW_ATTRIBUTE(white_list);
753
resolv_list_show(struct seq_file *f, void *ptr)754 static int resolv_list_show(struct seq_file *f, void *ptr)
755 {
756 struct hci_dev *hdev = f->private;
757 struct bdaddr_list *b;
758
759 hci_dev_lock(hdev);
760 list_for_each_entry(b, &hdev->le_resolv_list, list)
761 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
762 hci_dev_unlock(hdev);
763
764 return 0;
765 }
766
767 DEFINE_SHOW_ATTRIBUTE(resolv_list);
768
identity_resolving_keys_show(struct seq_file *f, void *ptr)769 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
770 {
771 struct hci_dev *hdev = f->private;
772 struct smp_irk *irk;
773
774 rcu_read_lock();
775 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
776 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
777 &irk->bdaddr, irk->addr_type,
778 16, irk->val, &irk->rpa);
779 }
780 rcu_read_unlock();
781
782 return 0;
783 }
784
785 DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
786
long_term_keys_show(struct seq_file *f, void *ptr)787 static int long_term_keys_show(struct seq_file *f, void *ptr)
788 {
789 struct hci_dev *hdev = f->private;
790 struct smp_ltk *ltk;
791
792 rcu_read_lock();
793 list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
794 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
795 <k->bdaddr, ltk->bdaddr_type, ltk->authenticated,
796 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
797 __le64_to_cpu(ltk->rand), 16, ltk->val);
798 rcu_read_unlock();
799
800 return 0;
801 }
802
803 DEFINE_SHOW_ATTRIBUTE(long_term_keys);
804
conn_min_interval_set(void *data, u64 val)805 static int conn_min_interval_set(void *data, u64 val)
806 {
807 struct hci_dev *hdev = data;
808
809 hci_dev_lock(hdev);
810 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval) {
811 hci_dev_unlock(hdev);
812 return -EINVAL;
813 }
814
815 hdev->le_conn_min_interval = val;
816 hci_dev_unlock(hdev);
817
818 return 0;
819 }
820
conn_min_interval_get(void *data, u64 *val)821 static int conn_min_interval_get(void *data, u64 *val)
822 {
823 struct hci_dev *hdev = data;
824
825 hci_dev_lock(hdev);
826 *val = hdev->le_conn_min_interval;
827 hci_dev_unlock(hdev);
828
829 return 0;
830 }
831
832 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
833 conn_min_interval_set, "%llu\n");
834
conn_max_interval_set(void *data, u64 val)835 static int conn_max_interval_set(void *data, u64 val)
836 {
837 struct hci_dev *hdev = data;
838
839 hci_dev_lock(hdev);
840 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval) {
841 hci_dev_unlock(hdev);
842 return -EINVAL;
843 }
844
845 hdev->le_conn_max_interval = val;
846 hci_dev_unlock(hdev);
847
848 return 0;
849 }
850
conn_max_interval_get(void *data, u64 *val)851 static int conn_max_interval_get(void *data, u64 *val)
852 {
853 struct hci_dev *hdev = data;
854
855 hci_dev_lock(hdev);
856 *val = hdev->le_conn_max_interval;
857 hci_dev_unlock(hdev);
858
859 return 0;
860 }
861
862 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
863 conn_max_interval_set, "%llu\n");
864
conn_latency_set(void *data, u64 val)865 static int conn_latency_set(void *data, u64 val)
866 {
867 struct hci_dev *hdev = data;
868
869 if (val > 0x01f3)
870 return -EINVAL;
871
872 hci_dev_lock(hdev);
873 hdev->le_conn_latency = val;
874 hci_dev_unlock(hdev);
875
876 return 0;
877 }
878
conn_latency_get(void *data, u64 *val)879 static int conn_latency_get(void *data, u64 *val)
880 {
881 struct hci_dev *hdev = data;
882
883 hci_dev_lock(hdev);
884 *val = hdev->le_conn_latency;
885 hci_dev_unlock(hdev);
886
887 return 0;
888 }
889
890 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
891 conn_latency_set, "%llu\n");
892
supervision_timeout_set(void *data, u64 val)893 static int supervision_timeout_set(void *data, u64 val)
894 {
895 struct hci_dev *hdev = data;
896
897 if (val < 0x000a || val > 0x0c80)
898 return -EINVAL;
899
900 hci_dev_lock(hdev);
901 hdev->le_supv_timeout = val;
902 hci_dev_unlock(hdev);
903
904 return 0;
905 }
906
supervision_timeout_get(void *data, u64 *val)907 static int supervision_timeout_get(void *data, u64 *val)
908 {
909 struct hci_dev *hdev = data;
910
911 hci_dev_lock(hdev);
912 *val = hdev->le_supv_timeout;
913 hci_dev_unlock(hdev);
914
915 return 0;
916 }
917
918 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
919 supervision_timeout_set, "%llu\n");
920
adv_channel_map_set(void *data, u64 val)921 static int adv_channel_map_set(void *data, u64 val)
922 {
923 struct hci_dev *hdev = data;
924
925 if (val < 0x01 || val > 0x07)
926 return -EINVAL;
927
928 hci_dev_lock(hdev);
929 hdev->le_adv_channel_map = val;
930 hci_dev_unlock(hdev);
931
932 return 0;
933 }
934
adv_channel_map_get(void *data, u64 *val)935 static int adv_channel_map_get(void *data, u64 *val)
936 {
937 struct hci_dev *hdev = data;
938
939 hci_dev_lock(hdev);
940 *val = hdev->le_adv_channel_map;
941 hci_dev_unlock(hdev);
942
943 return 0;
944 }
945
946 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
947 adv_channel_map_set, "%llu\n");
948
adv_min_interval_set(void *data, u64 val)949 static int adv_min_interval_set(void *data, u64 val)
950 {
951 struct hci_dev *hdev = data;
952
953 hci_dev_lock(hdev);
954 if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval) {
955 hci_dev_unlock(hdev);
956 return -EINVAL;
957 }
958
959 hdev->le_adv_min_interval = val;
960 hci_dev_unlock(hdev);
961
962 return 0;
963 }
964
adv_min_interval_get(void *data, u64 *val)965 static int adv_min_interval_get(void *data, u64 *val)
966 {
967 struct hci_dev *hdev = data;
968
969 hci_dev_lock(hdev);
970 *val = hdev->le_adv_min_interval;
971 hci_dev_unlock(hdev);
972
973 return 0;
974 }
975
976 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
977 adv_min_interval_set, "%llu\n");
978
adv_max_interval_set(void *data, u64 val)979 static int adv_max_interval_set(void *data, u64 val)
980 {
981 struct hci_dev *hdev = data;
982
983 hci_dev_lock(hdev);
984 if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval) {
985 hci_dev_unlock(hdev);
986 return -EINVAL;
987 }
988
989 hdev->le_adv_max_interval = val;
990 hci_dev_unlock(hdev);
991
992 return 0;
993 }
994
adv_max_interval_get(void *data, u64 *val)995 static int adv_max_interval_get(void *data, u64 *val)
996 {
997 struct hci_dev *hdev = data;
998
999 hci_dev_lock(hdev);
1000 *val = hdev->le_adv_max_interval;
1001 hci_dev_unlock(hdev);
1002
1003 return 0;
1004 }
1005
1006 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
1007 adv_max_interval_set, "%llu\n");
1008
min_key_size_set(void *data, u64 val)1009 static int min_key_size_set(void *data, u64 val)
1010 {
1011 struct hci_dev *hdev = data;
1012
1013 hci_dev_lock(hdev);
1014 if (val > hdev->le_max_key_size || val < SMP_MIN_ENC_KEY_SIZE) {
1015 hci_dev_unlock(hdev);
1016 return -EINVAL;
1017 }
1018
1019 hdev->le_min_key_size = val;
1020 hci_dev_unlock(hdev);
1021
1022 return 0;
1023 }
1024
min_key_size_get(void *data, u64 *val)1025 static int min_key_size_get(void *data, u64 *val)
1026 {
1027 struct hci_dev *hdev = data;
1028
1029 hci_dev_lock(hdev);
1030 *val = hdev->le_min_key_size;
1031 hci_dev_unlock(hdev);
1032
1033 return 0;
1034 }
1035
1036 DEFINE_SIMPLE_ATTRIBUTE(min_key_size_fops, min_key_size_get,
1037 min_key_size_set, "%llu\n");
1038
max_key_size_set(void *data, u64 val)1039 static int max_key_size_set(void *data, u64 val)
1040 {
1041 struct hci_dev *hdev = data;
1042
1043 hci_dev_lock(hdev);
1044 if (val > SMP_MAX_ENC_KEY_SIZE || val < hdev->le_min_key_size) {
1045 hci_dev_unlock(hdev);
1046 return -EINVAL;
1047 }
1048
1049 hdev->le_max_key_size = val;
1050 hci_dev_unlock(hdev);
1051
1052 return 0;
1053 }
1054
max_key_size_get(void *data, u64 *val)1055 static int max_key_size_get(void *data, u64 *val)
1056 {
1057 struct hci_dev *hdev = data;
1058
1059 hci_dev_lock(hdev);
1060 *val = hdev->le_max_key_size;
1061 hci_dev_unlock(hdev);
1062
1063 return 0;
1064 }
1065
1066 DEFINE_SIMPLE_ATTRIBUTE(max_key_size_fops, max_key_size_get,
1067 max_key_size_set, "%llu\n");
1068
auth_payload_timeout_set(void *data, u64 val)1069 static int auth_payload_timeout_set(void *data, u64 val)
1070 {
1071 struct hci_dev *hdev = data;
1072
1073 if (val < 0x0001 || val > 0xffff)
1074 return -EINVAL;
1075
1076 hci_dev_lock(hdev);
1077 hdev->auth_payload_timeout = val;
1078 hci_dev_unlock(hdev);
1079
1080 return 0;
1081 }
1082
auth_payload_timeout_get(void *data, u64 *val)1083 static int auth_payload_timeout_get(void *data, u64 *val)
1084 {
1085 struct hci_dev *hdev = data;
1086
1087 hci_dev_lock(hdev);
1088 *val = hdev->auth_payload_timeout;
1089 hci_dev_unlock(hdev);
1090
1091 return 0;
1092 }
1093
1094 DEFINE_SIMPLE_ATTRIBUTE(auth_payload_timeout_fops,
1095 auth_payload_timeout_get,
1096 auth_payload_timeout_set, "%llu\n");
1097
force_no_mitm_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)1098 static ssize_t force_no_mitm_read(struct file *file,
1099 char __user *user_buf,
1100 size_t count, loff_t *ppos)
1101 {
1102 struct hci_dev *hdev = file->private_data;
1103 char buf[3];
1104
1105 buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM) ? 'Y' : 'N';
1106 buf[1] = '\n';
1107 buf[2] = '\0';
1108 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1109 }
1110
force_no_mitm_write(struct file *file, const char __user *user_buf, size_t count, loff_t *ppos)1111 static ssize_t force_no_mitm_write(struct file *file,
1112 const char __user *user_buf,
1113 size_t count, loff_t *ppos)
1114 {
1115 struct hci_dev *hdev = file->private_data;
1116 char buf[32];
1117 size_t buf_size = min(count, (sizeof(buf) - 1));
1118 bool enable;
1119
1120 if (copy_from_user(buf, user_buf, buf_size))
1121 return -EFAULT;
1122
1123 buf[buf_size] = '\0';
1124 if (strtobool(buf, &enable))
1125 return -EINVAL;
1126
1127 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM))
1128 return -EALREADY;
1129
1130 hci_dev_change_flag(hdev, HCI_FORCE_NO_MITM);
1131
1132 return count;
1133 }
1134
1135 static const struct file_operations force_no_mitm_fops = {
1136 .open = simple_open,
1137 .read = force_no_mitm_read,
1138 .write = force_no_mitm_write,
1139 .llseek = default_llseek,
1140 };
1141
1142 DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
1143 HCI_QUIRK_STRICT_DUPLICATE_FILTER);
1144 DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
1145 HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
1146
hci_debugfs_create_le(struct hci_dev *hdev)1147 void hci_debugfs_create_le(struct hci_dev *hdev)
1148 {
1149 debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
1150 &identity_fops);
1151 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
1152 &rpa_timeout_fops);
1153 debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
1154 &random_address_fops);
1155 debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
1156 &static_address_fops);
1157
1158 /* For controllers with a public address, provide a debug
1159 * option to force the usage of the configured static
1160 * address. By default the public address is used.
1161 */
1162 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1163 debugfs_create_file("force_static_address", 0644,
1164 hdev->debugfs, hdev,
1165 &force_static_address_fops);
1166
1167 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1168 &hdev->le_accept_list_size);
1169 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1170 &white_list_fops);
1171 debugfs_create_u8("resolv_list_size", 0444, hdev->debugfs,
1172 &hdev->le_resolv_list_size);
1173 debugfs_create_file("resolv_list", 0444, hdev->debugfs, hdev,
1174 &resolv_list_fops);
1175 debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
1176 hdev, &identity_resolving_keys_fops);
1177 debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
1178 &long_term_keys_fops);
1179 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
1180 &conn_min_interval_fops);
1181 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
1182 &conn_max_interval_fops);
1183 debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
1184 &conn_latency_fops);
1185 debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
1186 &supervision_timeout_fops);
1187 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
1188 &adv_channel_map_fops);
1189 debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
1190 &adv_min_interval_fops);
1191 debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
1192 &adv_max_interval_fops);
1193 debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
1194 &hdev->discov_interleaved_timeout);
1195 debugfs_create_file("min_key_size", 0644, hdev->debugfs, hdev,
1196 &min_key_size_fops);
1197 debugfs_create_file("max_key_size", 0644, hdev->debugfs, hdev,
1198 &max_key_size_fops);
1199 debugfs_create_file("auth_payload_timeout", 0644, hdev->debugfs, hdev,
1200 &auth_payload_timeout_fops);
1201 debugfs_create_file("force_no_mitm", 0644, hdev->debugfs, hdev,
1202 &force_no_mitm_fops);
1203
1204 debugfs_create_file("quirk_strict_duplicate_filter", 0644,
1205 hdev->debugfs, hdev,
1206 &quirk_strict_duplicate_filter_fops);
1207 debugfs_create_file("quirk_simultaneous_discovery", 0644,
1208 hdev->debugfs, hdev,
1209 &quirk_simultaneous_discovery_fops);
1210 }
1211
hci_debugfs_create_conn(struct hci_conn *conn)1212 void hci_debugfs_create_conn(struct hci_conn *conn)
1213 {
1214 struct hci_dev *hdev = conn->hdev;
1215 char name[6];
1216
1217 if (IS_ERR_OR_NULL(hdev->debugfs))
1218 return;
1219
1220 snprintf(name, sizeof(name), "%u", conn->handle);
1221 conn->debugfs = debugfs_create_dir(name, hdev->debugfs);
1222 }
1223