Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
10
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth HCI event handling. */
26
27#include <asm/unaligned.h>
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h>
31#include <net/bluetooth/mgmt.h>
32
33#include "hci_request.h"
34#include "hci_debugfs.h"
35#include "a2mp.h"
36#include "amp.h"
37#include "smp.h"
38#include "msft.h"
39
40#define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
41 "\x00\x00\x00\x00\x00\x00\x00\x00"
42
43/* Handle HCI Event packets */
44
45static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb,
46 u8 *new_status)
47{
48 __u8 status = *((__u8 *) skb->data);
49
50 BT_DBG("%s status 0x%2.2x", hdev->name, status);
51
52 /* It is possible that we receive Inquiry Complete event right
53 * before we receive Inquiry Cancel Command Complete event, in
54 * which case the latter event should have status of Command
55 * Disallowed (0x0c). This should not be treated as error, since
56 * we actually achieve what Inquiry Cancel wants to achieve,
57 * which is to end the last Inquiry session.
58 */
59 if (status == 0x0c && !test_bit(HCI_INQUIRY, &hdev->flags)) {
60 bt_dev_warn(hdev, "Ignoring error of Inquiry Cancel command");
61 status = 0x00;
62 }
63
64 *new_status = status;
65
66 if (status)
67 return;
68
69 clear_bit(HCI_INQUIRY, &hdev->flags);
70 smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
71 wake_up_bit(&hdev->flags, HCI_INQUIRY);
72
73 hci_dev_lock(hdev);
74 /* Set discovery state to stopped if we're not doing LE active
75 * scanning.
76 */
77 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
78 hdev->le_scan_type != LE_SCAN_ACTIVE)
79 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
80 hci_dev_unlock(hdev);
81
82 hci_conn_check_pending(hdev);
83}
84
85static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
86{
87 __u8 status = *((__u8 *) skb->data);
88
89 BT_DBG("%s status 0x%2.2x", hdev->name, status);
90
91 if (status)
92 return;
93
94 hci_dev_set_flag(hdev, HCI_PERIODIC_INQ);
95}
96
97static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
98{
99 __u8 status = *((__u8 *) skb->data);
100
101 BT_DBG("%s status 0x%2.2x", hdev->name, status);
102
103 if (status)
104 return;
105
106 hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);
107
108 hci_conn_check_pending(hdev);
109}
110
111static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
112 struct sk_buff *skb)
113{
114 BT_DBG("%s", hdev->name);
115}
116
117static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
118{
119 struct hci_rp_role_discovery *rp = (void *) skb->data;
120 struct hci_conn *conn;
121
122 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
123
124 if (rp->status)
125 return;
126
127 hci_dev_lock(hdev);
128
129 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
130 if (conn)
131 conn->role = rp->role;
132
133 hci_dev_unlock(hdev);
134}
135
136static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
137{
138 struct hci_rp_read_link_policy *rp = (void *) skb->data;
139 struct hci_conn *conn;
140
141 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
142
143 if (rp->status)
144 return;
145
146 hci_dev_lock(hdev);
147
148 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
149 if (conn)
150 conn->link_policy = __le16_to_cpu(rp->policy);
151
152 hci_dev_unlock(hdev);
153}
154
155static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
156{
157 struct hci_rp_write_link_policy *rp = (void *) skb->data;
158 struct hci_conn *conn;
159 void *sent;
160
161 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
162
163 if (rp->status)
164 return;
165
166 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
167 if (!sent)
168 return;
169
170 hci_dev_lock(hdev);
171
172 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
173 if (conn)
174 conn->link_policy = get_unaligned_le16(sent + 2);
175
176 hci_dev_unlock(hdev);
177}
178
179static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
180 struct sk_buff *skb)
181{
182 struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
183
184 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
185
186 if (rp->status)
187 return;
188
189 hdev->link_policy = __le16_to_cpu(rp->policy);
190}
191
192static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
193 struct sk_buff *skb)
194{
195 __u8 status = *((__u8 *) skb->data);
196 void *sent;
197
198 BT_DBG("%s status 0x%2.2x", hdev->name, status);
199
200 if (status)
201 return;
202
203 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
204 if (!sent)
205 return;
206
207 hdev->link_policy = get_unaligned_le16(sent);
208}
209
210static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
211{
212 __u8 status = *((__u8 *) skb->data);
213
214 BT_DBG("%s status 0x%2.2x", hdev->name, status);
215
216 clear_bit(HCI_RESET, &hdev->flags);
217
218 if (status)
219 return;
220
221 /* Reset all non-persistent flags */
222 hci_dev_clear_volatile_flags(hdev);
223
224 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
225
226 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
227 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
228
229 memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
230 hdev->adv_data_len = 0;
231
232 memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
233 hdev->scan_rsp_data_len = 0;
234
235 hdev->le_scan_type = LE_SCAN_PASSIVE;
236
237 hdev->ssp_debug_mode = 0;
238
239 hci_bdaddr_list_clear(&hdev->le_white_list);
240 hci_bdaddr_list_clear(&hdev->le_resolv_list);
241}
242
243static void hci_cc_read_stored_link_key(struct hci_dev *hdev,
244 struct sk_buff *skb)
245{
246 struct hci_rp_read_stored_link_key *rp = (void *)skb->data;
247 struct hci_cp_read_stored_link_key *sent;
248
249 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
250
251 sent = hci_sent_cmd_data(hdev, HCI_OP_READ_STORED_LINK_KEY);
252 if (!sent)
253 return;
254
255 if (!rp->status && sent->read_all == 0x01) {
256 hdev->stored_max_keys = rp->max_keys;
257 hdev->stored_num_keys = rp->num_keys;
258 }
259}
260
261static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
262 struct sk_buff *skb)
263{
264 struct hci_rp_delete_stored_link_key *rp = (void *)skb->data;
265
266 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
267
268 if (rp->status)
269 return;
270
271 if (rp->num_keys <= hdev->stored_num_keys)
272 hdev->stored_num_keys -= rp->num_keys;
273 else
274 hdev->stored_num_keys = 0;
275}
276
277static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
278{
279 __u8 status = *((__u8 *) skb->data);
280 void *sent;
281
282 BT_DBG("%s status 0x%2.2x", hdev->name, status);
283
284 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
285 if (!sent)
286 return;
287
288 hci_dev_lock(hdev);
289
290 if (hci_dev_test_flag(hdev, HCI_MGMT))
291 mgmt_set_local_name_complete(hdev, sent, status);
292 else if (!status)
293 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
294
295 hci_dev_unlock(hdev);
296}
297
298static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
299{
300 struct hci_rp_read_local_name *rp = (void *) skb->data;
301
302 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
303
304 if (rp->status)
305 return;
306
307 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
308 hci_dev_test_flag(hdev, HCI_CONFIG))
309 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
310}
311
312static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
313{
314 __u8 status = *((__u8 *) skb->data);
315 void *sent;
316
317 BT_DBG("%s status 0x%2.2x", hdev->name, status);
318
319 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
320 if (!sent)
321 return;
322
323 hci_dev_lock(hdev);
324
325 if (!status) {
326 __u8 param = *((__u8 *) sent);
327
328 if (param == AUTH_ENABLED)
329 set_bit(HCI_AUTH, &hdev->flags);
330 else
331 clear_bit(HCI_AUTH, &hdev->flags);
332 }
333
334 if (hci_dev_test_flag(hdev, HCI_MGMT))
335 mgmt_auth_enable_complete(hdev, status);
336
337 hci_dev_unlock(hdev);
338}
339
340static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
341{
342 __u8 status = *((__u8 *) skb->data);
343 __u8 param;
344 void *sent;
345
346 BT_DBG("%s status 0x%2.2x", hdev->name, status);
347
348 if (status)
349 return;
350
351 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
352 if (!sent)
353 return;
354
355 param = *((__u8 *) sent);
356
357 if (param)
358 set_bit(HCI_ENCRYPT, &hdev->flags);
359 else
360 clear_bit(HCI_ENCRYPT, &hdev->flags);
361}
362
363static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
364{
365 __u8 status = *((__u8 *) skb->data);
366 __u8 param;
367 void *sent;
368
369 BT_DBG("%s status 0x%2.2x", hdev->name, status);
370
371 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
372 if (!sent)
373 return;
374
375 param = *((__u8 *) sent);
376
377 hci_dev_lock(hdev);
378
379 if (status) {
380 hdev->discov_timeout = 0;
381 goto done;
382 }
383
384 if (param & SCAN_INQUIRY)
385 set_bit(HCI_ISCAN, &hdev->flags);
386 else
387 clear_bit(HCI_ISCAN, &hdev->flags);
388
389 if (param & SCAN_PAGE)
390 set_bit(HCI_PSCAN, &hdev->flags);
391 else
392 clear_bit(HCI_PSCAN, &hdev->flags);
393
394done:
395 hci_dev_unlock(hdev);
396}
397
398static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
399{
400 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
401
402 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
403
404 if (rp->status)
405 return;
406
407 memcpy(hdev->dev_class, rp->dev_class, 3);
408
409 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
410 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
411}
412
413static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
414{
415 __u8 status = *((__u8 *) skb->data);
416 void *sent;
417
418 BT_DBG("%s status 0x%2.2x", hdev->name, status);
419
420 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
421 if (!sent)
422 return;
423
424 hci_dev_lock(hdev);
425
426 if (status == 0)
427 memcpy(hdev->dev_class, sent, 3);
428
429 if (hci_dev_test_flag(hdev, HCI_MGMT))
430 mgmt_set_class_of_dev_complete(hdev, sent, status);
431
432 hci_dev_unlock(hdev);
433}
434
435static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
436{
437 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
438 __u16 setting;
439
440 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
441
442 if (rp->status)
443 return;
444
445 setting = __le16_to_cpu(rp->voice_setting);
446
447 if (hdev->voice_setting == setting)
448 return;
449
450 hdev->voice_setting = setting;
451
452 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
453
454 if (hdev->notify)
455 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
456}
457
458static void hci_cc_write_voice_setting(struct hci_dev *hdev,
459 struct sk_buff *skb)
460{
461 __u8 status = *((__u8 *) skb->data);
462 __u16 setting;
463 void *sent;
464
465 BT_DBG("%s status 0x%2.2x", hdev->name, status);
466
467 if (status)
468 return;
469
470 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
471 if (!sent)
472 return;
473
474 setting = get_unaligned_le16(sent);
475
476 if (hdev->voice_setting == setting)
477 return;
478
479 hdev->voice_setting = setting;
480
481 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
482
483 if (hdev->notify)
484 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
485}
486
487static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
488 struct sk_buff *skb)
489{
490 struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
491
492 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
493
494 if (rp->status)
495 return;
496
497 hdev->num_iac = rp->num_iac;
498
499 BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
500}
501
502static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
503{
504 __u8 status = *((__u8 *) skb->data);
505 struct hci_cp_write_ssp_mode *sent;
506
507 BT_DBG("%s status 0x%2.2x", hdev->name, status);
508
509 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
510 if (!sent)
511 return;
512
513 hci_dev_lock(hdev);
514
515 if (!status) {
516 if (sent->mode)
517 hdev->features[1][0] |= LMP_HOST_SSP;
518 else
519 hdev->features[1][0] &= ~LMP_HOST_SSP;
520 }
521
522 if (hci_dev_test_flag(hdev, HCI_MGMT))
523 mgmt_ssp_enable_complete(hdev, sent->mode, status);
524 else if (!status) {
525 if (sent->mode)
526 hci_dev_set_flag(hdev, HCI_SSP_ENABLED);
527 else
528 hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
529 }
530
531 hci_dev_unlock(hdev);
532}
533
534static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
535{
536 u8 status = *((u8 *) skb->data);
537 struct hci_cp_write_sc_support *sent;
538
539 BT_DBG("%s status 0x%2.2x", hdev->name, status);
540
541 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
542 if (!sent)
543 return;
544
545 hci_dev_lock(hdev);
546
547 if (!status) {
548 if (sent->support)
549 hdev->features[1][0] |= LMP_HOST_SC;
550 else
551 hdev->features[1][0] &= ~LMP_HOST_SC;
552 }
553
554 if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) {
555 if (sent->support)
556 hci_dev_set_flag(hdev, HCI_SC_ENABLED);
557 else
558 hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
559 }
560
561 hci_dev_unlock(hdev);
562}
563
564static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
565{
566 struct hci_rp_read_local_version *rp = (void *) skb->data;
567
568 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
569
570 if (rp->status)
571 return;
572
573 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
574 hci_dev_test_flag(hdev, HCI_CONFIG)) {
575 hdev->hci_ver = rp->hci_ver;
576 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
577 hdev->lmp_ver = rp->lmp_ver;
578 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
579 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
580 }
581}
582
583static void hci_cc_read_local_commands(struct hci_dev *hdev,
584 struct sk_buff *skb)
585{
586 struct hci_rp_read_local_commands *rp = (void *) skb->data;
587
588 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
589
590 if (rp->status)
591 return;
592
593 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
594 hci_dev_test_flag(hdev, HCI_CONFIG))
595 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
596}
597
598static void hci_cc_read_auth_payload_timeout(struct hci_dev *hdev,
599 struct sk_buff *skb)
600{
601 struct hci_rp_read_auth_payload_to *rp = (void *)skb->data;
602 struct hci_conn *conn;
603
604 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
605
606 if (rp->status)
607 return;
608
609 hci_dev_lock(hdev);
610
611 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
612 if (conn)
613 conn->auth_payload_timeout = __le16_to_cpu(rp->timeout);
614
615 hci_dev_unlock(hdev);
616}
617
618static void hci_cc_write_auth_payload_timeout(struct hci_dev *hdev,
619 struct sk_buff *skb)
620{
621 struct hci_rp_write_auth_payload_to *rp = (void *)skb->data;
622 struct hci_conn *conn;
623 void *sent;
624
625 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
626
627 if (rp->status)
628 return;
629
630 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_PAYLOAD_TO);
631 if (!sent)
632 return;
633
634 hci_dev_lock(hdev);
635
636 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
637 if (conn)
638 conn->auth_payload_timeout = get_unaligned_le16(sent + 2);
639
640 hci_dev_unlock(hdev);
641}
642
643static void hci_cc_read_local_features(struct hci_dev *hdev,
644 struct sk_buff *skb)
645{
646 struct hci_rp_read_local_features *rp = (void *) skb->data;
647
648 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
649
650 if (rp->status)
651 return;
652
653 memcpy(hdev->features, rp->features, 8);
654
655 /* Adjust default settings according to features
656 * supported by device. */
657
658 if (hdev->features[0][0] & LMP_3SLOT)
659 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
660
661 if (hdev->features[0][0] & LMP_5SLOT)
662 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
663
664 if (hdev->features[0][1] & LMP_HV2) {
665 hdev->pkt_type |= (HCI_HV2);
666 hdev->esco_type |= (ESCO_HV2);
667 }
668
669 if (hdev->features[0][1] & LMP_HV3) {
670 hdev->pkt_type |= (HCI_HV3);
671 hdev->esco_type |= (ESCO_HV3);
672 }
673
674 if (lmp_esco_capable(hdev))
675 hdev->esco_type |= (ESCO_EV3);
676
677 if (hdev->features[0][4] & LMP_EV4)
678 hdev->esco_type |= (ESCO_EV4);
679
680 if (hdev->features[0][4] & LMP_EV5)
681 hdev->esco_type |= (ESCO_EV5);
682
683 if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
684 hdev->esco_type |= (ESCO_2EV3);
685
686 if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
687 hdev->esco_type |= (ESCO_3EV3);
688
689 if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
690 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
691}
692
693static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
694 struct sk_buff *skb)
695{
696 struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
697
698 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
699
700 if (rp->status)
701 return;
702
703 if (hdev->max_page < rp->max_page)
704 hdev->max_page = rp->max_page;
705
706 if (rp->page < HCI_MAX_PAGES)
707 memcpy(hdev->features[rp->page], rp->features, 8);
708}
709
710static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
711 struct sk_buff *skb)
712{
713 struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
714
715 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
716
717 if (rp->status)
718 return;
719
720 hdev->flow_ctl_mode = rp->mode;
721}
722
723static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
724{
725 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
726
727 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
728
729 if (rp->status)
730 return;
731
732 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
733 hdev->sco_mtu = rp->sco_mtu;
734 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
735 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
736
737 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
738 hdev->sco_mtu = 64;
739 hdev->sco_pkts = 8;
740 }
741
742 hdev->acl_cnt = hdev->acl_pkts;
743 hdev->sco_cnt = hdev->sco_pkts;
744
745 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
746 hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
747}
748
749static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
750{
751 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
752
753 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
754
755 if (rp->status)
756 return;
757
758 if (test_bit(HCI_INIT, &hdev->flags))
759 bacpy(&hdev->bdaddr, &rp->bdaddr);
760
761 if (hci_dev_test_flag(hdev, HCI_SETUP))
762 bacpy(&hdev->setup_addr, &rp->bdaddr);
763}
764
765static void hci_cc_read_local_pairing_opts(struct hci_dev *hdev,
766 struct sk_buff *skb)
767{
768 struct hci_rp_read_local_pairing_opts *rp = (void *) skb->data;
769
770 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
771
772 if (rp->status)
773 return;
774
775 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
776 hci_dev_test_flag(hdev, HCI_CONFIG)) {
777 hdev->pairing_opts = rp->pairing_opts;
778 hdev->max_enc_key_size = rp->max_key_size;
779 }
780}
781
782static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
783 struct sk_buff *skb)
784{
785 struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
786
787 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
788
789 if (rp->status)
790 return;
791
792 if (test_bit(HCI_INIT, &hdev->flags)) {
793 hdev->page_scan_interval = __le16_to_cpu(rp->interval);
794 hdev->page_scan_window = __le16_to_cpu(rp->window);
795 }
796}
797
798static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
799 struct sk_buff *skb)
800{
801 u8 status = *((u8 *) skb->data);
802 struct hci_cp_write_page_scan_activity *sent;
803
804 BT_DBG("%s status 0x%2.2x", hdev->name, status);
805
806 if (status)
807 return;
808
809 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
810 if (!sent)
811 return;
812
813 hdev->page_scan_interval = __le16_to_cpu(sent->interval);
814 hdev->page_scan_window = __le16_to_cpu(sent->window);
815}
816
817static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
818 struct sk_buff *skb)
819{
820 struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
821
822 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
823
824 if (rp->status)
825 return;
826
827 if (test_bit(HCI_INIT, &hdev->flags))
828 hdev->page_scan_type = rp->type;
829}
830
831static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
832 struct sk_buff *skb)
833{
834 u8 status = *((u8 *) skb->data);
835 u8 *type;
836
837 BT_DBG("%s status 0x%2.2x", hdev->name, status);
838
839 if (status)
840 return;
841
842 type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
843 if (type)
844 hdev->page_scan_type = *type;
845}
846
847static void hci_cc_read_data_block_size(struct hci_dev *hdev,
848 struct sk_buff *skb)
849{
850 struct hci_rp_read_data_block_size *rp = (void *) skb->data;
851
852 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
853
854 if (rp->status)
855 return;
856
857 hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
858 hdev->block_len = __le16_to_cpu(rp->block_len);
859 hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
860
861 hdev->block_cnt = hdev->num_blocks;
862
863 BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
864 hdev->block_cnt, hdev->block_len);
865}
866
867static void hci_cc_read_clock(struct hci_dev *hdev, struct sk_buff *skb)
868{
869 struct hci_rp_read_clock *rp = (void *) skb->data;
870 struct hci_cp_read_clock *cp;
871 struct hci_conn *conn;
872
873 BT_DBG("%s", hdev->name);
874
875 if (skb->len < sizeof(*rp))
876 return;
877
878 if (rp->status)
879 return;
880
881 hci_dev_lock(hdev);
882
883 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
884 if (!cp)
885 goto unlock;
886
887 if (cp->which == 0x00) {
888 hdev->clock = le32_to_cpu(rp->clock);
889 goto unlock;
890 }
891
892 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
893 if (conn) {
894 conn->clock = le32_to_cpu(rp->clock);
895 conn->clock_accuracy = le16_to_cpu(rp->accuracy);
896 }
897
898unlock:
899 hci_dev_unlock(hdev);
900}
901
902static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
903 struct sk_buff *skb)
904{
905 struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
906
907 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
908
909 if (rp->status)
910 return;
911
912 hdev->amp_status = rp->amp_status;
913 hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
914 hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
915 hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
916 hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
917 hdev->amp_type = rp->amp_type;
918 hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
919 hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
920 hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
921 hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
922}
923
924static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
925 struct sk_buff *skb)
926{
927 struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
928
929 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
930
931 if (rp->status)
932 return;
933
934 hdev->inq_tx_power = rp->tx_power;
935}
936
937static void hci_cc_read_def_err_data_reporting(struct hci_dev *hdev,
938 struct sk_buff *skb)
939{
940 struct hci_rp_read_def_err_data_reporting *rp = (void *)skb->data;
941
942 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
943
944 if (rp->status)
945 return;
946
947 hdev->err_data_reporting = rp->err_data_reporting;
948}
949
950static void hci_cc_write_def_err_data_reporting(struct hci_dev *hdev,
951 struct sk_buff *skb)
952{
953 __u8 status = *((__u8 *)skb->data);
954 struct hci_cp_write_def_err_data_reporting *cp;
955
956 BT_DBG("%s status 0x%2.2x", hdev->name, status);
957
958 if (status)
959 return;
960
961 cp = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_ERR_DATA_REPORTING);
962 if (!cp)
963 return;
964
965 hdev->err_data_reporting = cp->err_data_reporting;
966}
967
968static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
969{
970 struct hci_rp_pin_code_reply *rp = (void *) skb->data;
971 struct hci_cp_pin_code_reply *cp;
972 struct hci_conn *conn;
973
974 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
975
976 hci_dev_lock(hdev);
977
978 if (hci_dev_test_flag(hdev, HCI_MGMT))
979 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
980
981 if (rp->status)
982 goto unlock;
983
984 cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
985 if (!cp)
986 goto unlock;
987
988 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
989 if (conn)
990 conn->pin_length = cp->pin_len;
991
992unlock:
993 hci_dev_unlock(hdev);
994}
995
996static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
997{
998 struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
999
1000 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1001
1002 hci_dev_lock(hdev);
1003
1004 if (hci_dev_test_flag(hdev, HCI_MGMT))
1005 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
1006 rp->status);
1007
1008 hci_dev_unlock(hdev);
1009}
1010
1011static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
1012 struct sk_buff *skb)
1013{
1014 struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
1015
1016 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1017
1018 if (rp->status)
1019 return;
1020
1021 hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
1022 hdev->le_pkts = rp->le_max_pkt;
1023
1024 hdev->le_cnt = hdev->le_pkts;
1025
1026 BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
1027}
1028
1029static void hci_cc_le_read_local_features(struct hci_dev *hdev,
1030 struct sk_buff *skb)
1031{
1032 struct hci_rp_le_read_local_features *rp = (void *) skb->data;
1033
1034 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1035
1036 if (rp->status)
1037 return;
1038
1039 memcpy(hdev->le_features, rp->features, 8);
1040}
1041
1042static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
1043 struct sk_buff *skb)
1044{
1045 struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
1046
1047 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1048
1049 if (rp->status)
1050 return;
1051
1052 hdev->adv_tx_power = rp->tx_power;
1053}
1054
1055static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
1056{
1057 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1058
1059 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1060
1061 hci_dev_lock(hdev);
1062
1063 if (hci_dev_test_flag(hdev, HCI_MGMT))
1064 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
1065 rp->status);
1066
1067 hci_dev_unlock(hdev);
1068}
1069
1070static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
1071 struct sk_buff *skb)
1072{
1073 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1074
1075 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1076
1077 hci_dev_lock(hdev);
1078
1079 if (hci_dev_test_flag(hdev, HCI_MGMT))
1080 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
1081 ACL_LINK, 0, rp->status);
1082
1083 hci_dev_unlock(hdev);
1084}
1085
1086static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
1087{
1088 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1089
1090 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1091
1092 hci_dev_lock(hdev);
1093
1094 if (hci_dev_test_flag(hdev, HCI_MGMT))
1095 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
1096 0, rp->status);
1097
1098 hci_dev_unlock(hdev);
1099}
1100
1101static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
1102 struct sk_buff *skb)
1103{
1104 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1105
1106 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1107
1108 hci_dev_lock(hdev);
1109
1110 if (hci_dev_test_flag(hdev, HCI_MGMT))
1111 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1112 ACL_LINK, 0, rp->status);
1113
1114 hci_dev_unlock(hdev);
1115}
1116
1117static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
1118 struct sk_buff *skb)
1119{
1120 struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1121
1122 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1123}
1124
1125static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
1126 struct sk_buff *skb)
1127{
1128 struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
1129
1130 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1131}
1132
1133static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
1134{
1135 __u8 status = *((__u8 *) skb->data);
1136 bdaddr_t *sent;
1137
1138 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1139
1140 if (status)
1141 return;
1142
1143 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
1144 if (!sent)
1145 return;
1146
1147 hci_dev_lock(hdev);
1148
1149 bacpy(&hdev->random_addr, sent);
1150
1151 hci_dev_unlock(hdev);
1152}
1153
1154static void hci_cc_le_set_default_phy(struct hci_dev *hdev, struct sk_buff *skb)
1155{
1156 __u8 status = *((__u8 *) skb->data);
1157 struct hci_cp_le_set_default_phy *cp;
1158
1159 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1160
1161 if (status)
1162 return;
1163
1164 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_DEFAULT_PHY);
1165 if (!cp)
1166 return;
1167
1168 hci_dev_lock(hdev);
1169
1170 hdev->le_tx_def_phys = cp->tx_phys;
1171 hdev->le_rx_def_phys = cp->rx_phys;
1172
1173 hci_dev_unlock(hdev);
1174}
1175
1176static void hci_cc_le_set_adv_set_random_addr(struct hci_dev *hdev,
1177 struct sk_buff *skb)
1178{
1179 __u8 status = *((__u8 *) skb->data);
1180 struct hci_cp_le_set_adv_set_rand_addr *cp;
1181 struct adv_info *adv_instance;
1182
1183 if (status)
1184 return;
1185
1186 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_SET_RAND_ADDR);
1187 if (!cp)
1188 return;
1189
1190 hci_dev_lock(hdev);
1191
1192 if (!hdev->cur_adv_instance) {
1193 /* Store in hdev for instance 0 (Set adv and Directed advs) */
1194 bacpy(&hdev->random_addr, &cp->bdaddr);
1195 } else {
1196 adv_instance = hci_find_adv_instance(hdev,
1197 hdev->cur_adv_instance);
1198 if (adv_instance)
1199 bacpy(&adv_instance->random_addr, &cp->bdaddr);
1200 }
1201
1202 hci_dev_unlock(hdev);
1203}
1204
1205static void hci_cc_le_read_transmit_power(struct hci_dev *hdev,
1206 struct sk_buff *skb)
1207{
1208 struct hci_rp_le_read_transmit_power *rp = (void *)skb->data;
1209
1210 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1211
1212 if (rp->status)
1213 return;
1214
1215 hdev->min_le_tx_power = rp->min_le_tx_power;
1216 hdev->max_le_tx_power = rp->max_le_tx_power;
1217}
1218
1219static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1220{
1221 __u8 *sent, status = *((__u8 *) skb->data);
1222
1223 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1224
1225 if (status)
1226 return;
1227
1228 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1229 if (!sent)
1230 return;
1231
1232 hci_dev_lock(hdev);
1233
1234 /* If we're doing connection initiation as peripheral. Set a
1235 * timeout in case something goes wrong.
1236 */
1237 if (*sent) {
1238 struct hci_conn *conn;
1239
1240 hci_dev_set_flag(hdev, HCI_LE_ADV);
1241
1242 conn = hci_lookup_le_connect(hdev);
1243 if (conn)
1244 queue_delayed_work(hdev->workqueue,
1245 &conn->le_conn_timeout,
1246 conn->conn_timeout);
1247 } else {
1248 hci_dev_clear_flag(hdev, HCI_LE_ADV);
1249 }
1250
1251 hci_dev_unlock(hdev);
1252}
1253
1254static void hci_cc_le_set_ext_adv_enable(struct hci_dev *hdev,
1255 struct sk_buff *skb)
1256{
1257 struct hci_cp_le_set_ext_adv_enable *cp;
1258 __u8 status = *((__u8 *) skb->data);
1259
1260 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1261
1262 if (status)
1263 return;
1264
1265 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE);
1266 if (!cp)
1267 return;
1268
1269 hci_dev_lock(hdev);
1270
1271 if (cp->enable) {
1272 struct hci_conn *conn;
1273
1274 hci_dev_set_flag(hdev, HCI_LE_ADV);
1275
1276 conn = hci_lookup_le_connect(hdev);
1277 if (conn)
1278 queue_delayed_work(hdev->workqueue,
1279 &conn->le_conn_timeout,
1280 conn->conn_timeout);
1281 } else {
1282 hci_dev_clear_flag(hdev, HCI_LE_ADV);
1283 }
1284
1285 hci_dev_unlock(hdev);
1286}
1287
1288static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1289{
1290 struct hci_cp_le_set_scan_param *cp;
1291 __u8 status = *((__u8 *) skb->data);
1292
1293 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1294
1295 if (status)
1296 return;
1297
1298 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_PARAM);
1299 if (!cp)
1300 return;
1301
1302 hci_dev_lock(hdev);
1303
1304 hdev->le_scan_type = cp->type;
1305
1306 hci_dev_unlock(hdev);
1307}
1308
1309static void hci_cc_le_set_ext_scan_param(struct hci_dev *hdev,
1310 struct sk_buff *skb)
1311{
1312 struct hci_cp_le_set_ext_scan_params *cp;
1313 __u8 status = *((__u8 *) skb->data);
1314 struct hci_cp_le_scan_phy_params *phy_param;
1315
1316 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1317
1318 if (status)
1319 return;
1320
1321 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_SCAN_PARAMS);
1322 if (!cp)
1323 return;
1324
1325 phy_param = (void *)cp->data;
1326
1327 hci_dev_lock(hdev);
1328
1329 hdev->le_scan_type = phy_param->type;
1330
1331 hci_dev_unlock(hdev);
1332}
1333
1334static bool has_pending_adv_report(struct hci_dev *hdev)
1335{
1336 struct discovery_state *d = &hdev->discovery;
1337
1338 return bacmp(&d->last_adv_addr, BDADDR_ANY);
1339}
1340
1341static void clear_pending_adv_report(struct hci_dev *hdev)
1342{
1343 struct discovery_state *d = &hdev->discovery;
1344
1345 bacpy(&d->last_adv_addr, BDADDR_ANY);
1346 d->last_adv_data_len = 0;
1347}
1348
1349static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
1350 u8 bdaddr_type, s8 rssi, u32 flags,
1351 u8 *data, u8 len)
1352{
1353 struct discovery_state *d = &hdev->discovery;
1354
1355 if (len > HCI_MAX_AD_LENGTH)
1356 return;
1357
1358 bacpy(&d->last_adv_addr, bdaddr);
1359 d->last_adv_addr_type = bdaddr_type;
1360 d->last_adv_rssi = rssi;
1361 d->last_adv_flags = flags;
1362 memcpy(d->last_adv_data, data, len);
1363 d->last_adv_data_len = len;
1364}
1365
1366static void le_set_scan_enable_complete(struct hci_dev *hdev, u8 enable)
1367{
1368 hci_dev_lock(hdev);
1369
1370 switch (enable) {
1371 case LE_SCAN_ENABLE:
1372 hci_dev_set_flag(hdev, HCI_LE_SCAN);
1373 if (hdev->le_scan_type == LE_SCAN_ACTIVE)
1374 clear_pending_adv_report(hdev);
1375 break;
1376
1377 case LE_SCAN_DISABLE:
1378 /* We do this here instead of when setting DISCOVERY_STOPPED
1379 * since the latter would potentially require waiting for
1380 * inquiry to stop too.
1381 */
1382 if (has_pending_adv_report(hdev)) {
1383 struct discovery_state *d = &hdev->discovery;
1384
1385 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
1386 d->last_adv_addr_type, NULL,
1387 d->last_adv_rssi, d->last_adv_flags,
1388 d->last_adv_data,
1389 d->last_adv_data_len, NULL, 0);
1390 }
1391
1392 /* Cancel this timer so that we don't try to disable scanning
1393 * when it's already disabled.
1394 */
1395 cancel_delayed_work(&hdev->le_scan_disable);
1396
1397 hci_dev_clear_flag(hdev, HCI_LE_SCAN);
1398
1399 /* The HCI_LE_SCAN_INTERRUPTED flag indicates that we
1400 * interrupted scanning due to a connect request. Mark
1401 * therefore discovery as stopped. If this was not
1402 * because of a connect request advertising might have
1403 * been disabled because of active scanning, so
1404 * re-enable it again if necessary.
1405 */
1406 if (hci_dev_test_and_clear_flag(hdev, HCI_LE_SCAN_INTERRUPTED))
1407 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1408 else if (!hci_dev_test_flag(hdev, HCI_LE_ADV) &&
1409 hdev->discovery.state == DISCOVERY_FINDING)
1410 hci_req_reenable_advertising(hdev);
1411
1412 break;
1413
1414 default:
1415 bt_dev_err(hdev, "use of reserved LE_Scan_Enable param %d",
1416 enable);
1417 break;
1418 }
1419
1420 hci_dev_unlock(hdev);
1421}
1422
1423static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1424 struct sk_buff *skb)
1425{
1426 struct hci_cp_le_set_scan_enable *cp;
1427 __u8 status = *((__u8 *) skb->data);
1428
1429 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1430
1431 if (status)
1432 return;
1433
1434 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1435 if (!cp)
1436 return;
1437
1438 le_set_scan_enable_complete(hdev, cp->enable);
1439}
1440
1441static void hci_cc_le_set_ext_scan_enable(struct hci_dev *hdev,
1442 struct sk_buff *skb)
1443{
1444 struct hci_cp_le_set_ext_scan_enable *cp;
1445 __u8 status = *((__u8 *) skb->data);
1446
1447 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1448
1449 if (status)
1450 return;
1451
1452 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_SCAN_ENABLE);
1453 if (!cp)
1454 return;
1455
1456 le_set_scan_enable_complete(hdev, cp->enable);
1457}
1458
1459static void hci_cc_le_read_num_adv_sets(struct hci_dev *hdev,
1460 struct sk_buff *skb)
1461{
1462 struct hci_rp_le_read_num_supported_adv_sets *rp = (void *) skb->data;
1463
1464 BT_DBG("%s status 0x%2.2x No of Adv sets %u", hdev->name, rp->status,
1465 rp->num_of_sets);
1466
1467 if (rp->status)
1468 return;
1469
1470 hdev->le_num_of_adv_sets = rp->num_of_sets;
1471}
1472
1473static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1474 struct sk_buff *skb)
1475{
1476 struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1477
1478 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1479
1480 if (rp->status)
1481 return;
1482
1483 hdev->le_white_list_size = rp->size;
1484}
1485
1486static void hci_cc_le_clear_white_list(struct hci_dev *hdev,
1487 struct sk_buff *skb)
1488{
1489 __u8 status = *((__u8 *) skb->data);
1490
1491 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1492
1493 if (status)
1494 return;
1495
1496 hci_bdaddr_list_clear(&hdev->le_white_list);
1497}
1498
1499static void hci_cc_le_add_to_white_list(struct hci_dev *hdev,
1500 struct sk_buff *skb)
1501{
1502 struct hci_cp_le_add_to_white_list *sent;
1503 __u8 status = *((__u8 *) skb->data);
1504
1505 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1506
1507 if (status)
1508 return;
1509
1510 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_WHITE_LIST);
1511 if (!sent)
1512 return;
1513
1514 hci_bdaddr_list_add(&hdev->le_white_list, &sent->bdaddr,
1515 sent->bdaddr_type);
1516}
1517
1518static void hci_cc_le_del_from_white_list(struct hci_dev *hdev,
1519 struct sk_buff *skb)
1520{
1521 struct hci_cp_le_del_from_white_list *sent;
1522 __u8 status = *((__u8 *) skb->data);
1523
1524 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1525
1526 if (status)
1527 return;
1528
1529 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_WHITE_LIST);
1530 if (!sent)
1531 return;
1532
1533 hci_bdaddr_list_del(&hdev->le_white_list, &sent->bdaddr,
1534 sent->bdaddr_type);
1535}
1536
1537static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1538 struct sk_buff *skb)
1539{
1540 struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1541
1542 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1543
1544 if (rp->status)
1545 return;
1546
1547 memcpy(hdev->le_states, rp->le_states, 8);
1548}
1549
1550static void hci_cc_le_read_def_data_len(struct hci_dev *hdev,
1551 struct sk_buff *skb)
1552{
1553 struct hci_rp_le_read_def_data_len *rp = (void *) skb->data;
1554
1555 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1556
1557 if (rp->status)
1558 return;
1559
1560 hdev->le_def_tx_len = le16_to_cpu(rp->tx_len);
1561 hdev->le_def_tx_time = le16_to_cpu(rp->tx_time);
1562}
1563
1564static void hci_cc_le_write_def_data_len(struct hci_dev *hdev,
1565 struct sk_buff *skb)
1566{
1567 struct hci_cp_le_write_def_data_len *sent;
1568 __u8 status = *((__u8 *) skb->data);
1569
1570 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1571
1572 if (status)
1573 return;
1574
1575 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN);
1576 if (!sent)
1577 return;
1578
1579 hdev->le_def_tx_len = le16_to_cpu(sent->tx_len);
1580 hdev->le_def_tx_time = le16_to_cpu(sent->tx_time);
1581}
1582
1583static void hci_cc_le_add_to_resolv_list(struct hci_dev *hdev,
1584 struct sk_buff *skb)
1585{
1586 struct hci_cp_le_add_to_resolv_list *sent;
1587 __u8 status = *((__u8 *) skb->data);
1588
1589 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1590
1591 if (status)
1592 return;
1593
1594 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_RESOLV_LIST);
1595 if (!sent)
1596 return;
1597
1598 hci_bdaddr_list_add_with_irk(&hdev->le_resolv_list, &sent->bdaddr,
1599 sent->bdaddr_type, sent->peer_irk,
1600 sent->local_irk);
1601}
1602
1603static void hci_cc_le_del_from_resolv_list(struct hci_dev *hdev,
1604 struct sk_buff *skb)
1605{
1606 struct hci_cp_le_del_from_resolv_list *sent;
1607 __u8 status = *((__u8 *) skb->data);
1608
1609 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1610
1611 if (status)
1612 return;
1613
1614 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_RESOLV_LIST);
1615 if (!sent)
1616 return;
1617
1618 hci_bdaddr_list_del_with_irk(&hdev->le_resolv_list, &sent->bdaddr,
1619 sent->bdaddr_type);
1620}
1621
1622static void hci_cc_le_clear_resolv_list(struct hci_dev *hdev,
1623 struct sk_buff *skb)
1624{
1625 __u8 status = *((__u8 *) skb->data);
1626
1627 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1628
1629 if (status)
1630 return;
1631
1632 hci_bdaddr_list_clear(&hdev->le_resolv_list);
1633}
1634
1635static void hci_cc_le_read_resolv_list_size(struct hci_dev *hdev,
1636 struct sk_buff *skb)
1637{
1638 struct hci_rp_le_read_resolv_list_size *rp = (void *) skb->data;
1639
1640 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1641
1642 if (rp->status)
1643 return;
1644
1645 hdev->le_resolv_list_size = rp->size;
1646}
1647
1648static void hci_cc_le_set_addr_resolution_enable(struct hci_dev *hdev,
1649 struct sk_buff *skb)
1650{
1651 __u8 *sent, status = *((__u8 *) skb->data);
1652
1653 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1654
1655 if (status)
1656 return;
1657
1658 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE);
1659 if (!sent)
1660 return;
1661
1662 hci_dev_lock(hdev);
1663
1664 if (*sent)
1665 hci_dev_set_flag(hdev, HCI_LL_RPA_RESOLUTION);
1666 else
1667 hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);
1668
1669 hci_dev_unlock(hdev);
1670}
1671
1672static void hci_cc_le_read_max_data_len(struct hci_dev *hdev,
1673 struct sk_buff *skb)
1674{
1675 struct hci_rp_le_read_max_data_len *rp = (void *) skb->data;
1676
1677 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1678
1679 if (rp->status)
1680 return;
1681
1682 hdev->le_max_tx_len = le16_to_cpu(rp->tx_len);
1683 hdev->le_max_tx_time = le16_to_cpu(rp->tx_time);
1684 hdev->le_max_rx_len = le16_to_cpu(rp->rx_len);
1685 hdev->le_max_rx_time = le16_to_cpu(rp->rx_time);
1686}
1687
1688static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1689 struct sk_buff *skb)
1690{
1691 struct hci_cp_write_le_host_supported *sent;
1692 __u8 status = *((__u8 *) skb->data);
1693
1694 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1695
1696 if (status)
1697 return;
1698
1699 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1700 if (!sent)
1701 return;
1702
1703 hci_dev_lock(hdev);
1704
1705 if (sent->le) {
1706 hdev->features[1][0] |= LMP_HOST_LE;
1707 hci_dev_set_flag(hdev, HCI_LE_ENABLED);
1708 } else {
1709 hdev->features[1][0] &= ~LMP_HOST_LE;
1710 hci_dev_clear_flag(hdev, HCI_LE_ENABLED);
1711 hci_dev_clear_flag(hdev, HCI_ADVERTISING);
1712 }
1713
1714 if (sent->simul)
1715 hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1716 else
1717 hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1718
1719 hci_dev_unlock(hdev);
1720}
1721
1722static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1723{
1724 struct hci_cp_le_set_adv_param *cp;
1725 u8 status = *((u8 *) skb->data);
1726
1727 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1728
1729 if (status)
1730 return;
1731
1732 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1733 if (!cp)
1734 return;
1735
1736 hci_dev_lock(hdev);
1737 hdev->adv_addr_type = cp->own_address_type;
1738 hci_dev_unlock(hdev);
1739}
1740
1741static void hci_cc_set_ext_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1742{
1743 struct hci_rp_le_set_ext_adv_params *rp = (void *) skb->data;
1744 struct hci_cp_le_set_ext_adv_params *cp;
1745 struct adv_info *adv_instance;
1746
1747 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1748
1749 if (rp->status)
1750 return;
1751
1752 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
1753 if (!cp)
1754 return;
1755
1756 hci_dev_lock(hdev);
1757 hdev->adv_addr_type = cp->own_addr_type;
1758 if (!hdev->cur_adv_instance) {
1759 /* Store in hdev for instance 0 */
1760 hdev->adv_tx_power = rp->tx_power;
1761 } else {
1762 adv_instance = hci_find_adv_instance(hdev,
1763 hdev->cur_adv_instance);
1764 if (adv_instance)
1765 adv_instance->tx_power = rp->tx_power;
1766 }
1767 /* Update adv data as tx power is known now */
1768 hci_req_update_adv_data(hdev, hdev->cur_adv_instance);
1769
1770 hci_dev_unlock(hdev);
1771}
1772
1773static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
1774{
1775 struct hci_rp_read_rssi *rp = (void *) skb->data;
1776 struct hci_conn *conn;
1777
1778 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1779
1780 if (rp->status)
1781 return;
1782
1783 hci_dev_lock(hdev);
1784
1785 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1786 if (conn)
1787 conn->rssi = rp->rssi;
1788
1789 hci_dev_unlock(hdev);
1790}
1791
1792static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
1793{
1794 struct hci_cp_read_tx_power *sent;
1795 struct hci_rp_read_tx_power *rp = (void *) skb->data;
1796 struct hci_conn *conn;
1797
1798 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1799
1800 if (rp->status)
1801 return;
1802
1803 sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
1804 if (!sent)
1805 return;
1806
1807 hci_dev_lock(hdev);
1808
1809 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1810 if (!conn)
1811 goto unlock;
1812
1813 switch (sent->type) {
1814 case 0x00:
1815 conn->tx_power = rp->tx_power;
1816 break;
1817 case 0x01:
1818 conn->max_tx_power = rp->tx_power;
1819 break;
1820 }
1821
1822unlock:
1823 hci_dev_unlock(hdev);
1824}
1825
1826static void hci_cc_write_ssp_debug_mode(struct hci_dev *hdev, struct sk_buff *skb)
1827{
1828 u8 status = *((u8 *) skb->data);
1829 u8 *mode;
1830
1831 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1832
1833 if (status)
1834 return;
1835
1836 mode = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE);
1837 if (mode)
1838 hdev->ssp_debug_mode = *mode;
1839}
1840
1841static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1842{
1843 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1844
1845 if (status) {
1846 hci_conn_check_pending(hdev);
1847 return;
1848 }
1849
1850 set_bit(HCI_INQUIRY, &hdev->flags);
1851}
1852
1853static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1854{
1855 struct hci_cp_create_conn *cp;
1856 struct hci_conn *conn;
1857
1858 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1859
1860 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1861 if (!cp)
1862 return;
1863
1864 hci_dev_lock(hdev);
1865
1866 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1867
1868 BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1869
1870 if (status) {
1871 if (conn && conn->state == BT_CONNECT) {
1872 if (status != 0x0c || conn->attempt > 2) {
1873 conn->state = BT_CLOSED;
1874 hci_connect_cfm(conn, status);
1875 hci_conn_del(conn);
1876 } else
1877 conn->state = BT_CONNECT2;
1878 }
1879 } else {
1880 if (!conn) {
1881 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr,
1882 HCI_ROLE_MASTER);
1883 if (!conn)
1884 bt_dev_err(hdev, "no memory for new connection");
1885 }
1886 }
1887
1888 hci_dev_unlock(hdev);
1889}
1890
1891static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1892{
1893 struct hci_cp_add_sco *cp;
1894 struct hci_conn *acl, *sco;
1895 __u16 handle;
1896
1897 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1898
1899 if (!status)
1900 return;
1901
1902 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1903 if (!cp)
1904 return;
1905
1906 handle = __le16_to_cpu(cp->handle);
1907
1908 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1909
1910 hci_dev_lock(hdev);
1911
1912 acl = hci_conn_hash_lookup_handle(hdev, handle);
1913 if (acl) {
1914 sco = acl->link;
1915 if (sco) {
1916 sco->state = BT_CLOSED;
1917
1918 hci_connect_cfm(sco, status);
1919 hci_conn_del(sco);
1920 }
1921 }
1922
1923 hci_dev_unlock(hdev);
1924}
1925
1926static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1927{
1928 struct hci_cp_auth_requested *cp;
1929 struct hci_conn *conn;
1930
1931 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1932
1933 if (!status)
1934 return;
1935
1936 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1937 if (!cp)
1938 return;
1939
1940 hci_dev_lock(hdev);
1941
1942 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1943 if (conn) {
1944 if (conn->state == BT_CONFIG) {
1945 hci_connect_cfm(conn, status);
1946 hci_conn_drop(conn);
1947 }
1948 }
1949
1950 hci_dev_unlock(hdev);
1951}
1952
1953static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1954{
1955 struct hci_cp_set_conn_encrypt *cp;
1956 struct hci_conn *conn;
1957
1958 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1959
1960 if (!status)
1961 return;
1962
1963 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1964 if (!cp)
1965 return;
1966
1967 hci_dev_lock(hdev);
1968
1969 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1970 if (conn) {
1971 if (conn->state == BT_CONFIG) {
1972 hci_connect_cfm(conn, status);
1973 hci_conn_drop(conn);
1974 }
1975 }
1976
1977 hci_dev_unlock(hdev);
1978}
1979
1980static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1981 struct hci_conn *conn)
1982{
1983 if (conn->state != BT_CONFIG || !conn->out)
1984 return 0;
1985
1986 if (conn->pending_sec_level == BT_SECURITY_SDP)
1987 return 0;
1988
1989 /* Only request authentication for SSP connections or non-SSP
1990 * devices with sec_level MEDIUM or HIGH or if MITM protection
1991 * is requested.
1992 */
1993 if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1994 conn->pending_sec_level != BT_SECURITY_FIPS &&
1995 conn->pending_sec_level != BT_SECURITY_HIGH &&
1996 conn->pending_sec_level != BT_SECURITY_MEDIUM)
1997 return 0;
1998
1999 return 1;
2000}
2001
2002static int hci_resolve_name(struct hci_dev *hdev,
2003 struct inquiry_entry *e)
2004{
2005 struct hci_cp_remote_name_req cp;
2006
2007 memset(&cp, 0, sizeof(cp));
2008
2009 bacpy(&cp.bdaddr, &e->data.bdaddr);
2010 cp.pscan_rep_mode = e->data.pscan_rep_mode;
2011 cp.pscan_mode = e->data.pscan_mode;
2012 cp.clock_offset = e->data.clock_offset;
2013
2014 return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2015}
2016
2017static bool hci_resolve_next_name(struct hci_dev *hdev)
2018{
2019 struct discovery_state *discov = &hdev->discovery;
2020 struct inquiry_entry *e;
2021
2022 if (list_empty(&discov->resolve))
2023 return false;
2024
2025 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2026 if (!e)
2027 return false;
2028
2029 if (hci_resolve_name(hdev, e) == 0) {
2030 e->name_state = NAME_PENDING;
2031 return true;
2032 }
2033
2034 return false;
2035}
2036
2037static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
2038 bdaddr_t *bdaddr, u8 *name, u8 name_len)
2039{
2040 struct discovery_state *discov = &hdev->discovery;
2041 struct inquiry_entry *e;
2042
2043 /* Update the mgmt connected state if necessary. Be careful with
2044 * conn objects that exist but are not (yet) connected however.
2045 * Only those in BT_CONFIG or BT_CONNECTED states can be
2046 * considered connected.
2047 */
2048 if (conn &&
2049 (conn->state == BT_CONFIG || conn->state == BT_CONNECTED) &&
2050 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2051 mgmt_device_connected(hdev, conn, 0, name, name_len);
2052
2053 if (discov->state == DISCOVERY_STOPPED)
2054 return;
2055
2056 if (discov->state == DISCOVERY_STOPPING)
2057 goto discov_complete;
2058
2059 if (discov->state != DISCOVERY_RESOLVING)
2060 return;
2061
2062 e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
2063 /* If the device was not found in a list of found devices names of which
2064 * are pending. there is no need to continue resolving a next name as it
2065 * will be done upon receiving another Remote Name Request Complete
2066 * Event */
2067 if (!e)
2068 return;
2069
2070 list_del(&e->list);
2071 if (name) {
2072 e->name_state = NAME_KNOWN;
2073 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
2074 e->data.rssi, name, name_len);
2075 } else {
2076 e->name_state = NAME_NOT_KNOWN;
2077 }
2078
2079 if (hci_resolve_next_name(hdev))
2080 return;
2081
2082discov_complete:
2083 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2084}
2085
2086static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
2087{
2088 struct hci_cp_remote_name_req *cp;
2089 struct hci_conn *conn;
2090
2091 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2092
2093 /* If successful wait for the name req complete event before
2094 * checking for the need to do authentication */
2095 if (!status)
2096 return;
2097
2098 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
2099 if (!cp)
2100 return;
2101
2102 hci_dev_lock(hdev);
2103
2104 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2105
2106 if (hci_dev_test_flag(hdev, HCI_MGMT))
2107 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
2108
2109 if (!conn)
2110 goto unlock;
2111
2112 if (!hci_outgoing_auth_needed(hdev, conn))
2113 goto unlock;
2114
2115 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2116 struct hci_cp_auth_requested auth_cp;
2117
2118 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2119
2120 auth_cp.handle = __cpu_to_le16(conn->handle);
2121 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
2122 sizeof(auth_cp), &auth_cp);
2123 }
2124
2125unlock:
2126 hci_dev_unlock(hdev);
2127}
2128
2129static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
2130{
2131 struct hci_cp_read_remote_features *cp;
2132 struct hci_conn *conn;
2133
2134 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2135
2136 if (!status)
2137 return;
2138
2139 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
2140 if (!cp)
2141 return;
2142
2143 hci_dev_lock(hdev);
2144
2145 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2146 if (conn) {
2147 if (conn->state == BT_CONFIG) {
2148 hci_connect_cfm(conn, status);
2149 hci_conn_drop(conn);
2150 }
2151 }
2152
2153 hci_dev_unlock(hdev);
2154}
2155
2156static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
2157{
2158 struct hci_cp_read_remote_ext_features *cp;
2159 struct hci_conn *conn;
2160
2161 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2162
2163 if (!status)
2164 return;
2165
2166 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
2167 if (!cp)
2168 return;
2169
2170 hci_dev_lock(hdev);
2171
2172 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2173 if (conn) {
2174 if (conn->state == BT_CONFIG) {
2175 hci_connect_cfm(conn, status);
2176 hci_conn_drop(conn);
2177 }
2178 }
2179
2180 hci_dev_unlock(hdev);
2181}
2182
2183static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
2184{
2185 struct hci_cp_setup_sync_conn *cp;
2186 struct hci_conn *acl, *sco;
2187 __u16 handle;
2188
2189 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2190
2191 if (!status)
2192 return;
2193
2194 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
2195 if (!cp)
2196 return;
2197
2198 handle = __le16_to_cpu(cp->handle);
2199
2200 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
2201
2202 hci_dev_lock(hdev);
2203
2204 acl = hci_conn_hash_lookup_handle(hdev, handle);
2205 if (acl) {
2206 sco = acl->link;
2207 if (sco) {
2208 sco->state = BT_CLOSED;
2209
2210 hci_connect_cfm(sco, status);
2211 hci_conn_del(sco);
2212 }
2213 }
2214
2215 hci_dev_unlock(hdev);
2216}
2217
2218static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
2219{
2220 struct hci_cp_sniff_mode *cp;
2221 struct hci_conn *conn;
2222
2223 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2224
2225 if (!status)
2226 return;
2227
2228 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
2229 if (!cp)
2230 return;
2231
2232 hci_dev_lock(hdev);
2233
2234 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2235 if (conn) {
2236 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
2237
2238 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
2239 hci_sco_setup(conn, status);
2240 }
2241
2242 hci_dev_unlock(hdev);
2243}
2244
2245static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
2246{
2247 struct hci_cp_exit_sniff_mode *cp;
2248 struct hci_conn *conn;
2249
2250 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2251
2252 if (!status)
2253 return;
2254
2255 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
2256 if (!cp)
2257 return;
2258
2259 hci_dev_lock(hdev);
2260
2261 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2262 if (conn) {
2263 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
2264
2265 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
2266 hci_sco_setup(conn, status);
2267 }
2268
2269 hci_dev_unlock(hdev);
2270}
2271
2272static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
2273{
2274 struct hci_cp_disconnect *cp;
2275 struct hci_conn *conn;
2276
2277 if (!status)
2278 return;
2279
2280 cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
2281 if (!cp)
2282 return;
2283
2284 hci_dev_lock(hdev);
2285
2286 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2287 if (conn) {
2288 u8 type = conn->type;
2289
2290 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2291 conn->dst_type, status);
2292
2293 /* If the disconnection failed for any reason, the upper layer
2294 * does not retry to disconnect in current implementation.
2295 * Hence, we need to do some basic cleanup here and re-enable
2296 * advertising if necessary.
2297 */
2298 hci_conn_del(conn);
2299 if (type == LE_LINK)
2300 hci_req_reenable_advertising(hdev);
2301 }
2302
2303 hci_dev_unlock(hdev);
2304}
2305
2306static void cs_le_create_conn(struct hci_dev *hdev, bdaddr_t *peer_addr,
2307 u8 peer_addr_type, u8 own_address_type,
2308 u8 filter_policy)
2309{
2310 struct hci_conn *conn;
2311
2312 conn = hci_conn_hash_lookup_le(hdev, peer_addr,
2313 peer_addr_type);
2314 if (!conn)
2315 return;
2316
2317 /* When using controller based address resolution, then the new
2318 * address types 0x02 and 0x03 are used. These types need to be
2319 * converted back into either public address or random address type
2320 */
2321 if (use_ll_privacy(hdev) &&
2322 hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) {
2323 switch (own_address_type) {
2324 case ADDR_LE_DEV_PUBLIC_RESOLVED:
2325 own_address_type = ADDR_LE_DEV_PUBLIC;
2326 break;
2327 case ADDR_LE_DEV_RANDOM_RESOLVED:
2328 own_address_type = ADDR_LE_DEV_RANDOM;
2329 break;
2330 }
2331 }
2332
2333 /* Store the initiator and responder address information which
2334 * is needed for SMP. These values will not change during the
2335 * lifetime of the connection.
2336 */
2337 conn->init_addr_type = own_address_type;
2338 if (own_address_type == ADDR_LE_DEV_RANDOM)
2339 bacpy(&conn->init_addr, &hdev->random_addr);
2340 else
2341 bacpy(&conn->init_addr, &hdev->bdaddr);
2342
2343 conn->resp_addr_type = peer_addr_type;
2344 bacpy(&conn->resp_addr, peer_addr);
2345
2346 /* We don't want the connection attempt to stick around
2347 * indefinitely since LE doesn't have a page timeout concept
2348 * like BR/EDR. Set a timer for any connection that doesn't use
2349 * the white list for connecting.
2350 */
2351 if (filter_policy == HCI_LE_USE_PEER_ADDR)
2352 queue_delayed_work(conn->hdev->workqueue,
2353 &conn->le_conn_timeout,
2354 conn->conn_timeout);
2355}
2356
2357static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
2358{
2359 struct hci_cp_le_create_conn *cp;
2360
2361 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2362
2363 /* All connection failure handling is taken care of by the
2364 * hci_le_conn_failed function which is triggered by the HCI
2365 * request completion callbacks used for connecting.
2366 */
2367 if (status)
2368 return;
2369
2370 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
2371 if (!cp)
2372 return;
2373
2374 hci_dev_lock(hdev);
2375
2376 cs_le_create_conn(hdev, &cp->peer_addr, cp->peer_addr_type,
2377 cp->own_address_type, cp->filter_policy);
2378
2379 hci_dev_unlock(hdev);
2380}
2381
2382static void hci_cs_le_ext_create_conn(struct hci_dev *hdev, u8 status)
2383{
2384 struct hci_cp_le_ext_create_conn *cp;
2385
2386 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2387
2388 /* All connection failure handling is taken care of by the
2389 * hci_le_conn_failed function which is triggered by the HCI
2390 * request completion callbacks used for connecting.
2391 */
2392 if (status)
2393 return;
2394
2395 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_EXT_CREATE_CONN);
2396 if (!cp)
2397 return;
2398
2399 hci_dev_lock(hdev);
2400
2401 cs_le_create_conn(hdev, &cp->peer_addr, cp->peer_addr_type,
2402 cp->own_addr_type, cp->filter_policy);
2403
2404 hci_dev_unlock(hdev);
2405}
2406
2407static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
2408{
2409 struct hci_cp_le_read_remote_features *cp;
2410 struct hci_conn *conn;
2411
2412 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2413
2414 if (!status)
2415 return;
2416
2417 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_READ_REMOTE_FEATURES);
2418 if (!cp)
2419 return;
2420
2421 hci_dev_lock(hdev);
2422
2423 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2424 if (conn) {
2425 if (conn->state == BT_CONFIG) {
2426 hci_connect_cfm(conn, status);
2427 hci_conn_drop(conn);
2428 }
2429 }
2430
2431 hci_dev_unlock(hdev);
2432}
2433
2434static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
2435{
2436 struct hci_cp_le_start_enc *cp;
2437 struct hci_conn *conn;
2438
2439 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2440
2441 if (!status)
2442 return;
2443
2444 hci_dev_lock(hdev);
2445
2446 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
2447 if (!cp)
2448 goto unlock;
2449
2450 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2451 if (!conn)
2452 goto unlock;
2453
2454 if (conn->state != BT_CONNECTED)
2455 goto unlock;
2456
2457 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2458 hci_conn_drop(conn);
2459
2460unlock:
2461 hci_dev_unlock(hdev);
2462}
2463
2464static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
2465{
2466 struct hci_cp_switch_role *cp;
2467 struct hci_conn *conn;
2468
2469 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2470
2471 if (!status)
2472 return;
2473
2474 cp = hci_sent_cmd_data(hdev, HCI_OP_SWITCH_ROLE);
2475 if (!cp)
2476 return;
2477
2478 hci_dev_lock(hdev);
2479
2480 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2481 if (conn)
2482 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2483
2484 hci_dev_unlock(hdev);
2485}
2486
2487static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2488{
2489 __u8 status = *((__u8 *) skb->data);
2490 struct discovery_state *discov = &hdev->discovery;
2491 struct inquiry_entry *e;
2492
2493 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2494
2495 hci_conn_check_pending(hdev);
2496
2497 if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
2498 return;
2499
2500 smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
2501 wake_up_bit(&hdev->flags, HCI_INQUIRY);
2502
2503 if (!hci_dev_test_flag(hdev, HCI_MGMT))
2504 return;
2505
2506 hci_dev_lock(hdev);
2507
2508 if (discov->state != DISCOVERY_FINDING)
2509 goto unlock;
2510
2511 if (list_empty(&discov->resolve)) {
2512 /* When BR/EDR inquiry is active and no LE scanning is in
2513 * progress, then change discovery state to indicate completion.
2514 *
2515 * When running LE scanning and BR/EDR inquiry simultaneously
2516 * and the LE scan already finished, then change the discovery
2517 * state to indicate completion.
2518 */
2519 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2520 !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2521 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2522 goto unlock;
2523 }
2524
2525 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2526 if (e && hci_resolve_name(hdev, e) == 0) {
2527 e->name_state = NAME_PENDING;
2528 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
2529 } else {
2530 /* When BR/EDR inquiry is active and no LE scanning is in
2531 * progress, then change discovery state to indicate completion.
2532 *
2533 * When running LE scanning and BR/EDR inquiry simultaneously
2534 * and the LE scan already finished, then change the discovery
2535 * state to indicate completion.
2536 */
2537 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2538 !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2539 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2540 }
2541
2542unlock:
2543 hci_dev_unlock(hdev);
2544}
2545
2546static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2547{
2548 struct inquiry_data data;
2549 struct inquiry_info *info = (void *) (skb->data + 1);
2550 int num_rsp = *((__u8 *) skb->data);
2551
2552 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2553
2554 if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
2555 return;
2556
2557 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
2558 return;
2559
2560 hci_dev_lock(hdev);
2561
2562 for (; num_rsp; num_rsp--, info++) {
2563 u32 flags;
2564
2565 bacpy(&data.bdaddr, &info->bdaddr);
2566 data.pscan_rep_mode = info->pscan_rep_mode;
2567 data.pscan_period_mode = info->pscan_period_mode;
2568 data.pscan_mode = info->pscan_mode;
2569 memcpy(data.dev_class, info->dev_class, 3);
2570 data.clock_offset = info->clock_offset;
2571 data.rssi = HCI_RSSI_INVALID;
2572 data.ssp_mode = 0x00;
2573
2574 flags = hci_inquiry_cache_update(hdev, &data, false);
2575
2576 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2577 info->dev_class, HCI_RSSI_INVALID,
2578 flags, NULL, 0, NULL, 0);
2579 }
2580
2581 hci_dev_unlock(hdev);
2582}
2583
2584static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2585{
2586 struct hci_ev_conn_complete *ev = (void *) skb->data;
2587 struct hci_conn *conn;
2588
2589 BT_DBG("%s", hdev->name);
2590
2591 hci_dev_lock(hdev);
2592
2593 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2594 if (!conn) {
2595 /* Connection may not exist if auto-connected. Check the bredr
2596 * allowlist to see if this device is allowed to auto connect.
2597 * If link is an ACL type, create a connection class
2598 * automatically.
2599 *
2600 * Auto-connect will only occur if the event filter is
2601 * programmed with a given address. Right now, event filter is
2602 * only used during suspend.
2603 */
2604 if (ev->link_type == ACL_LINK &&
2605 hci_bdaddr_list_lookup_with_flags(&hdev->whitelist,
2606 &ev->bdaddr,
2607 BDADDR_BREDR)) {
2608 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2609 HCI_ROLE_SLAVE);
2610 if (!conn) {
2611 bt_dev_err(hdev, "no memory for new conn");
2612 goto unlock;
2613 }
2614 } else {
2615 if (ev->link_type != SCO_LINK)
2616 goto unlock;
2617
2618 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK,
2619 &ev->bdaddr);
2620 if (!conn)
2621 goto unlock;
2622
2623 conn->type = SCO_LINK;
2624 }
2625 }
2626
2627 if (!ev->status) {
2628 conn->handle = __le16_to_cpu(ev->handle);
2629
2630 if (conn->type == ACL_LINK) {
2631 conn->state = BT_CONFIG;
2632 hci_conn_hold(conn);
2633
2634 if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2635 !hci_find_link_key(hdev, &ev->bdaddr))
2636 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2637 else
2638 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2639 } else
2640 conn->state = BT_CONNECTED;
2641
2642 hci_debugfs_create_conn(conn);
2643 hci_conn_add_sysfs(conn);
2644
2645 if (test_bit(HCI_AUTH, &hdev->flags))
2646 set_bit(HCI_CONN_AUTH, &conn->flags);
2647
2648 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2649 set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2650
2651 /* Get remote features */
2652 if (conn->type == ACL_LINK) {
2653 struct hci_cp_read_remote_features cp;
2654 cp.handle = ev->handle;
2655 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2656 sizeof(cp), &cp);
2657
2658 hci_req_update_scan(hdev);
2659 }
2660
2661 /* Set packet type for incoming connection */
2662 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2663 struct hci_cp_change_conn_ptype cp;
2664 cp.handle = ev->handle;
2665 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2666 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2667 &cp);
2668 }
2669 } else {
2670 conn->state = BT_CLOSED;
2671 if (conn->type == ACL_LINK)
2672 mgmt_connect_failed(hdev, &conn->dst, conn->type,
2673 conn->dst_type, ev->status);
2674 }
2675
2676 if (conn->type == ACL_LINK)
2677 hci_sco_setup(conn, ev->status);
2678
2679 if (ev->status) {
2680 hci_connect_cfm(conn, ev->status);
2681 hci_conn_del(conn);
2682 } else if (ev->link_type == SCO_LINK) {
2683 switch (conn->setting & SCO_AIRMODE_MASK) {
2684 case SCO_AIRMODE_CVSD:
2685 if (hdev->notify)
2686 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
2687 break;
2688 }
2689
2690 hci_connect_cfm(conn, ev->status);
2691 }
2692
2693unlock:
2694 hci_dev_unlock(hdev);
2695
2696 hci_conn_check_pending(hdev);
2697}
2698
2699static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2700{
2701 struct hci_cp_reject_conn_req cp;
2702
2703 bacpy(&cp.bdaddr, bdaddr);
2704 cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2705 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2706}
2707
2708static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2709{
2710 struct hci_ev_conn_request *ev = (void *) skb->data;
2711 int mask = hdev->link_mode;
2712 struct inquiry_entry *ie;
2713 struct hci_conn *conn;
2714 __u8 flags = 0;
2715
2716 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2717 ev->link_type);
2718
2719 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2720 &flags);
2721
2722 if (!(mask & HCI_LM_ACCEPT)) {
2723 hci_reject_conn(hdev, &ev->bdaddr);
2724 return;
2725 }
2726
2727 if (hci_bdaddr_list_lookup(&hdev->blacklist, &ev->bdaddr,
2728 BDADDR_BREDR)) {
2729 hci_reject_conn(hdev, &ev->bdaddr);
2730 return;
2731 }
2732
2733 /* Require HCI_CONNECTABLE or a whitelist entry to accept the
2734 * connection. These features are only touched through mgmt so
2735 * only do the checks if HCI_MGMT is set.
2736 */
2737 if (hci_dev_test_flag(hdev, HCI_MGMT) &&
2738 !hci_dev_test_flag(hdev, HCI_CONNECTABLE) &&
2739 !hci_bdaddr_list_lookup_with_flags(&hdev->whitelist, &ev->bdaddr,
2740 BDADDR_BREDR)) {
2741 hci_reject_conn(hdev, &ev->bdaddr);
2742 return;
2743 }
2744
2745 /* Connection accepted */
2746
2747 hci_dev_lock(hdev);
2748
2749 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2750 if (ie)
2751 memcpy(ie->data.dev_class, ev->dev_class, 3);
2752
2753 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2754 &ev->bdaddr);
2755 if (!conn) {
2756 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2757 HCI_ROLE_SLAVE);
2758 if (!conn) {
2759 bt_dev_err(hdev, "no memory for new connection");
2760 hci_dev_unlock(hdev);
2761 return;
2762 }
2763 }
2764
2765 memcpy(conn->dev_class, ev->dev_class, 3);
2766
2767 hci_dev_unlock(hdev);
2768
2769 if (ev->link_type == ACL_LINK ||
2770 (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2771 struct hci_cp_accept_conn_req cp;
2772 conn->state = BT_CONNECT;
2773
2774 bacpy(&cp.bdaddr, &ev->bdaddr);
2775
2776 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2777 cp.role = 0x00; /* Become master */
2778 else
2779 cp.role = 0x01; /* Remain slave */
2780
2781 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2782 } else if (!(flags & HCI_PROTO_DEFER)) {
2783 struct hci_cp_accept_sync_conn_req cp;
2784 conn->state = BT_CONNECT;
2785
2786 bacpy(&cp.bdaddr, &ev->bdaddr);
2787 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2788
2789 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
2790 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
2791 cp.max_latency = cpu_to_le16(0xffff);
2792 cp.content_format = cpu_to_le16(hdev->voice_setting);
2793 cp.retrans_effort = 0xff;
2794
2795 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2796 &cp);
2797 } else {
2798 conn->state = BT_CONNECT2;
2799 hci_connect_cfm(conn, 0);
2800 }
2801}
2802
2803static u8 hci_to_mgmt_reason(u8 err)
2804{
2805 switch (err) {
2806 case HCI_ERROR_CONNECTION_TIMEOUT:
2807 return MGMT_DEV_DISCONN_TIMEOUT;
2808 case HCI_ERROR_REMOTE_USER_TERM:
2809 case HCI_ERROR_REMOTE_LOW_RESOURCES:
2810 case HCI_ERROR_REMOTE_POWER_OFF:
2811 return MGMT_DEV_DISCONN_REMOTE;
2812 case HCI_ERROR_LOCAL_HOST_TERM:
2813 return MGMT_DEV_DISCONN_LOCAL_HOST;
2814 default:
2815 return MGMT_DEV_DISCONN_UNKNOWN;
2816 }
2817}
2818
2819static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2820{
2821 struct hci_ev_disconn_complete *ev = (void *) skb->data;
2822 u8 reason;
2823 struct hci_conn_params *params;
2824 struct hci_conn *conn;
2825 bool mgmt_connected;
2826 u8 type;
2827
2828 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2829
2830 hci_dev_lock(hdev);
2831
2832 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2833 if (!conn)
2834 goto unlock;
2835
2836 if (ev->status) {
2837 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2838 conn->dst_type, ev->status);
2839 goto unlock;
2840 }
2841
2842 conn->state = BT_CLOSED;
2843
2844 mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
2845
2846 if (test_bit(HCI_CONN_AUTH_FAILURE, &conn->flags))
2847 reason = MGMT_DEV_DISCONN_AUTH_FAILURE;
2848 else
2849 reason = hci_to_mgmt_reason(ev->reason);
2850
2851 mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2852 reason, mgmt_connected);
2853
2854 if (conn->type == ACL_LINK) {
2855 if (test_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
2856 hci_remove_link_key(hdev, &conn->dst);
2857
2858 hci_req_update_scan(hdev);
2859 }
2860
2861 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2862 if (params) {
2863 switch (params->auto_connect) {
2864 case HCI_AUTO_CONN_LINK_LOSS:
2865 if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
2866 break;
2867 fallthrough;
2868
2869 case HCI_AUTO_CONN_DIRECT:
2870 case HCI_AUTO_CONN_ALWAYS:
2871 list_del_init(¶ms->action);
2872 list_add(¶ms->action, &hdev->pend_le_conns);
2873 hci_update_background_scan(hdev);
2874 break;
2875
2876 default:
2877 break;
2878 }
2879 }
2880
2881 type = conn->type;
2882
2883 hci_disconn_cfm(conn, ev->reason);
2884 hci_conn_del(conn);
2885
2886 /* The suspend notifier is waiting for all devices to disconnect so
2887 * clear the bit from pending tasks and inform the wait queue.
2888 */
2889 if (list_empty(&hdev->conn_hash.list) &&
2890 test_and_clear_bit(SUSPEND_DISCONNECTING, hdev->suspend_tasks)) {
2891 wake_up(&hdev->suspend_wait_q);
2892 }
2893
2894 /* Re-enable advertising if necessary, since it might
2895 * have been disabled by the connection. From the
2896 * HCI_LE_Set_Advertise_Enable command description in
2897 * the core specification (v4.0):
2898 * "The Controller shall continue advertising until the Host
2899 * issues an LE_Set_Advertise_Enable command with
2900 * Advertising_Enable set to 0x00 (Advertising is disabled)
2901 * or until a connection is created or until the Advertising
2902 * is timed out due to Directed Advertising."
2903 */
2904 if (type == LE_LINK)
2905 hci_req_reenable_advertising(hdev);
2906
2907unlock:
2908 hci_dev_unlock(hdev);
2909}
2910
2911static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2912{
2913 struct hci_ev_auth_complete *ev = (void *) skb->data;
2914 struct hci_conn *conn;
2915
2916 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2917
2918 hci_dev_lock(hdev);
2919
2920 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2921 if (!conn)
2922 goto unlock;
2923
2924 if (!ev->status) {
2925 clear_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2926
2927 if (!hci_conn_ssp_enabled(conn) &&
2928 test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2929 bt_dev_info(hdev, "re-auth of legacy device is not possible.");
2930 } else {
2931 set_bit(HCI_CONN_AUTH, &conn->flags);
2932 conn->sec_level = conn->pending_sec_level;
2933 }
2934 } else {
2935 if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
2936 set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2937
2938 mgmt_auth_failed(conn, ev->status);
2939 }
2940
2941 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2942 clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2943
2944 if (conn->state == BT_CONFIG) {
2945 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2946 struct hci_cp_set_conn_encrypt cp;
2947 cp.handle = ev->handle;
2948 cp.encrypt = 0x01;
2949 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2950 &cp);
2951 } else {
2952 conn->state = BT_CONNECTED;
2953 hci_connect_cfm(conn, ev->status);
2954 hci_conn_drop(conn);
2955 }
2956 } else {
2957 hci_auth_cfm(conn, ev->status);
2958
2959 hci_conn_hold(conn);
2960 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2961 hci_conn_drop(conn);
2962 }
2963
2964 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2965 if (!ev->status) {
2966 struct hci_cp_set_conn_encrypt cp;
2967 cp.handle = ev->handle;
2968 cp.encrypt = 0x01;
2969 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2970 &cp);
2971 } else {
2972 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2973 hci_encrypt_cfm(conn, ev->status);
2974 }
2975 }
2976
2977unlock:
2978 hci_dev_unlock(hdev);
2979}
2980
2981static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2982{
2983 struct hci_ev_remote_name *ev = (void *) skb->data;
2984 struct hci_conn *conn;
2985
2986 BT_DBG("%s", hdev->name);
2987
2988 hci_conn_check_pending(hdev);
2989
2990 hci_dev_lock(hdev);
2991
2992 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2993
2994 if (!hci_dev_test_flag(hdev, HCI_MGMT))
2995 goto check_auth;
2996
2997 if (ev->status == 0)
2998 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2999 strnlen(ev->name, HCI_MAX_NAME_LENGTH));
3000 else
3001 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
3002
3003check_auth:
3004 if (!conn)
3005 goto unlock;
3006
3007 if (!hci_outgoing_auth_needed(hdev, conn))
3008 goto unlock;
3009
3010 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3011 struct hci_cp_auth_requested cp;
3012
3013 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
3014
3015 cp.handle = __cpu_to_le16(conn->handle);
3016 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
3017 }
3018
3019unlock:
3020 hci_dev_unlock(hdev);
3021}
3022
3023static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status,
3024 u16 opcode, struct sk_buff *skb)
3025{
3026 const struct hci_rp_read_enc_key_size *rp;
3027 struct hci_conn *conn;
3028 u16 handle;
3029
3030 BT_DBG("%s status 0x%02x", hdev->name, status);
3031
3032 if (!skb || skb->len < sizeof(*rp)) {
3033 bt_dev_err(hdev, "invalid read key size response");
3034 return;
3035 }
3036
3037 rp = (void *)skb->data;
3038 handle = le16_to_cpu(rp->handle);
3039
3040 hci_dev_lock(hdev);
3041
3042 conn = hci_conn_hash_lookup_handle(hdev, handle);
3043 if (!conn)
3044 goto unlock;
3045
3046 /* While unexpected, the read_enc_key_size command may fail. The most
3047 * secure approach is to then assume the key size is 0 to force a
3048 * disconnection.
3049 */
3050 if (rp->status) {
3051 bt_dev_err(hdev, "failed to read key size for handle %u",
3052 handle);
3053 conn->enc_key_size = 0;
3054 } else {
3055 conn->enc_key_size = rp->key_size;
3056 }
3057
3058 hci_encrypt_cfm(conn, 0);
3059
3060unlock:
3061 hci_dev_unlock(hdev);
3062}
3063
3064static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3065{
3066 struct hci_ev_encrypt_change *ev = (void *) skb->data;
3067 struct hci_conn *conn;
3068
3069 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3070
3071 hci_dev_lock(hdev);
3072
3073 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3074 if (!conn)
3075 goto unlock;
3076
3077 if (!ev->status) {
3078 if (ev->encrypt) {
3079 /* Encryption implies authentication */
3080 set_bit(HCI_CONN_AUTH, &conn->flags);
3081 set_bit(HCI_CONN_ENCRYPT, &conn->flags);
3082 conn->sec_level = conn->pending_sec_level;
3083
3084 /* P-256 authentication key implies FIPS */
3085 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
3086 set_bit(HCI_CONN_FIPS, &conn->flags);
3087
3088 if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
3089 conn->type == LE_LINK)
3090 set_bit(HCI_CONN_AES_CCM, &conn->flags);
3091 } else {
3092 clear_bit(HCI_CONN_ENCRYPT, &conn->flags);
3093 clear_bit(HCI_CONN_AES_CCM, &conn->flags);
3094 }
3095 }
3096
3097 /* We should disregard the current RPA and generate a new one
3098 * whenever the encryption procedure fails.
3099 */
3100 if (ev->status && conn->type == LE_LINK) {
3101 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
3102 hci_adv_instances_set_rpa_expired(hdev, true);
3103 }
3104
3105 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3106
3107 /* Check link security requirements are met */
3108 if (!hci_conn_check_link_mode(conn))
3109 ev->status = HCI_ERROR_AUTH_FAILURE;
3110
3111 if (ev->status && conn->state == BT_CONNECTED) {
3112 if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
3113 set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
3114
3115 /* Notify upper layers so they can cleanup before
3116 * disconnecting.
3117 */
3118 hci_encrypt_cfm(conn, ev->status);
3119 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3120 hci_conn_drop(conn);
3121 goto unlock;
3122 }
3123
3124 /* Try reading the encryption key size for encrypted ACL links */
3125 if (!ev->status && ev->encrypt && conn->type == ACL_LINK) {
3126 struct hci_cp_read_enc_key_size cp;
3127 struct hci_request req;
3128
3129 /* Only send HCI_Read_Encryption_Key_Size if the
3130 * controller really supports it. If it doesn't, assume
3131 * the default size (16).
3132 */
3133 if (!(hdev->commands[20] & 0x10)) {
3134 conn->enc_key_size = HCI_LINK_KEY_SIZE;
3135 goto notify;
3136 }
3137
3138 hci_req_init(&req, hdev);
3139
3140 cp.handle = cpu_to_le16(conn->handle);
3141 hci_req_add(&req, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp);
3142
3143 if (hci_req_run_skb(&req, read_enc_key_size_complete)) {
3144 bt_dev_err(hdev, "sending read key size failed");
3145 conn->enc_key_size = HCI_LINK_KEY_SIZE;
3146 goto notify;
3147 }
3148
3149 goto unlock;
3150 }
3151
3152 /* Set the default Authenticated Payload Timeout after
3153 * an LE Link is established. As per Core Spec v5.0, Vol 2, Part B
3154 * Section 3.3, the HCI command WRITE_AUTH_PAYLOAD_TIMEOUT should be
3155 * sent when the link is active and Encryption is enabled, the conn
3156 * type can be either LE or ACL and controller must support LMP Ping.
3157 * Ensure for AES-CCM encryption as well.
3158 */
3159 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags) &&
3160 test_bit(HCI_CONN_AES_CCM, &conn->flags) &&
3161 ((conn->type == ACL_LINK && lmp_ping_capable(hdev)) ||
3162 (conn->type == LE_LINK && (hdev->le_features[0] & HCI_LE_PING)))) {
3163 struct hci_cp_write_auth_payload_to cp;
3164
3165 cp.handle = cpu_to_le16(conn->handle);
3166 cp.timeout = cpu_to_le16(hdev->auth_payload_timeout);
3167 hci_send_cmd(conn->hdev, HCI_OP_WRITE_AUTH_PAYLOAD_TO,
3168 sizeof(cp), &cp);
3169 }
3170
3171notify:
3172 hci_encrypt_cfm(conn, ev->status);
3173
3174unlock:
3175 hci_dev_unlock(hdev);
3176}
3177
3178static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
3179 struct sk_buff *skb)
3180{
3181 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
3182 struct hci_conn *conn;
3183
3184 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3185
3186 hci_dev_lock(hdev);
3187
3188 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3189 if (conn) {
3190 if (!ev->status)
3191 set_bit(HCI_CONN_SECURE, &conn->flags);
3192
3193 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
3194
3195 hci_key_change_cfm(conn, ev->status);
3196 }
3197
3198 hci_dev_unlock(hdev);
3199}
3200
3201static void hci_remote_features_evt(struct hci_dev *hdev,
3202 struct sk_buff *skb)
3203{
3204 struct hci_ev_remote_features *ev = (void *) skb->data;
3205 struct hci_conn *conn;
3206
3207 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3208
3209 hci_dev_lock(hdev);
3210
3211 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3212 if (!conn)
3213 goto unlock;
3214
3215 if (!ev->status)
3216 memcpy(conn->features[0], ev->features, 8);
3217
3218 if (conn->state != BT_CONFIG)
3219 goto unlock;
3220
3221 if (!ev->status && lmp_ext_feat_capable(hdev) &&
3222 lmp_ext_feat_capable(conn)) {
3223 struct hci_cp_read_remote_ext_features cp;
3224 cp.handle = ev->handle;
3225 cp.page = 0x01;
3226 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
3227 sizeof(cp), &cp);
3228 goto unlock;
3229 }
3230
3231 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3232 struct hci_cp_remote_name_req cp;
3233 memset(&cp, 0, sizeof(cp));
3234 bacpy(&cp.bdaddr, &conn->dst);
3235 cp.pscan_rep_mode = 0x02;
3236 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3237 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3238 mgmt_device_connected(hdev, conn, 0, NULL, 0);
3239
3240 if (!hci_outgoing_auth_needed(hdev, conn)) {
3241 conn->state = BT_CONNECTED;
3242 hci_connect_cfm(conn, ev->status);
3243 hci_conn_drop(conn);
3244 }
3245
3246unlock:
3247 hci_dev_unlock(hdev);
3248}
3249
3250static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
3251 u16 *opcode, u8 *status,
3252 hci_req_complete_t *req_complete,
3253 hci_req_complete_skb_t *req_complete_skb)
3254{
3255 struct hci_ev_cmd_complete *ev = (void *) skb->data;
3256
3257 *opcode = __le16_to_cpu(ev->opcode);
3258 *status = skb->data[sizeof(*ev)];
3259
3260 skb_pull(skb, sizeof(*ev));
3261
3262 switch (*opcode) {
3263 case HCI_OP_INQUIRY_CANCEL:
3264 hci_cc_inquiry_cancel(hdev, skb, status);
3265 break;
3266
3267 case HCI_OP_PERIODIC_INQ:
3268 hci_cc_periodic_inq(hdev, skb);
3269 break;
3270
3271 case HCI_OP_EXIT_PERIODIC_INQ:
3272 hci_cc_exit_periodic_inq(hdev, skb);
3273 break;
3274
3275 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
3276 hci_cc_remote_name_req_cancel(hdev, skb);
3277 break;
3278
3279 case HCI_OP_ROLE_DISCOVERY:
3280 hci_cc_role_discovery(hdev, skb);
3281 break;
3282
3283 case HCI_OP_READ_LINK_POLICY:
3284 hci_cc_read_link_policy(hdev, skb);
3285 break;
3286
3287 case HCI_OP_WRITE_LINK_POLICY:
3288 hci_cc_write_link_policy(hdev, skb);
3289 break;
3290
3291 case HCI_OP_READ_DEF_LINK_POLICY:
3292 hci_cc_read_def_link_policy(hdev, skb);
3293 break;
3294
3295 case HCI_OP_WRITE_DEF_LINK_POLICY:
3296 hci_cc_write_def_link_policy(hdev, skb);
3297 break;
3298
3299 case HCI_OP_RESET:
3300 hci_cc_reset(hdev, skb);
3301 break;
3302
3303 case HCI_OP_READ_STORED_LINK_KEY:
3304 hci_cc_read_stored_link_key(hdev, skb);
3305 break;
3306
3307 case HCI_OP_DELETE_STORED_LINK_KEY:
3308 hci_cc_delete_stored_link_key(hdev, skb);
3309 break;
3310
3311 case HCI_OP_WRITE_LOCAL_NAME:
3312 hci_cc_write_local_name(hdev, skb);
3313 break;
3314
3315 case HCI_OP_READ_LOCAL_NAME:
3316 hci_cc_read_local_name(hdev, skb);
3317 break;
3318
3319 case HCI_OP_WRITE_AUTH_ENABLE:
3320 hci_cc_write_auth_enable(hdev, skb);
3321 break;
3322
3323 case HCI_OP_WRITE_ENCRYPT_MODE:
3324 hci_cc_write_encrypt_mode(hdev, skb);
3325 break;
3326
3327 case HCI_OP_WRITE_SCAN_ENABLE:
3328 hci_cc_write_scan_enable(hdev, skb);
3329 break;
3330
3331 case HCI_OP_READ_CLASS_OF_DEV:
3332 hci_cc_read_class_of_dev(hdev, skb);
3333 break;
3334
3335 case HCI_OP_WRITE_CLASS_OF_DEV:
3336 hci_cc_write_class_of_dev(hdev, skb);
3337 break;
3338
3339 case HCI_OP_READ_VOICE_SETTING:
3340 hci_cc_read_voice_setting(hdev, skb);
3341 break;
3342
3343 case HCI_OP_WRITE_VOICE_SETTING:
3344 hci_cc_write_voice_setting(hdev, skb);
3345 break;
3346
3347 case HCI_OP_READ_NUM_SUPPORTED_IAC:
3348 hci_cc_read_num_supported_iac(hdev, skb);
3349 break;
3350
3351 case HCI_OP_WRITE_SSP_MODE:
3352 hci_cc_write_ssp_mode(hdev, skb);
3353 break;
3354
3355 case HCI_OP_WRITE_SC_SUPPORT:
3356 hci_cc_write_sc_support(hdev, skb);
3357 break;
3358
3359 case HCI_OP_READ_AUTH_PAYLOAD_TO:
3360 hci_cc_read_auth_payload_timeout(hdev, skb);
3361 break;
3362
3363 case HCI_OP_WRITE_AUTH_PAYLOAD_TO:
3364 hci_cc_write_auth_payload_timeout(hdev, skb);
3365 break;
3366
3367 case HCI_OP_READ_LOCAL_VERSION:
3368 hci_cc_read_local_version(hdev, skb);
3369 break;
3370
3371 case HCI_OP_READ_LOCAL_COMMANDS:
3372 hci_cc_read_local_commands(hdev, skb);
3373 break;
3374
3375 case HCI_OP_READ_LOCAL_FEATURES:
3376 hci_cc_read_local_features(hdev, skb);
3377 break;
3378
3379 case HCI_OP_READ_LOCAL_EXT_FEATURES:
3380 hci_cc_read_local_ext_features(hdev, skb);
3381 break;
3382
3383 case HCI_OP_READ_BUFFER_SIZE:
3384 hci_cc_read_buffer_size(hdev, skb);
3385 break;
3386
3387 case HCI_OP_READ_BD_ADDR:
3388 hci_cc_read_bd_addr(hdev, skb);
3389 break;
3390
3391 case HCI_OP_READ_LOCAL_PAIRING_OPTS:
3392 hci_cc_read_local_pairing_opts(hdev, skb);
3393 break;
3394
3395 case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
3396 hci_cc_read_page_scan_activity(hdev, skb);
3397 break;
3398
3399 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
3400 hci_cc_write_page_scan_activity(hdev, skb);
3401 break;
3402
3403 case HCI_OP_READ_PAGE_SCAN_TYPE:
3404 hci_cc_read_page_scan_type(hdev, skb);
3405 break;
3406
3407 case HCI_OP_WRITE_PAGE_SCAN_TYPE:
3408 hci_cc_write_page_scan_type(hdev, skb);
3409 break;
3410
3411 case HCI_OP_READ_DATA_BLOCK_SIZE:
3412 hci_cc_read_data_block_size(hdev, skb);
3413 break;
3414
3415 case HCI_OP_READ_FLOW_CONTROL_MODE:
3416 hci_cc_read_flow_control_mode(hdev, skb);
3417 break;
3418
3419 case HCI_OP_READ_LOCAL_AMP_INFO:
3420 hci_cc_read_local_amp_info(hdev, skb);
3421 break;
3422
3423 case HCI_OP_READ_CLOCK:
3424 hci_cc_read_clock(hdev, skb);
3425 break;
3426
3427 case HCI_OP_READ_INQ_RSP_TX_POWER:
3428 hci_cc_read_inq_rsp_tx_power(hdev, skb);
3429 break;
3430
3431 case HCI_OP_READ_DEF_ERR_DATA_REPORTING:
3432 hci_cc_read_def_err_data_reporting(hdev, skb);
3433 break;
3434
3435 case HCI_OP_WRITE_DEF_ERR_DATA_REPORTING:
3436 hci_cc_write_def_err_data_reporting(hdev, skb);
3437 break;
3438
3439 case HCI_OP_PIN_CODE_REPLY:
3440 hci_cc_pin_code_reply(hdev, skb);
3441 break;
3442
3443 case HCI_OP_PIN_CODE_NEG_REPLY:
3444 hci_cc_pin_code_neg_reply(hdev, skb);
3445 break;
3446
3447 case HCI_OP_READ_LOCAL_OOB_DATA:
3448 hci_cc_read_local_oob_data(hdev, skb);
3449 break;
3450
3451 case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
3452 hci_cc_read_local_oob_ext_data(hdev, skb);
3453 break;
3454
3455 case HCI_OP_LE_READ_BUFFER_SIZE:
3456 hci_cc_le_read_buffer_size(hdev, skb);
3457 break;
3458
3459 case HCI_OP_LE_READ_LOCAL_FEATURES:
3460 hci_cc_le_read_local_features(hdev, skb);
3461 break;
3462
3463 case HCI_OP_LE_READ_ADV_TX_POWER:
3464 hci_cc_le_read_adv_tx_power(hdev, skb);
3465 break;
3466
3467 case HCI_OP_USER_CONFIRM_REPLY:
3468 hci_cc_user_confirm_reply(hdev, skb);
3469 break;
3470
3471 case HCI_OP_USER_CONFIRM_NEG_REPLY:
3472 hci_cc_user_confirm_neg_reply(hdev, skb);
3473 break;
3474
3475 case HCI_OP_USER_PASSKEY_REPLY:
3476 hci_cc_user_passkey_reply(hdev, skb);
3477 break;
3478
3479 case HCI_OP_USER_PASSKEY_NEG_REPLY:
3480 hci_cc_user_passkey_neg_reply(hdev, skb);
3481 break;
3482
3483 case HCI_OP_LE_SET_RANDOM_ADDR:
3484 hci_cc_le_set_random_addr(hdev, skb);
3485 break;
3486
3487 case HCI_OP_LE_SET_ADV_ENABLE:
3488 hci_cc_le_set_adv_enable(hdev, skb);
3489 break;
3490
3491 case HCI_OP_LE_SET_SCAN_PARAM:
3492 hci_cc_le_set_scan_param(hdev, skb);
3493 break;
3494
3495 case HCI_OP_LE_SET_SCAN_ENABLE:
3496 hci_cc_le_set_scan_enable(hdev, skb);
3497 break;
3498
3499 case HCI_OP_LE_READ_WHITE_LIST_SIZE:
3500 hci_cc_le_read_white_list_size(hdev, skb);
3501 break;
3502
3503 case HCI_OP_LE_CLEAR_WHITE_LIST:
3504 hci_cc_le_clear_white_list(hdev, skb);
3505 break;
3506
3507 case HCI_OP_LE_ADD_TO_WHITE_LIST:
3508 hci_cc_le_add_to_white_list(hdev, skb);
3509 break;
3510
3511 case HCI_OP_LE_DEL_FROM_WHITE_LIST:
3512 hci_cc_le_del_from_white_list(hdev, skb);
3513 break;
3514
3515 case HCI_OP_LE_READ_SUPPORTED_STATES:
3516 hci_cc_le_read_supported_states(hdev, skb);
3517 break;
3518
3519 case HCI_OP_LE_READ_DEF_DATA_LEN:
3520 hci_cc_le_read_def_data_len(hdev, skb);
3521 break;
3522
3523 case HCI_OP_LE_WRITE_DEF_DATA_LEN:
3524 hci_cc_le_write_def_data_len(hdev, skb);
3525 break;
3526
3527 case HCI_OP_LE_ADD_TO_RESOLV_LIST:
3528 hci_cc_le_add_to_resolv_list(hdev, skb);
3529 break;
3530
3531 case HCI_OP_LE_DEL_FROM_RESOLV_LIST:
3532 hci_cc_le_del_from_resolv_list(hdev, skb);
3533 break;
3534
3535 case HCI_OP_LE_CLEAR_RESOLV_LIST:
3536 hci_cc_le_clear_resolv_list(hdev, skb);
3537 break;
3538
3539 case HCI_OP_LE_READ_RESOLV_LIST_SIZE:
3540 hci_cc_le_read_resolv_list_size(hdev, skb);
3541 break;
3542
3543 case HCI_OP_LE_SET_ADDR_RESOLV_ENABLE:
3544 hci_cc_le_set_addr_resolution_enable(hdev, skb);
3545 break;
3546
3547 case HCI_OP_LE_READ_MAX_DATA_LEN:
3548 hci_cc_le_read_max_data_len(hdev, skb);
3549 break;
3550
3551 case HCI_OP_WRITE_LE_HOST_SUPPORTED:
3552 hci_cc_write_le_host_supported(hdev, skb);
3553 break;
3554
3555 case HCI_OP_LE_SET_ADV_PARAM:
3556 hci_cc_set_adv_param(hdev, skb);
3557 break;
3558
3559 case HCI_OP_READ_RSSI:
3560 hci_cc_read_rssi(hdev, skb);
3561 break;
3562
3563 case HCI_OP_READ_TX_POWER:
3564 hci_cc_read_tx_power(hdev, skb);
3565 break;
3566
3567 case HCI_OP_WRITE_SSP_DEBUG_MODE:
3568 hci_cc_write_ssp_debug_mode(hdev, skb);
3569 break;
3570
3571 case HCI_OP_LE_SET_EXT_SCAN_PARAMS:
3572 hci_cc_le_set_ext_scan_param(hdev, skb);
3573 break;
3574
3575 case HCI_OP_LE_SET_EXT_SCAN_ENABLE:
3576 hci_cc_le_set_ext_scan_enable(hdev, skb);
3577 break;
3578
3579 case HCI_OP_LE_SET_DEFAULT_PHY:
3580 hci_cc_le_set_default_phy(hdev, skb);
3581 break;
3582
3583 case HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS:
3584 hci_cc_le_read_num_adv_sets(hdev, skb);
3585 break;
3586
3587 case HCI_OP_LE_SET_EXT_ADV_PARAMS:
3588 hci_cc_set_ext_adv_param(hdev, skb);
3589 break;
3590
3591 case HCI_OP_LE_SET_EXT_ADV_ENABLE:
3592 hci_cc_le_set_ext_adv_enable(hdev, skb);
3593 break;
3594
3595 case HCI_OP_LE_SET_ADV_SET_RAND_ADDR:
3596 hci_cc_le_set_adv_set_random_addr(hdev, skb);
3597 break;
3598
3599 case HCI_OP_LE_READ_TRANSMIT_POWER:
3600 hci_cc_le_read_transmit_power(hdev, skb);
3601 break;
3602
3603 default:
3604 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3605 break;
3606 }
3607
3608 if (*opcode != HCI_OP_NOP)
3609 cancel_delayed_work(&hdev->cmd_timer);
3610
3611 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3612 atomic_set(&hdev->cmd_cnt, 1);
3613
3614 hci_req_cmd_complete(hdev, *opcode, *status, req_complete,
3615 req_complete_skb);
3616
3617 if (hci_dev_test_flag(hdev, HCI_CMD_PENDING)) {
3618 bt_dev_err(hdev,
3619 "unexpected event for opcode 0x%4.4x", *opcode);
3620 return;
3621 }
3622
3623 if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3624 queue_work(hdev->workqueue, &hdev->cmd_work);
3625}
3626
3627static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
3628 u16 *opcode, u8 *status,
3629 hci_req_complete_t *req_complete,
3630 hci_req_complete_skb_t *req_complete_skb)
3631{
3632 struct hci_ev_cmd_status *ev = (void *) skb->data;
3633
3634 skb_pull(skb, sizeof(*ev));
3635
3636 *opcode = __le16_to_cpu(ev->opcode);
3637 *status = ev->status;
3638
3639 switch (*opcode) {
3640 case HCI_OP_INQUIRY:
3641 hci_cs_inquiry(hdev, ev->status);
3642 break;
3643
3644 case HCI_OP_CREATE_CONN:
3645 hci_cs_create_conn(hdev, ev->status);
3646 break;
3647
3648 case HCI_OP_DISCONNECT:
3649 hci_cs_disconnect(hdev, ev->status);
3650 break;
3651
3652 case HCI_OP_ADD_SCO:
3653 hci_cs_add_sco(hdev, ev->status);
3654 break;
3655
3656 case HCI_OP_AUTH_REQUESTED:
3657 hci_cs_auth_requested(hdev, ev->status);
3658 break;
3659
3660 case HCI_OP_SET_CONN_ENCRYPT:
3661 hci_cs_set_conn_encrypt(hdev, ev->status);
3662 break;
3663
3664 case HCI_OP_REMOTE_NAME_REQ:
3665 hci_cs_remote_name_req(hdev, ev->status);
3666 break;
3667
3668 case HCI_OP_READ_REMOTE_FEATURES:
3669 hci_cs_read_remote_features(hdev, ev->status);
3670 break;
3671
3672 case HCI_OP_READ_REMOTE_EXT_FEATURES:
3673 hci_cs_read_remote_ext_features(hdev, ev->status);
3674 break;
3675
3676 case HCI_OP_SETUP_SYNC_CONN:
3677 hci_cs_setup_sync_conn(hdev, ev->status);
3678 break;
3679
3680 case HCI_OP_SNIFF_MODE:
3681 hci_cs_sniff_mode(hdev, ev->status);
3682 break;
3683
3684 case HCI_OP_EXIT_SNIFF_MODE:
3685 hci_cs_exit_sniff_mode(hdev, ev->status);
3686 break;
3687
3688 case HCI_OP_SWITCH_ROLE:
3689 hci_cs_switch_role(hdev, ev->status);
3690 break;
3691
3692 case HCI_OP_LE_CREATE_CONN:
3693 hci_cs_le_create_conn(hdev, ev->status);
3694 break;
3695
3696 case HCI_OP_LE_READ_REMOTE_FEATURES:
3697 hci_cs_le_read_remote_features(hdev, ev->status);
3698 break;
3699
3700 case HCI_OP_LE_START_ENC:
3701 hci_cs_le_start_enc(hdev, ev->status);
3702 break;
3703
3704 case HCI_OP_LE_EXT_CREATE_CONN:
3705 hci_cs_le_ext_create_conn(hdev, ev->status);
3706 break;
3707
3708 default:
3709 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3710 break;
3711 }
3712
3713 if (*opcode != HCI_OP_NOP)
3714 cancel_delayed_work(&hdev->cmd_timer);
3715
3716 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3717 atomic_set(&hdev->cmd_cnt, 1);
3718
3719 /* Indicate request completion if the command failed. Also, if
3720 * we're not waiting for a special event and we get a success
3721 * command status we should try to flag the request as completed
3722 * (since for this kind of commands there will not be a command
3723 * complete event).
3724 */
3725 if (ev->status ||
3726 (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->hci.req_event))
3727 hci_req_cmd_complete(hdev, *opcode, ev->status, req_complete,
3728 req_complete_skb);
3729
3730 if (hci_dev_test_flag(hdev, HCI_CMD_PENDING)) {
3731 bt_dev_err(hdev,
3732 "unexpected event for opcode 0x%4.4x", *opcode);
3733 return;
3734 }
3735
3736 if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3737 queue_work(hdev->workqueue, &hdev->cmd_work);
3738}
3739
3740static void hci_hardware_error_evt(struct hci_dev *hdev, struct sk_buff *skb)
3741{
3742 struct hci_ev_hardware_error *ev = (void *) skb->data;
3743
3744 hdev->hw_error_code = ev->code;
3745
3746 queue_work(hdev->req_workqueue, &hdev->error_reset);
3747}
3748
3749static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3750{
3751 struct hci_ev_role_change *ev = (void *) skb->data;
3752 struct hci_conn *conn;
3753
3754 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3755
3756 hci_dev_lock(hdev);
3757
3758 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3759 if (conn) {
3760 if (!ev->status)
3761 conn->role = ev->role;
3762
3763 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
3764
3765 hci_role_switch_cfm(conn, ev->status, ev->role);
3766 }
3767
3768 hci_dev_unlock(hdev);
3769}
3770
3771static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
3772{
3773 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
3774 int i;
3775
3776 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
3777 bt_dev_err(hdev, "wrong event for mode %d", hdev->flow_ctl_mode);
3778 return;
3779 }
3780
3781 if (skb->len < sizeof(*ev) ||
3782 skb->len < struct_size(ev, handles, ev->num_hndl)) {
3783 BT_DBG("%s bad parameters", hdev->name);
3784 return;
3785 }
3786
3787 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
3788
3789 for (i = 0; i < ev->num_hndl; i++) {
3790 struct hci_comp_pkts_info *info = &ev->handles[i];
3791 struct hci_conn *conn;
3792 __u16 handle, count;
3793
3794 handle = __le16_to_cpu(info->handle);
3795 count = __le16_to_cpu(info->count);
3796
3797 conn = hci_conn_hash_lookup_handle(hdev, handle);
3798 if (!conn)
3799 continue;
3800
3801 conn->sent -= count;
3802
3803 switch (conn->type) {
3804 case ACL_LINK:
3805 hdev->acl_cnt += count;
3806 if (hdev->acl_cnt > hdev->acl_pkts)
3807 hdev->acl_cnt = hdev->acl_pkts;
3808 break;
3809
3810 case LE_LINK:
3811 if (hdev->le_pkts) {
3812 hdev->le_cnt += count;
3813 if (hdev->le_cnt > hdev->le_pkts)
3814 hdev->le_cnt = hdev->le_pkts;
3815 } else {
3816 hdev->acl_cnt += count;
3817 if (hdev->acl_cnt > hdev->acl_pkts)
3818 hdev->acl_cnt = hdev->acl_pkts;
3819 }
3820 break;
3821
3822 case SCO_LINK:
3823 hdev->sco_cnt += count;
3824 if (hdev->sco_cnt > hdev->sco_pkts)
3825 hdev->sco_cnt = hdev->sco_pkts;
3826 break;
3827
3828 default:
3829 bt_dev_err(hdev, "unknown type %d conn %p",
3830 conn->type, conn);
3831 break;
3832 }
3833 }
3834
3835 queue_work(hdev->workqueue, &hdev->tx_work);
3836}
3837
3838static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3839 __u16 handle)
3840{
3841 struct hci_chan *chan;
3842
3843 switch (hdev->dev_type) {
3844 case HCI_PRIMARY:
3845 return hci_conn_hash_lookup_handle(hdev, handle);
3846 case HCI_AMP:
3847 chan = hci_chan_lookup_handle(hdev, handle);
3848 if (chan)
3849 return chan->conn;
3850 break;
3851 default:
3852 bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
3853 break;
3854 }
3855
3856 return NULL;
3857}
3858
3859static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3860{
3861 struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
3862 int i;
3863
3864 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3865 bt_dev_err(hdev, "wrong event for mode %d", hdev->flow_ctl_mode);
3866 return;
3867 }
3868
3869 if (skb->len < sizeof(*ev) ||
3870 skb->len < struct_size(ev, handles, ev->num_hndl)) {
3871 BT_DBG("%s bad parameters", hdev->name);
3872 return;
3873 }
3874
3875 BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3876 ev->num_hndl);
3877
3878 for (i = 0; i < ev->num_hndl; i++) {
3879 struct hci_comp_blocks_info *info = &ev->handles[i];
3880 struct hci_conn *conn = NULL;
3881 __u16 handle, block_count;
3882
3883 handle = __le16_to_cpu(info->handle);
3884 block_count = __le16_to_cpu(info->blocks);
3885
3886 conn = __hci_conn_lookup_handle(hdev, handle);
3887 if (!conn)
3888 continue;
3889
3890 conn->sent -= block_count;
3891
3892 switch (conn->type) {
3893 case ACL_LINK:
3894 case AMP_LINK:
3895 hdev->block_cnt += block_count;
3896 if (hdev->block_cnt > hdev->num_blocks)
3897 hdev->block_cnt = hdev->num_blocks;
3898 break;
3899
3900 default:
3901 bt_dev_err(hdev, "unknown type %d conn %p",
3902 conn->type, conn);
3903 break;
3904 }
3905 }
3906
3907 queue_work(hdev->workqueue, &hdev->tx_work);
3908}
3909
3910static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3911{
3912 struct hci_ev_mode_change *ev = (void *) skb->data;
3913 struct hci_conn *conn;
3914
3915 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3916
3917 hci_dev_lock(hdev);
3918
3919 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3920 if (conn) {
3921 conn->mode = ev->mode;
3922
3923 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3924 &conn->flags)) {
3925 if (conn->mode == HCI_CM_ACTIVE)
3926 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3927 else
3928 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3929 }
3930
3931 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3932 hci_sco_setup(conn, ev->status);
3933 }
3934
3935 hci_dev_unlock(hdev);
3936}
3937
3938static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3939{
3940 struct hci_ev_pin_code_req *ev = (void *) skb->data;
3941 struct hci_conn *conn;
3942
3943 BT_DBG("%s", hdev->name);
3944
3945 hci_dev_lock(hdev);
3946
3947 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3948 if (!conn)
3949 goto unlock;
3950
3951 if (conn->state == BT_CONNECTED) {
3952 hci_conn_hold(conn);
3953 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3954 hci_conn_drop(conn);
3955 }
3956
3957 if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
3958 !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) {
3959 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3960 sizeof(ev->bdaddr), &ev->bdaddr);
3961 } else if (hci_dev_test_flag(hdev, HCI_MGMT)) {
3962 u8 secure;
3963
3964 if (conn->pending_sec_level == BT_SECURITY_HIGH)
3965 secure = 1;
3966 else
3967 secure = 0;
3968
3969 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3970 }
3971
3972unlock:
3973 hci_dev_unlock(hdev);
3974}
3975
3976static void conn_set_key(struct hci_conn *conn, u8 key_type, u8 pin_len)
3977{
3978 if (key_type == HCI_LK_CHANGED_COMBINATION)
3979 return;
3980
3981 conn->pin_length = pin_len;
3982 conn->key_type = key_type;
3983
3984 switch (key_type) {
3985 case HCI_LK_LOCAL_UNIT:
3986 case HCI_LK_REMOTE_UNIT:
3987 case HCI_LK_DEBUG_COMBINATION:
3988 return;
3989 case HCI_LK_COMBINATION:
3990 if (pin_len == 16)
3991 conn->pending_sec_level = BT_SECURITY_HIGH;
3992 else
3993 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3994 break;
3995 case HCI_LK_UNAUTH_COMBINATION_P192:
3996 case HCI_LK_UNAUTH_COMBINATION_P256:
3997 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3998 break;
3999 case HCI_LK_AUTH_COMBINATION_P192:
4000 conn->pending_sec_level = BT_SECURITY_HIGH;
4001 break;
4002 case HCI_LK_AUTH_COMBINATION_P256:
4003 conn->pending_sec_level = BT_SECURITY_FIPS;
4004 break;
4005 }
4006}
4007
4008static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4009{
4010 struct hci_ev_link_key_req *ev = (void *) skb->data;
4011 struct hci_cp_link_key_reply cp;
4012 struct hci_conn *conn;
4013 struct link_key *key;
4014
4015 BT_DBG("%s", hdev->name);
4016
4017 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4018 return;
4019
4020 hci_dev_lock(hdev);
4021
4022 key = hci_find_link_key(hdev, &ev->bdaddr);
4023 if (!key) {
4024 BT_DBG("%s link key not found for %pMR", hdev->name,
4025 &ev->bdaddr);
4026 goto not_found;
4027 }
4028
4029 BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
4030 &ev->bdaddr);
4031
4032 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4033 if (conn) {
4034 clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
4035
4036 if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
4037 key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
4038 conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
4039 BT_DBG("%s ignoring unauthenticated key", hdev->name);
4040 goto not_found;
4041 }
4042
4043 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
4044 (conn->pending_sec_level == BT_SECURITY_HIGH ||
4045 conn->pending_sec_level == BT_SECURITY_FIPS)) {
4046 BT_DBG("%s ignoring key unauthenticated for high security",
4047 hdev->name);
4048 goto not_found;
4049 }
4050
4051 conn_set_key(conn, key->type, key->pin_len);
4052 }
4053
4054 bacpy(&cp.bdaddr, &ev->bdaddr);
4055 memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
4056
4057 hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
4058
4059 hci_dev_unlock(hdev);
4060
4061 return;
4062
4063not_found:
4064 hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
4065 hci_dev_unlock(hdev);
4066}
4067
4068static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4069{
4070 struct hci_ev_link_key_notify *ev = (void *) skb->data;
4071 struct hci_conn *conn;
4072 struct link_key *key;
4073 bool persistent;
4074 u8 pin_len = 0;
4075
4076 BT_DBG("%s", hdev->name);
4077
4078 hci_dev_lock(hdev);
4079
4080 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4081 if (!conn)
4082 goto unlock;
4083
4084 hci_conn_hold(conn);
4085 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
4086 hci_conn_drop(conn);
4087
4088 set_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
4089 conn_set_key(conn, ev->key_type, conn->pin_length);
4090
4091 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4092 goto unlock;
4093
4094 key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
4095 ev->key_type, pin_len, &persistent);
4096 if (!key)
4097 goto unlock;
4098
4099 /* Update connection information since adding the key will have
4100 * fixed up the type in the case of changed combination keys.
4101 */
4102 if (ev->key_type == HCI_LK_CHANGED_COMBINATION)
4103 conn_set_key(conn, key->type, key->pin_len);
4104
4105 mgmt_new_link_key(hdev, key, persistent);
4106
4107 /* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag
4108 * is set. If it's not set simply remove the key from the kernel
4109 * list (we've still notified user space about it but with
4110 * store_hint being 0).
4111 */
4112 if (key->type == HCI_LK_DEBUG_COMBINATION &&
4113 !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) {
4114 list_del_rcu(&key->list);
4115 kfree_rcu(key, rcu);
4116 goto unlock;
4117 }
4118
4119 if (persistent)
4120 clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
4121 else
4122 set_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
4123
4124unlock:
4125 hci_dev_unlock(hdev);
4126}
4127
4128static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
4129{
4130 struct hci_ev_clock_offset *ev = (void *) skb->data;
4131 struct hci_conn *conn;
4132
4133 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4134
4135 hci_dev_lock(hdev);
4136
4137 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4138 if (conn && !ev->status) {
4139 struct inquiry_entry *ie;
4140
4141 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
4142 if (ie) {
4143 ie->data.clock_offset = ev->clock_offset;
4144 ie->timestamp = jiffies;
4145 }
4146 }
4147
4148 hci_dev_unlock(hdev);
4149}
4150
4151static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
4152{
4153 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
4154 struct hci_conn *conn;
4155
4156 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4157
4158 hci_dev_lock(hdev);
4159
4160 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4161 if (conn && !ev->status)
4162 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
4163
4164 hci_dev_unlock(hdev);
4165}
4166
4167static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
4168{
4169 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
4170 struct inquiry_entry *ie;
4171
4172 BT_DBG("%s", hdev->name);
4173
4174 hci_dev_lock(hdev);
4175
4176 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4177 if (ie) {
4178 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
4179 ie->timestamp = jiffies;
4180 }
4181
4182 hci_dev_unlock(hdev);
4183}
4184
4185static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
4186 struct sk_buff *skb)
4187{
4188 struct inquiry_data data;
4189 int num_rsp = *((__u8 *) skb->data);
4190
4191 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
4192
4193 if (!num_rsp)
4194 return;
4195
4196 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
4197 return;
4198
4199 hci_dev_lock(hdev);
4200
4201 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
4202 struct inquiry_info_with_rssi_and_pscan_mode *info;
4203 info = (void *) (skb->data + 1);
4204
4205 if (skb->len < num_rsp * sizeof(*info) + 1)
4206 goto unlock;
4207
4208 for (; num_rsp; num_rsp--, info++) {
4209 u32 flags;
4210
4211 bacpy(&data.bdaddr, &info->bdaddr);
4212 data.pscan_rep_mode = info->pscan_rep_mode;
4213 data.pscan_period_mode = info->pscan_period_mode;
4214 data.pscan_mode = info->pscan_mode;
4215 memcpy(data.dev_class, info->dev_class, 3);
4216 data.clock_offset = info->clock_offset;
4217 data.rssi = info->rssi;
4218 data.ssp_mode = 0x00;
4219
4220 flags = hci_inquiry_cache_update(hdev, &data, false);
4221
4222 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4223 info->dev_class, info->rssi,
4224 flags, NULL, 0, NULL, 0);
4225 }
4226 } else {
4227 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
4228
4229 if (skb->len < num_rsp * sizeof(*info) + 1)
4230 goto unlock;
4231
4232 for (; num_rsp; num_rsp--, info++) {
4233 u32 flags;
4234
4235 bacpy(&data.bdaddr, &info->bdaddr);
4236 data.pscan_rep_mode = info->pscan_rep_mode;
4237 data.pscan_period_mode = info->pscan_period_mode;
4238 data.pscan_mode = 0x00;
4239 memcpy(data.dev_class, info->dev_class, 3);
4240 data.clock_offset = info->clock_offset;
4241 data.rssi = info->rssi;
4242 data.ssp_mode = 0x00;
4243
4244 flags = hci_inquiry_cache_update(hdev, &data, false);
4245
4246 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4247 info->dev_class, info->rssi,
4248 flags, NULL, 0, NULL, 0);
4249 }
4250 }
4251
4252unlock:
4253 hci_dev_unlock(hdev);
4254}
4255
4256static void hci_remote_ext_features_evt(struct hci_dev *hdev,
4257 struct sk_buff *skb)
4258{
4259 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
4260 struct hci_conn *conn;
4261
4262 BT_DBG("%s", hdev->name);
4263
4264 hci_dev_lock(hdev);
4265
4266 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4267 if (!conn)
4268 goto unlock;
4269
4270 if (ev->page < HCI_MAX_PAGES)
4271 memcpy(conn->features[ev->page], ev->features, 8);
4272
4273 if (!ev->status && ev->page == 0x01) {
4274 struct inquiry_entry *ie;
4275
4276 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
4277 if (ie)
4278 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
4279
4280 if (ev->features[0] & LMP_HOST_SSP) {
4281 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
4282 } else {
4283 /* It is mandatory by the Bluetooth specification that
4284 * Extended Inquiry Results are only used when Secure
4285 * Simple Pairing is enabled, but some devices violate
4286 * this.
4287 *
4288 * To make these devices work, the internal SSP
4289 * enabled flag needs to be cleared if the remote host
4290 * features do not indicate SSP support */
4291 clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
4292 }
4293
4294 if (ev->features[0] & LMP_HOST_SC)
4295 set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
4296 }
4297
4298 if (conn->state != BT_CONFIG)
4299 goto unlock;
4300
4301 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
4302 struct hci_cp_remote_name_req cp;
4303 memset(&cp, 0, sizeof(cp));
4304 bacpy(&cp.bdaddr, &conn->dst);
4305 cp.pscan_rep_mode = 0x02;
4306 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
4307 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
4308 mgmt_device_connected(hdev, conn, 0, NULL, 0);
4309
4310 if (!hci_outgoing_auth_needed(hdev, conn)) {
4311 conn->state = BT_CONNECTED;
4312 hci_connect_cfm(conn, ev->status);
4313 hci_conn_drop(conn);
4314 }
4315
4316unlock:
4317 hci_dev_unlock(hdev);
4318}
4319
4320static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
4321 struct sk_buff *skb)
4322{
4323 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
4324 struct hci_conn *conn;
4325
4326 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4327
4328 hci_dev_lock(hdev);
4329
4330 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
4331 if (!conn) {
4332 if (ev->link_type == ESCO_LINK)
4333 goto unlock;
4334
4335 /* When the link type in the event indicates SCO connection
4336 * and lookup of the connection object fails, then check
4337 * if an eSCO connection object exists.
4338 *
4339 * The core limits the synchronous connections to either
4340 * SCO or eSCO. The eSCO connection is preferred and tried
4341 * to be setup first and until successfully established,
4342 * the link type will be hinted as eSCO.
4343 */
4344 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
4345 if (!conn)
4346 goto unlock;
4347 }
4348
4349 switch (ev->status) {
4350 case 0x00:
4351 conn->handle = __le16_to_cpu(ev->handle);
4352 conn->state = BT_CONNECTED;
4353 conn->type = ev->link_type;
4354
4355 hci_debugfs_create_conn(conn);
4356 hci_conn_add_sysfs(conn);
4357 break;
4358
4359 case 0x10: /* Connection Accept Timeout */
4360 case 0x0d: /* Connection Rejected due to Limited Resources */
4361 case 0x11: /* Unsupported Feature or Parameter Value */
4362 case 0x1c: /* SCO interval rejected */
4363 case 0x1a: /* Unsupported Remote Feature */
4364 case 0x1e: /* Invalid LMP Parameters */
4365 case 0x1f: /* Unspecified error */
4366 case 0x20: /* Unsupported LMP Parameter value */
4367 if (conn->out) {
4368 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
4369 (hdev->esco_type & EDR_ESCO_MASK);
4370 if (hci_setup_sync(conn, conn->link->handle))
4371 goto unlock;
4372 }
4373 fallthrough;
4374
4375 default:
4376 conn->state = BT_CLOSED;
4377 break;
4378 }
4379
4380 bt_dev_dbg(hdev, "SCO connected with air mode: %02x", ev->air_mode);
4381
4382 switch (conn->setting & SCO_AIRMODE_MASK) {
4383 case SCO_AIRMODE_CVSD:
4384 if (hdev->notify)
4385 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
4386 break;
4387 case SCO_AIRMODE_TRANSP:
4388 if (hdev->notify)
4389 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_TRANSP);
4390 break;
4391 }
4392
4393 hci_connect_cfm(conn, ev->status);
4394 if (ev->status)
4395 hci_conn_del(conn);
4396
4397unlock:
4398 hci_dev_unlock(hdev);
4399}
4400
4401static inline size_t eir_get_length(u8 *eir, size_t eir_len)
4402{
4403 size_t parsed = 0;
4404
4405 while (parsed < eir_len) {
4406 u8 field_len = eir[0];
4407
4408 if (field_len == 0)
4409 return parsed;
4410
4411 parsed += field_len + 1;
4412 eir += field_len + 1;
4413 }
4414
4415 return eir_len;
4416}
4417
4418static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
4419 struct sk_buff *skb)
4420{
4421 struct inquiry_data data;
4422 struct extended_inquiry_info *info = (void *) (skb->data + 1);
4423 int num_rsp = *((__u8 *) skb->data);
4424 size_t eir_len;
4425
4426 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
4427
4428 if (!num_rsp || skb->len < num_rsp * sizeof(*info) + 1)
4429 return;
4430
4431 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
4432 return;
4433
4434 hci_dev_lock(hdev);
4435
4436 for (; num_rsp; num_rsp--, info++) {
4437 u32 flags;
4438 bool name_known;
4439
4440 bacpy(&data.bdaddr, &info->bdaddr);
4441 data.pscan_rep_mode = info->pscan_rep_mode;
4442 data.pscan_period_mode = info->pscan_period_mode;
4443 data.pscan_mode = 0x00;
4444 memcpy(data.dev_class, info->dev_class, 3);
4445 data.clock_offset = info->clock_offset;
4446 data.rssi = info->rssi;
4447 data.ssp_mode = 0x01;
4448
4449 if (hci_dev_test_flag(hdev, HCI_MGMT))
4450 name_known = eir_get_data(info->data,
4451 sizeof(info->data),
4452 EIR_NAME_COMPLETE, NULL);
4453 else
4454 name_known = true;
4455
4456 flags = hci_inquiry_cache_update(hdev, &data, name_known);
4457
4458 eir_len = eir_get_length(info->data, sizeof(info->data));
4459
4460 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4461 info->dev_class, info->rssi,
4462 flags, info->data, eir_len, NULL, 0);
4463 }
4464
4465 hci_dev_unlock(hdev);
4466}
4467
4468static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
4469 struct sk_buff *skb)
4470{
4471 struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
4472 struct hci_conn *conn;
4473
4474 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
4475 __le16_to_cpu(ev->handle));
4476
4477 hci_dev_lock(hdev);
4478
4479 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4480 if (!conn)
4481 goto unlock;
4482
4483 /* For BR/EDR the necessary steps are taken through the
4484 * auth_complete event.
4485 */
4486 if (conn->type != LE_LINK)
4487 goto unlock;
4488
4489 if (!ev->status)
4490 conn->sec_level = conn->pending_sec_level;
4491
4492 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
4493
4494 if (ev->status && conn->state == BT_CONNECTED) {
4495 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
4496 hci_conn_drop(conn);
4497 goto unlock;
4498 }
4499
4500 if (conn->state == BT_CONFIG) {
4501 if (!ev->status)
4502 conn->state = BT_CONNECTED;
4503
4504 hci_connect_cfm(conn, ev->status);
4505 hci_conn_drop(conn);
4506 } else {
4507 hci_auth_cfm(conn, ev->status);
4508
4509 hci_conn_hold(conn);
4510 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
4511 hci_conn_drop(conn);
4512 }
4513
4514unlock:
4515 hci_dev_unlock(hdev);
4516}
4517
4518static u8 hci_get_auth_req(struct hci_conn *conn)
4519{
4520 /* If remote requests no-bonding follow that lead */
4521 if (conn->remote_auth == HCI_AT_NO_BONDING ||
4522 conn->remote_auth == HCI_AT_NO_BONDING_MITM)
4523 return conn->remote_auth | (conn->auth_type & 0x01);
4524
4525 /* If both remote and local have enough IO capabilities, require
4526 * MITM protection
4527 */
4528 if (conn->remote_cap != HCI_IO_NO_INPUT_OUTPUT &&
4529 conn->io_capability != HCI_IO_NO_INPUT_OUTPUT)
4530 return conn->remote_auth | 0x01;
4531
4532 /* No MITM protection possible so ignore remote requirement */
4533 return (conn->remote_auth & ~0x01) | (conn->auth_type & 0x01);
4534}
4535
4536static u8 bredr_oob_data_present(struct hci_conn *conn)
4537{
4538 struct hci_dev *hdev = conn->hdev;
4539 struct oob_data *data;
4540
4541 data = hci_find_remote_oob_data(hdev, &conn->dst, BDADDR_BREDR);
4542 if (!data)
4543 return 0x00;
4544
4545 if (bredr_sc_enabled(hdev)) {
4546 /* When Secure Connections is enabled, then just
4547 * return the present value stored with the OOB
4548 * data. The stored value contains the right present
4549 * information. However it can only be trusted when
4550 * not in Secure Connection Only mode.
4551 */
4552 if (!hci_dev_test_flag(hdev, HCI_SC_ONLY))
4553 return data->present;
4554
4555 /* When Secure Connections Only mode is enabled, then
4556 * the P-256 values are required. If they are not
4557 * available, then do not declare that OOB data is
4558 * present.
4559 */
4560 if (!memcmp(data->rand256, ZERO_KEY, 16) ||
4561 !memcmp(data->hash256, ZERO_KEY, 16))
4562 return 0x00;
4563
4564 return 0x02;
4565 }
4566
4567 /* When Secure Connections is not enabled or actually
4568 * not supported by the hardware, then check that if
4569 * P-192 data values are present.
4570 */
4571 if (!memcmp(data->rand192, ZERO_KEY, 16) ||
4572 !memcmp(data->hash192, ZERO_KEY, 16))
4573 return 0x00;
4574
4575 return 0x01;
4576}
4577
4578static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4579{
4580 struct hci_ev_io_capa_request *ev = (void *) skb->data;
4581 struct hci_conn *conn;
4582
4583 BT_DBG("%s", hdev->name);
4584
4585 hci_dev_lock(hdev);
4586
4587 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4588 if (!conn)
4589 goto unlock;
4590
4591 hci_conn_hold(conn);
4592
4593 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4594 goto unlock;
4595
4596 /* Allow pairing if we're pairable, the initiators of the
4597 * pairing or if the remote is not requesting bonding.
4598 */
4599 if (hci_dev_test_flag(hdev, HCI_BONDABLE) ||
4600 test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) ||
4601 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
4602 struct hci_cp_io_capability_reply cp;
4603
4604 bacpy(&cp.bdaddr, &ev->bdaddr);
4605 /* Change the IO capability from KeyboardDisplay
4606 * to DisplayYesNo as it is not supported by BT spec. */
4607 cp.capability = (conn->io_capability == 0x04) ?
4608 HCI_IO_DISPLAY_YESNO : conn->io_capability;
4609
4610 /* If we are initiators, there is no remote information yet */
4611 if (conn->remote_auth == 0xff) {
4612 /* Request MITM protection if our IO caps allow it
4613 * except for the no-bonding case.
4614 */
4615 if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4616 conn->auth_type != HCI_AT_NO_BONDING)
4617 conn->auth_type |= 0x01;
4618 } else {
4619 conn->auth_type = hci_get_auth_req(conn);
4620 }
4621
4622 /* If we're not bondable, force one of the non-bondable
4623 * authentication requirement values.
4624 */
4625 if (!hci_dev_test_flag(hdev, HCI_BONDABLE))
4626 conn->auth_type &= HCI_AT_NO_BONDING_MITM;
4627
4628 cp.authentication = conn->auth_type;
4629 cp.oob_data = bredr_oob_data_present(conn);
4630
4631 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
4632 sizeof(cp), &cp);
4633 } else {
4634 struct hci_cp_io_capability_neg_reply cp;
4635
4636 bacpy(&cp.bdaddr, &ev->bdaddr);
4637 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
4638
4639 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
4640 sizeof(cp), &cp);
4641 }
4642
4643unlock:
4644 hci_dev_unlock(hdev);
4645}
4646
4647static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
4648{
4649 struct hci_ev_io_capa_reply *ev = (void *) skb->data;
4650 struct hci_conn *conn;
4651
4652 BT_DBG("%s", hdev->name);
4653
4654 hci_dev_lock(hdev);
4655
4656 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4657 if (!conn)
4658 goto unlock;
4659
4660 conn->remote_cap = ev->capability;
4661 conn->remote_auth = ev->authentication;
4662
4663unlock:
4664 hci_dev_unlock(hdev);
4665}
4666
4667static void hci_user_confirm_request_evt(struct hci_dev *hdev,
4668 struct sk_buff *skb)
4669{
4670 struct hci_ev_user_confirm_req *ev = (void *) skb->data;
4671 int loc_mitm, rem_mitm, confirm_hint = 0;
4672 struct hci_conn *conn;
4673
4674 BT_DBG("%s", hdev->name);
4675
4676 hci_dev_lock(hdev);
4677
4678 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4679 goto unlock;
4680
4681 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4682 if (!conn)
4683 goto unlock;
4684
4685 loc_mitm = (conn->auth_type & 0x01);
4686 rem_mitm = (conn->remote_auth & 0x01);
4687
4688 /* If we require MITM but the remote device can't provide that
4689 * (it has NoInputNoOutput) then reject the confirmation
4690 * request. We check the security level here since it doesn't
4691 * necessarily match conn->auth_type.
4692 */
4693 if (conn->pending_sec_level > BT_SECURITY_MEDIUM &&
4694 conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
4695 BT_DBG("Rejecting request: remote device can't provide MITM");
4696 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
4697 sizeof(ev->bdaddr), &ev->bdaddr);
4698 goto unlock;
4699 }
4700
4701 /* If no side requires MITM protection; auto-accept */
4702 if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
4703 (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
4704
4705 /* If we're not the initiators request authorization to
4706 * proceed from user space (mgmt_user_confirm with
4707 * confirm_hint set to 1). The exception is if neither
4708 * side had MITM or if the local IO capability is
4709 * NoInputNoOutput, in which case we do auto-accept
4710 */
4711 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) &&
4712 conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4713 (loc_mitm || rem_mitm)) {
4714 BT_DBG("Confirming auto-accept as acceptor");
4715 confirm_hint = 1;
4716 goto confirm;
4717 }
4718
4719 /* If there already exists link key in local host, leave the
4720 * decision to user space since the remote device could be
4721 * legitimate or malicious.
4722 */
4723 if (hci_find_link_key(hdev, &ev->bdaddr)) {
4724 bt_dev_dbg(hdev, "Local host already has link key");
4725 confirm_hint = 1;
4726 goto confirm;
4727 }
4728
4729 BT_DBG("Auto-accept of user confirmation with %ums delay",
4730 hdev->auto_accept_delay);
4731
4732 if (hdev->auto_accept_delay > 0) {
4733 int delay = msecs_to_jiffies(hdev->auto_accept_delay);
4734 queue_delayed_work(conn->hdev->workqueue,
4735 &conn->auto_accept_work, delay);
4736 goto unlock;
4737 }
4738
4739 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
4740 sizeof(ev->bdaddr), &ev->bdaddr);
4741 goto unlock;
4742 }
4743
4744confirm:
4745 mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
4746 le32_to_cpu(ev->passkey), confirm_hint);
4747
4748unlock:
4749 hci_dev_unlock(hdev);
4750}
4751
4752static void hci_user_passkey_request_evt(struct hci_dev *hdev,
4753 struct sk_buff *skb)
4754{
4755 struct hci_ev_user_passkey_req *ev = (void *) skb->data;
4756
4757 BT_DBG("%s", hdev->name);
4758
4759 if (hci_dev_test_flag(hdev, HCI_MGMT))
4760 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
4761}
4762
4763static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
4764 struct sk_buff *skb)
4765{
4766 struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
4767 struct hci_conn *conn;
4768
4769 BT_DBG("%s", hdev->name);
4770
4771 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4772 if (!conn)
4773 return;
4774
4775 conn->passkey_notify = __le32_to_cpu(ev->passkey);
4776 conn->passkey_entered = 0;
4777
4778 if (hci_dev_test_flag(hdev, HCI_MGMT))
4779 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4780 conn->dst_type, conn->passkey_notify,
4781 conn->passkey_entered);
4782}
4783
4784static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4785{
4786 struct hci_ev_keypress_notify *ev = (void *) skb->data;
4787 struct hci_conn *conn;
4788
4789 BT_DBG("%s", hdev->name);
4790
4791 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4792 if (!conn)
4793 return;
4794
4795 switch (ev->type) {
4796 case HCI_KEYPRESS_STARTED:
4797 conn->passkey_entered = 0;
4798 return;
4799
4800 case HCI_KEYPRESS_ENTERED:
4801 conn->passkey_entered++;
4802 break;
4803
4804 case HCI_KEYPRESS_ERASED:
4805 conn->passkey_entered--;
4806 break;
4807
4808 case HCI_KEYPRESS_CLEARED:
4809 conn->passkey_entered = 0;
4810 break;
4811
4812 case HCI_KEYPRESS_COMPLETED:
4813 return;
4814 }
4815
4816 if (hci_dev_test_flag(hdev, HCI_MGMT))
4817 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4818 conn->dst_type, conn->passkey_notify,
4819 conn->passkey_entered);
4820}
4821
4822static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
4823 struct sk_buff *skb)
4824{
4825 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
4826 struct hci_conn *conn;
4827
4828 BT_DBG("%s", hdev->name);
4829
4830 hci_dev_lock(hdev);
4831
4832 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4833 if (!conn)
4834 goto unlock;
4835
4836 /* Reset the authentication requirement to unknown */
4837 conn->remote_auth = 0xff;
4838
4839 /* To avoid duplicate auth_failed events to user space we check
4840 * the HCI_CONN_AUTH_PEND flag which will be set if we
4841 * initiated the authentication. A traditional auth_complete
4842 * event gets always produced as initiator and is also mapped to
4843 * the mgmt_auth_failed event */
4844 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
4845 mgmt_auth_failed(conn, ev->status);
4846
4847 hci_conn_drop(conn);
4848
4849unlock:
4850 hci_dev_unlock(hdev);
4851}
4852
4853static void hci_remote_host_features_evt(struct hci_dev *hdev,
4854 struct sk_buff *skb)
4855{
4856 struct hci_ev_remote_host_features *ev = (void *) skb->data;
4857 struct inquiry_entry *ie;
4858 struct hci_conn *conn;
4859
4860 BT_DBG("%s", hdev->name);
4861
4862 hci_dev_lock(hdev);
4863
4864 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4865 if (conn)
4866 memcpy(conn->features[1], ev->features, 8);
4867
4868 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4869 if (ie)
4870 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
4871
4872 hci_dev_unlock(hdev);
4873}
4874
4875static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
4876 struct sk_buff *skb)
4877{
4878 struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
4879 struct oob_data *data;
4880
4881 BT_DBG("%s", hdev->name);
4882
4883 hci_dev_lock(hdev);
4884
4885 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4886 goto unlock;
4887
4888 data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR);
4889 if (!data) {
4890 struct hci_cp_remote_oob_data_neg_reply cp;
4891
4892 bacpy(&cp.bdaddr, &ev->bdaddr);
4893 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
4894 sizeof(cp), &cp);
4895 goto unlock;
4896 }
4897
4898 if (bredr_sc_enabled(hdev)) {
4899 struct hci_cp_remote_oob_ext_data_reply cp;
4900
4901 bacpy(&cp.bdaddr, &ev->bdaddr);
4902 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4903 memset(cp.hash192, 0, sizeof(cp.hash192));
4904 memset(cp.rand192, 0, sizeof(cp.rand192));
4905 } else {
4906 memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
4907 memcpy(cp.rand192, data->rand192, sizeof(cp.rand192));
4908 }
4909 memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
4910 memcpy(cp.rand256, data->rand256, sizeof(cp.rand256));
4911
4912 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
4913 sizeof(cp), &cp);
4914 } else {
4915 struct hci_cp_remote_oob_data_reply cp;
4916
4917 bacpy(&cp.bdaddr, &ev->bdaddr);
4918 memcpy(cp.hash, data->hash192, sizeof(cp.hash));
4919 memcpy(cp.rand, data->rand192, sizeof(cp.rand));
4920
4921 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
4922 sizeof(cp), &cp);
4923 }
4924
4925unlock:
4926 hci_dev_unlock(hdev);
4927}
4928
4929#if IS_ENABLED(CONFIG_BT_HS)
4930static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4931{
4932 struct hci_ev_channel_selected *ev = (void *)skb->data;
4933 struct hci_conn *hcon;
4934
4935 BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4936
4937 skb_pull(skb, sizeof(*ev));
4938
4939 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4940 if (!hcon)
4941 return;
4942
4943 amp_read_loc_assoc_final_data(hdev, hcon);
4944}
4945
4946static void hci_phy_link_complete_evt(struct hci_dev *hdev,
4947 struct sk_buff *skb)
4948{
4949 struct hci_ev_phy_link_complete *ev = (void *) skb->data;
4950 struct hci_conn *hcon, *bredr_hcon;
4951
4952 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
4953 ev->status);
4954
4955 hci_dev_lock(hdev);
4956
4957 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4958 if (!hcon)
4959 goto unlock;
4960
4961 if (!hcon->amp_mgr)
4962 goto unlock;
4963
4964 if (ev->status) {
4965 hci_conn_del(hcon);
4966 goto unlock;
4967 }
4968
4969 bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
4970
4971 hcon->state = BT_CONNECTED;
4972 bacpy(&hcon->dst, &bredr_hcon->dst);
4973
4974 hci_conn_hold(hcon);
4975 hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4976 hci_conn_drop(hcon);
4977
4978 hci_debugfs_create_conn(hcon);
4979 hci_conn_add_sysfs(hcon);
4980
4981 amp_physical_cfm(bredr_hcon, hcon);
4982
4983unlock:
4984 hci_dev_unlock(hdev);
4985}
4986
4987static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4988{
4989 struct hci_ev_logical_link_complete *ev = (void *) skb->data;
4990 struct hci_conn *hcon;
4991 struct hci_chan *hchan;
4992 struct amp_mgr *mgr;
4993
4994 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
4995 hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
4996 ev->status);
4997
4998 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4999 if (!hcon)
5000 return;
5001
5002 /* Create AMP hchan */
5003 hchan = hci_chan_create(hcon);
5004 if (!hchan)
5005 return;
5006
5007 hchan->handle = le16_to_cpu(ev->handle);
5008
5009 BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
5010
5011 mgr = hcon->amp_mgr;
5012 if (mgr && mgr->bredr_chan) {
5013 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
5014
5015 l2cap_chan_lock(bredr_chan);
5016
5017 bredr_chan->conn->mtu = hdev->block_mtu;
5018 l2cap_logical_cfm(bredr_chan, hchan, 0);
5019 hci_conn_hold(hcon);
5020
5021 l2cap_chan_unlock(bredr_chan);
5022 }
5023}
5024
5025static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
5026 struct sk_buff *skb)
5027{
5028 struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
5029 struct hci_chan *hchan;
5030
5031 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
5032 le16_to_cpu(ev->handle), ev->status);
5033
5034 if (ev->status)
5035 return;
5036
5037 hci_dev_lock(hdev);
5038
5039 hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
5040 if (!hchan)
5041 goto unlock;
5042
5043 amp_destroy_logical_link(hchan, ev->reason);
5044
5045unlock:
5046 hci_dev_unlock(hdev);
5047}
5048
5049static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
5050 struct sk_buff *skb)
5051{
5052 struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
5053 struct hci_conn *hcon;
5054
5055 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5056
5057 if (ev->status)
5058 return;
5059
5060 hci_dev_lock(hdev);
5061
5062 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
5063 if (hcon) {
5064 hcon->state = BT_CLOSED;
5065 hci_conn_del(hcon);
5066 }
5067
5068 hci_dev_unlock(hdev);
5069}
5070#endif
5071
5072static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
5073 bdaddr_t *bdaddr, u8 bdaddr_type, u8 role, u16 handle,
5074 u16 interval, u16 latency, u16 supervision_timeout)
5075{
5076 struct hci_conn_params *params;
5077 struct hci_conn *conn;
5078 struct smp_irk *irk;
5079 u8 addr_type;
5080
5081 hci_dev_lock(hdev);
5082
5083 /* All controllers implicitly stop advertising in the event of a
5084 * connection, so ensure that the state bit is cleared.
5085 */
5086 hci_dev_clear_flag(hdev, HCI_LE_ADV);
5087
5088 conn = hci_lookup_le_connect(hdev);
5089 if (!conn) {
5090 conn = hci_conn_add(hdev, LE_LINK, bdaddr, role);
5091 if (!conn) {
5092 bt_dev_err(hdev, "no memory for new connection");
5093 goto unlock;
5094 }
5095
5096 conn->dst_type = bdaddr_type;
5097
5098 /* If we didn't have a hci_conn object previously
5099 * but we're in master role this must be something
5100 * initiated using a white list. Since white list based
5101 * connections are not "first class citizens" we don't
5102 * have full tracking of them. Therefore, we go ahead
5103 * with a "best effort" approach of determining the
5104 * initiator address based on the HCI_PRIVACY flag.
5105 */
5106 if (conn->out) {
5107 conn->resp_addr_type = bdaddr_type;
5108 bacpy(&conn->resp_addr, bdaddr);
5109 if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
5110 conn->init_addr_type = ADDR_LE_DEV_RANDOM;
5111 bacpy(&conn->init_addr, &hdev->rpa);
5112 } else {
5113 hci_copy_identity_address(hdev,
5114 &conn->init_addr,
5115 &conn->init_addr_type);
5116 }
5117 }
5118 } else {
5119 cancel_delayed_work(&conn->le_conn_timeout);
5120 }
5121
5122 if (!conn->out) {
5123 /* Set the responder (our side) address type based on
5124 * the advertising address type.
5125 */
5126 conn->resp_addr_type = hdev->adv_addr_type;
5127 if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM) {
5128 /* In case of ext adv, resp_addr will be updated in
5129 * Adv Terminated event.
5130 */
5131 if (!ext_adv_capable(hdev))
5132 bacpy(&conn->resp_addr, &hdev->random_addr);
5133 } else {
5134 bacpy(&conn->resp_addr, &hdev->bdaddr);
5135 }
5136
5137 conn->init_addr_type = bdaddr_type;
5138 bacpy(&conn->init_addr, bdaddr);
5139
5140 /* For incoming connections, set the default minimum
5141 * and maximum connection interval. They will be used
5142 * to check if the parameters are in range and if not
5143 * trigger the connection update procedure.
5144 */
5145 conn->le_conn_min_interval = hdev->le_conn_min_interval;
5146 conn->le_conn_max_interval = hdev->le_conn_max_interval;
5147 }
5148
5149 /* Lookup the identity address from the stored connection
5150 * address and address type.
5151 *
5152 * When establishing connections to an identity address, the
5153 * connection procedure will store the resolvable random
5154 * address first. Now if it can be converted back into the
5155 * identity address, start using the identity address from
5156 * now on.
5157 */
5158 irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
5159 if (irk) {
5160 bacpy(&conn->dst, &irk->bdaddr);
5161 conn->dst_type = irk->addr_type;
5162 }
5163
5164 if (status) {
5165 hci_le_conn_failed(conn, status);
5166 goto unlock;
5167 }
5168
5169 if (conn->dst_type == ADDR_LE_DEV_PUBLIC)
5170 addr_type = BDADDR_LE_PUBLIC;
5171 else
5172 addr_type = BDADDR_LE_RANDOM;
5173
5174 /* Drop the connection if the device is blocked */
5175 if (hci_bdaddr_list_lookup(&hdev->blacklist, &conn->dst, addr_type)) {
5176 hci_conn_drop(conn);
5177 goto unlock;
5178 }
5179
5180 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
5181 mgmt_device_connected(hdev, conn, 0, NULL, 0);
5182
5183 conn->sec_level = BT_SECURITY_LOW;
5184 conn->handle = handle;
5185 conn->state = BT_CONFIG;
5186
5187 conn->le_conn_interval = interval;
5188 conn->le_conn_latency = latency;
5189 conn->le_supv_timeout = supervision_timeout;
5190
5191 hci_debugfs_create_conn(conn);
5192 hci_conn_add_sysfs(conn);
5193
5194 /* The remote features procedure is defined for master
5195 * role only. So only in case of an initiated connection
5196 * request the remote features.
5197 *
5198 * If the local controller supports slave-initiated features
5199 * exchange, then requesting the remote features in slave
5200 * role is possible. Otherwise just transition into the
5201 * connected state without requesting the remote features.
5202 */
5203 if (conn->out ||
5204 (hdev->le_features[0] & HCI_LE_SLAVE_FEATURES)) {
5205 struct hci_cp_le_read_remote_features cp;
5206
5207 cp.handle = __cpu_to_le16(conn->handle);
5208
5209 hci_send_cmd(hdev, HCI_OP_LE_READ_REMOTE_FEATURES,
5210 sizeof(cp), &cp);
5211
5212 hci_conn_hold(conn);
5213 } else {
5214 conn->state = BT_CONNECTED;
5215 hci_connect_cfm(conn, status);
5216 }
5217
5218 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
5219 conn->dst_type);
5220 if (params) {
5221 list_del_init(¶ms->action);
5222 if (params->conn) {
5223 hci_conn_drop(params->conn);
5224 hci_conn_put(params->conn);
5225 params->conn = NULL;
5226 }
5227 }
5228
5229unlock:
5230 hci_update_background_scan(hdev);
5231 hci_dev_unlock(hdev);
5232}
5233
5234static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
5235{
5236 struct hci_ev_le_conn_complete *ev = (void *) skb->data;
5237
5238 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5239
5240 le_conn_complete_evt(hdev, ev->status, &ev->bdaddr, ev->bdaddr_type,
5241 ev->role, le16_to_cpu(ev->handle),
5242 le16_to_cpu(ev->interval),
5243 le16_to_cpu(ev->latency),
5244 le16_to_cpu(ev->supervision_timeout));
5245}
5246
5247static void hci_le_enh_conn_complete_evt(struct hci_dev *hdev,
5248 struct sk_buff *skb)
5249{
5250 struct hci_ev_le_enh_conn_complete *ev = (void *) skb->data;
5251
5252 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5253
5254 le_conn_complete_evt(hdev, ev->status, &ev->bdaddr, ev->bdaddr_type,
5255 ev->role, le16_to_cpu(ev->handle),
5256 le16_to_cpu(ev->interval),
5257 le16_to_cpu(ev->latency),
5258 le16_to_cpu(ev->supervision_timeout));
5259
5260 if (use_ll_privacy(hdev) &&
5261 hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
5262 hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
5263 hci_req_disable_address_resolution(hdev);
5264}
5265
5266static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb)
5267{
5268 struct hci_evt_le_ext_adv_set_term *ev = (void *) skb->data;
5269 struct hci_conn *conn;
5270
5271 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5272
5273 if (ev->status)
5274 return;
5275
5276 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->conn_handle));
5277 if (conn) {
5278 struct adv_info *adv_instance;
5279
5280 if (hdev->adv_addr_type != ADDR_LE_DEV_RANDOM)
5281 return;
5282
5283 if (!hdev->cur_adv_instance) {
5284 bacpy(&conn->resp_addr, &hdev->random_addr);
5285 return;
5286 }
5287
5288 adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance);
5289 if (adv_instance)
5290 bacpy(&conn->resp_addr, &adv_instance->random_addr);
5291 }
5292}
5293
5294static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
5295 struct sk_buff *skb)
5296{
5297 struct hci_ev_le_conn_update_complete *ev = (void *) skb->data;
5298 struct hci_conn *conn;
5299
5300 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5301
5302 if (ev->status)
5303 return;
5304
5305 hci_dev_lock(hdev);
5306
5307 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5308 if (conn) {
5309 conn->le_conn_interval = le16_to_cpu(ev->interval);
5310 conn->le_conn_latency = le16_to_cpu(ev->latency);
5311 conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
5312 }
5313
5314 hci_dev_unlock(hdev);
5315}
5316
5317/* This function requires the caller holds hdev->lock */
5318static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
5319 bdaddr_t *addr,
5320 u8 addr_type, u8 adv_type,
5321 bdaddr_t *direct_rpa)
5322{
5323 struct hci_conn *conn;
5324 struct hci_conn_params *params;
5325
5326 /* If the event is not connectable don't proceed further */
5327 if (adv_type != LE_ADV_IND && adv_type != LE_ADV_DIRECT_IND)
5328 return NULL;
5329
5330 /* Ignore if the device is blocked */
5331 if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
5332 return NULL;
5333
5334 /* Most controller will fail if we try to create new connections
5335 * while we have an existing one in slave role.
5336 */
5337 if (hdev->conn_hash.le_num_slave > 0 &&
5338 (!test_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks) ||
5339 !(hdev->le_states[3] & 0x10)))
5340 return NULL;
5341
5342 /* If we're not connectable only connect devices that we have in
5343 * our pend_le_conns list.
5344 */
5345 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, addr,
5346 addr_type);
5347 if (!params)
5348 return NULL;
5349
5350 if (!params->explicit_connect) {
5351 switch (params->auto_connect) {
5352 case HCI_AUTO_CONN_DIRECT:
5353 /* Only devices advertising with ADV_DIRECT_IND are
5354 * triggering a connection attempt. This is allowing
5355 * incoming connections from slave devices.
5356 */
5357 if (adv_type != LE_ADV_DIRECT_IND)
5358 return NULL;
5359 break;
5360 case HCI_AUTO_CONN_ALWAYS:
5361 /* Devices advertising with ADV_IND or ADV_DIRECT_IND
5362 * are triggering a connection attempt. This means
5363 * that incoming connections from slave device are
5364 * accepted and also outgoing connections to slave
5365 * devices are established when found.
5366 */
5367 break;
5368 default:
5369 return NULL;
5370 }
5371 }
5372
5373 conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
5374 hdev->def_le_autoconnect_timeout, HCI_ROLE_MASTER,
5375 direct_rpa);
5376 if (!IS_ERR(conn)) {
5377 /* If HCI_AUTO_CONN_EXPLICIT is set, conn is already owned
5378 * by higher layer that tried to connect, if no then
5379 * store the pointer since we don't really have any
5380 * other owner of the object besides the params that
5381 * triggered it. This way we can abort the connection if
5382 * the parameters get removed and keep the reference
5383 * count consistent once the connection is established.
5384 */
5385
5386 if (!params->explicit_connect)
5387 params->conn = hci_conn_get(conn);
5388
5389 return conn;
5390 }
5391
5392 switch (PTR_ERR(conn)) {
5393 case -EBUSY:
5394 /* If hci_connect() returns -EBUSY it means there is already
5395 * an LE connection attempt going on. Since controllers don't
5396 * support more than one connection attempt at the time, we
5397 * don't consider this an error case.
5398 */
5399 break;
5400 default:
5401 BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
5402 return NULL;
5403 }
5404
5405 return NULL;
5406}
5407
5408static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
5409 u8 bdaddr_type, bdaddr_t *direct_addr,
5410 u8 direct_addr_type, s8 rssi, u8 *data, u8 len,
5411 bool ext_adv)
5412{
5413 struct discovery_state *d = &hdev->discovery;
5414 struct smp_irk *irk;
5415 struct hci_conn *conn;
5416 bool match;
5417 u32 flags;
5418 u8 *ptr, real_len;
5419
5420 switch (type) {
5421 case LE_ADV_IND:
5422 case LE_ADV_DIRECT_IND:
5423 case LE_ADV_SCAN_IND:
5424 case LE_ADV_NONCONN_IND:
5425 case LE_ADV_SCAN_RSP:
5426 break;
5427 default:
5428 bt_dev_err_ratelimited(hdev, "unknown advertising packet "
5429 "type: 0x%02x", type);
5430 return;
5431 }
5432
5433 if (!ext_adv && len > HCI_MAX_AD_LENGTH) {
5434 bt_dev_err_ratelimited(hdev, "legacy adv larger than 31 bytes");
5435 return;
5436 }
5437
5438 /* Find the end of the data in case the report contains padded zero
5439 * bytes at the end causing an invalid length value.
5440 *
5441 * When data is NULL, len is 0 so there is no need for extra ptr
5442 * check as 'ptr < data + 0' is already false in such case.
5443 */
5444 for (ptr = data; ptr < data + len && *ptr; ptr += *ptr + 1) {
5445 if (ptr + 1 + *ptr > data + len)
5446 break;
5447 }
5448
5449 real_len = ptr - data;
5450
5451 /* Adjust for actual length */
5452 if (len != real_len) {
5453 bt_dev_err_ratelimited(hdev, "advertising data len corrected %u -> %u",
5454 len, real_len);
5455 len = real_len;
5456 }
5457
5458 /* If the direct address is present, then this report is from
5459 * a LE Direct Advertising Report event. In that case it is
5460 * important to see if the address is matching the local
5461 * controller address.
5462 */
5463 if (direct_addr) {
5464 /* Only resolvable random addresses are valid for these
5465 * kind of reports and others can be ignored.
5466 */
5467 if (!hci_bdaddr_is_rpa(direct_addr, direct_addr_type))
5468 return;
5469
5470 /* If the controller is not using resolvable random
5471 * addresses, then this report can be ignored.
5472 */
5473 if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
5474 return;
5475
5476 /* If the local IRK of the controller does not match
5477 * with the resolvable random address provided, then
5478 * this report can be ignored.
5479 */
5480 if (!smp_irk_matches(hdev, hdev->irk, direct_addr))
5481 return;
5482 }
5483
5484 /* Check if we need to convert to identity address */
5485 irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
5486 if (irk) {
5487 bdaddr = &irk->bdaddr;
5488 bdaddr_type = irk->addr_type;
5489 }
5490
5491 /* Check if we have been requested to connect to this device.
5492 *
5493 * direct_addr is set only for directed advertising reports (it is NULL
5494 * for advertising reports) and is already verified to be RPA above.
5495 */
5496 conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, type,
5497 direct_addr);
5498 if (!ext_adv && conn && type == LE_ADV_IND && len <= HCI_MAX_AD_LENGTH) {
5499 /* Store report for later inclusion by
5500 * mgmt_device_connected
5501 */
5502 memcpy(conn->le_adv_data, data, len);
5503 conn->le_adv_data_len = len;
5504 }
5505
5506 /* Passive scanning shouldn't trigger any device found events,
5507 * except for devices marked as CONN_REPORT for which we do send
5508 * device found events, or advertisement monitoring requested.
5509 */
5510 if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
5511 if (type == LE_ADV_DIRECT_IND)
5512 return;
5513
5514 if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
5515 bdaddr, bdaddr_type) &&
5516 idr_is_empty(&hdev->adv_monitors_idr))
5517 return;
5518
5519 if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND)
5520 flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
5521 else
5522 flags = 0;
5523 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5524 rssi, flags, data, len, NULL, 0);
5525 return;
5526 }
5527
5528 /* When receiving non-connectable or scannable undirected
5529 * advertising reports, this means that the remote device is
5530 * not connectable and then clearly indicate this in the
5531 * device found event.
5532 *
5533 * When receiving a scan response, then there is no way to
5534 * know if the remote device is connectable or not. However
5535 * since scan responses are merged with a previously seen
5536 * advertising report, the flags field from that report
5537 * will be used.
5538 *
5539 * In the really unlikely case that a controller get confused
5540 * and just sends a scan response event, then it is marked as
5541 * not connectable as well.
5542 */
5543 if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND ||
5544 type == LE_ADV_SCAN_RSP)
5545 flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
5546 else
5547 flags = 0;
5548
5549 /* If there's nothing pending either store the data from this
5550 * event or send an immediate device found event if the data
5551 * should not be stored for later.
5552 */
5553 if (!ext_adv && !has_pending_adv_report(hdev)) {
5554 /* If the report will trigger a SCAN_REQ store it for
5555 * later merging.
5556 */
5557 if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
5558 store_pending_adv_report(hdev, bdaddr, bdaddr_type,
5559 rssi, flags, data, len);
5560 return;
5561 }
5562
5563 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5564 rssi, flags, data, len, NULL, 0);
5565 return;
5566 }
5567
5568 /* Check if the pending report is for the same device as the new one */
5569 match = (!bacmp(bdaddr, &d->last_adv_addr) &&
5570 bdaddr_type == d->last_adv_addr_type);
5571
5572 /* If the pending data doesn't match this report or this isn't a
5573 * scan response (e.g. we got a duplicate ADV_IND) then force
5574 * sending of the pending data.
5575 */
5576 if (type != LE_ADV_SCAN_RSP || !match) {
5577 /* Send out whatever is in the cache, but skip duplicates */
5578 if (!match)
5579 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
5580 d->last_adv_addr_type, NULL,
5581 d->last_adv_rssi, d->last_adv_flags,
5582 d->last_adv_data,
5583 d->last_adv_data_len, NULL, 0);
5584
5585 /* If the new report will trigger a SCAN_REQ store it for
5586 * later merging.
5587 */
5588 if (!ext_adv && (type == LE_ADV_IND ||
5589 type == LE_ADV_SCAN_IND)) {
5590 store_pending_adv_report(hdev, bdaddr, bdaddr_type,
5591 rssi, flags, data, len);
5592 return;
5593 }
5594
5595 /* The advertising reports cannot be merged, so clear
5596 * the pending report and send out a device found event.
5597 */
5598 clear_pending_adv_report(hdev);
5599 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5600 rssi, flags, data, len, NULL, 0);
5601 return;
5602 }
5603
5604 /* If we get here we've got a pending ADV_IND or ADV_SCAN_IND and
5605 * the new event is a SCAN_RSP. We can therefore proceed with
5606 * sending a merged device found event.
5607 */
5608 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
5609 d->last_adv_addr_type, NULL, rssi, d->last_adv_flags,
5610 d->last_adv_data, d->last_adv_data_len, data, len);
5611 clear_pending_adv_report(hdev);
5612}
5613
5614static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
5615{
5616 u8 num_reports = skb->data[0];
5617 void *ptr = &skb->data[1];
5618
5619 hci_dev_lock(hdev);
5620
5621 while (num_reports--) {
5622 struct hci_ev_le_advertising_info *ev = ptr;
5623 s8 rssi;
5624
5625 if (ev->length <= HCI_MAX_AD_LENGTH) {
5626 rssi = ev->data[ev->length];
5627 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5628 ev->bdaddr_type, NULL, 0, rssi,
5629 ev->data, ev->length, false);
5630 } else {
5631 bt_dev_err(hdev, "Dropping invalid advertising data");
5632 }
5633
5634 ptr += sizeof(*ev) + ev->length + 1;
5635 }
5636
5637 hci_dev_unlock(hdev);
5638}
5639
5640static u8 ext_evt_type_to_legacy(struct hci_dev *hdev, u16 evt_type)
5641{
5642 if (evt_type & LE_EXT_ADV_LEGACY_PDU) {
5643 switch (evt_type) {
5644 case LE_LEGACY_ADV_IND:
5645 return LE_ADV_IND;
5646 case LE_LEGACY_ADV_DIRECT_IND:
5647 return LE_ADV_DIRECT_IND;
5648 case LE_LEGACY_ADV_SCAN_IND:
5649 return LE_ADV_SCAN_IND;
5650 case LE_LEGACY_NONCONN_IND:
5651 return LE_ADV_NONCONN_IND;
5652 case LE_LEGACY_SCAN_RSP_ADV:
5653 case LE_LEGACY_SCAN_RSP_ADV_SCAN:
5654 return LE_ADV_SCAN_RSP;
5655 }
5656
5657 goto invalid;
5658 }
5659
5660 if (evt_type & LE_EXT_ADV_CONN_IND) {
5661 if (evt_type & LE_EXT_ADV_DIRECT_IND)
5662 return LE_ADV_DIRECT_IND;
5663
5664 return LE_ADV_IND;
5665 }
5666
5667 if (evt_type & LE_EXT_ADV_SCAN_RSP)
5668 return LE_ADV_SCAN_RSP;
5669
5670 if (evt_type & LE_EXT_ADV_SCAN_IND)
5671 return LE_ADV_SCAN_IND;
5672
5673 if (evt_type == LE_EXT_ADV_NON_CONN_IND ||
5674 evt_type & LE_EXT_ADV_DIRECT_IND)
5675 return LE_ADV_NONCONN_IND;
5676
5677invalid:
5678 bt_dev_err_ratelimited(hdev, "Unknown advertising packet type: 0x%02x",
5679 evt_type);
5680
5681 return LE_ADV_INVALID;
5682}
5683
5684static void hci_le_ext_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
5685{
5686 u8 num_reports = skb->data[0];
5687 void *ptr = &skb->data[1];
5688
5689 hci_dev_lock(hdev);
5690
5691 while (num_reports--) {
5692 struct hci_ev_le_ext_adv_report *ev = ptr;
5693 u8 legacy_evt_type;
5694 u16 evt_type;
5695
5696 evt_type = __le16_to_cpu(ev->evt_type);
5697 legacy_evt_type = ext_evt_type_to_legacy(hdev, evt_type);
5698 if (legacy_evt_type != LE_ADV_INVALID) {
5699 process_adv_report(hdev, legacy_evt_type, &ev->bdaddr,
5700 ev->bdaddr_type, NULL, 0, ev->rssi,
5701 ev->data, ev->length,
5702 !(evt_type & LE_EXT_ADV_LEGACY_PDU));
5703 }
5704
5705 ptr += sizeof(*ev) + ev->length;
5706 }
5707
5708 hci_dev_unlock(hdev);
5709}
5710
5711static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev,
5712 struct sk_buff *skb)
5713{
5714 struct hci_ev_le_remote_feat_complete *ev = (void *)skb->data;
5715 struct hci_conn *conn;
5716
5717 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5718
5719 hci_dev_lock(hdev);
5720
5721 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5722 if (conn) {
5723 if (!ev->status)
5724 memcpy(conn->features[0], ev->features, 8);
5725
5726 if (conn->state == BT_CONFIG) {
5727 __u8 status;
5728
5729 /* If the local controller supports slave-initiated
5730 * features exchange, but the remote controller does
5731 * not, then it is possible that the error code 0x1a
5732 * for unsupported remote feature gets returned.
5733 *
5734 * In this specific case, allow the connection to
5735 * transition into connected state and mark it as
5736 * successful.
5737 */
5738 if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) &&
5739 !conn->out && ev->status == 0x1a)
5740 status = 0x00;
5741 else
5742 status = ev->status;
5743
5744 conn->state = BT_CONNECTED;
5745 hci_connect_cfm(conn, status);
5746 hci_conn_drop(conn);
5747 }
5748 }
5749
5750 hci_dev_unlock(hdev);
5751}
5752
5753static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
5754{
5755 struct hci_ev_le_ltk_req *ev = (void *) skb->data;
5756 struct hci_cp_le_ltk_reply cp;
5757 struct hci_cp_le_ltk_neg_reply neg;
5758 struct hci_conn *conn;
5759 struct smp_ltk *ltk;
5760
5761 BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
5762
5763 hci_dev_lock(hdev);
5764
5765 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5766 if (conn == NULL)
5767 goto not_found;
5768
5769 ltk = hci_find_ltk(hdev, &conn->dst, conn->dst_type, conn->role);
5770 if (!ltk)
5771 goto not_found;
5772
5773 if (smp_ltk_is_sc(ltk)) {
5774 /* With SC both EDiv and Rand are set to zero */
5775 if (ev->ediv || ev->rand)
5776 goto not_found;
5777 } else {
5778 /* For non-SC keys check that EDiv and Rand match */
5779 if (ev->ediv != ltk->ediv || ev->rand != ltk->rand)
5780 goto not_found;
5781 }
5782
5783 memcpy(cp.ltk, ltk->val, ltk->enc_size);
5784 memset(cp.ltk + ltk->enc_size, 0, sizeof(cp.ltk) - ltk->enc_size);
5785 cp.handle = cpu_to_le16(conn->handle);
5786
5787 conn->pending_sec_level = smp_ltk_sec_level(ltk);
5788
5789 conn->enc_key_size = ltk->enc_size;
5790
5791 hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
5792
5793 /* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
5794 * temporary key used to encrypt a connection following
5795 * pairing. It is used during the Encrypted Session Setup to
5796 * distribute the keys. Later, security can be re-established
5797 * using a distributed LTK.
5798 */
5799 if (ltk->type == SMP_STK) {
5800 set_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5801 list_del_rcu(<k->list);
5802 kfree_rcu(ltk, rcu);
5803 } else {
5804 clear_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5805 }
5806
5807 hci_dev_unlock(hdev);
5808
5809 return;
5810
5811not_found:
5812 neg.handle = ev->handle;
5813 hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
5814 hci_dev_unlock(hdev);
5815}
5816
5817static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
5818 u8 reason)
5819{
5820 struct hci_cp_le_conn_param_req_neg_reply cp;
5821
5822 cp.handle = cpu_to_le16(handle);
5823 cp.reason = reason;
5824
5825 hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
5826 &cp);
5827}
5828
5829static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
5830 struct sk_buff *skb)
5831{
5832 struct hci_ev_le_remote_conn_param_req *ev = (void *) skb->data;
5833 struct hci_cp_le_conn_param_req_reply cp;
5834 struct hci_conn *hcon;
5835 u16 handle, min, max, latency, timeout;
5836
5837 handle = le16_to_cpu(ev->handle);
5838 min = le16_to_cpu(ev->interval_min);
5839 max = le16_to_cpu(ev->interval_max);
5840 latency = le16_to_cpu(ev->latency);
5841 timeout = le16_to_cpu(ev->timeout);
5842
5843 hcon = hci_conn_hash_lookup_handle(hdev, handle);
5844 if (!hcon || hcon->state != BT_CONNECTED)
5845 return send_conn_param_neg_reply(hdev, handle,
5846 HCI_ERROR_UNKNOWN_CONN_ID);
5847
5848 if (hci_check_conn_params(min, max, latency, timeout))
5849 return send_conn_param_neg_reply(hdev, handle,
5850 HCI_ERROR_INVALID_LL_PARAMS);
5851
5852 if (hcon->role == HCI_ROLE_MASTER) {
5853 struct hci_conn_params *params;
5854 u8 store_hint;
5855
5856 hci_dev_lock(hdev);
5857
5858 params = hci_conn_params_lookup(hdev, &hcon->dst,
5859 hcon->dst_type);
5860 if (params) {
5861 params->conn_min_interval = min;
5862 params->conn_max_interval = max;
5863 params->conn_latency = latency;
5864 params->supervision_timeout = timeout;
5865 store_hint = 0x01;
5866 } else{
5867 store_hint = 0x00;
5868 }
5869
5870 hci_dev_unlock(hdev);
5871
5872 mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
5873 store_hint, min, max, latency, timeout);
5874 }
5875
5876 cp.handle = ev->handle;
5877 cp.interval_min = ev->interval_min;
5878 cp.interval_max = ev->interval_max;
5879 cp.latency = ev->latency;
5880 cp.timeout = ev->timeout;
5881 cp.min_ce_len = 0;
5882 cp.max_ce_len = 0;
5883
5884 hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
5885}
5886
5887static void hci_le_direct_adv_report_evt(struct hci_dev *hdev,
5888 struct sk_buff *skb)
5889{
5890 u8 num_reports = skb->data[0];
5891 struct hci_ev_le_direct_adv_info *ev = (void *)&skb->data[1];
5892
5893 if (!num_reports || skb->len < num_reports * sizeof(*ev) + 1)
5894 return;
5895
5896 hci_dev_lock(hdev);
5897
5898 for (; num_reports; num_reports--, ev++)
5899 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5900 ev->bdaddr_type, &ev->direct_addr,
5901 ev->direct_addr_type, ev->rssi, NULL, 0,
5902 false);
5903
5904 hci_dev_unlock(hdev);
5905}
5906
5907static void hci_le_phy_update_evt(struct hci_dev *hdev, struct sk_buff *skb)
5908{
5909 struct hci_ev_le_phy_update_complete *ev = (void *) skb->data;
5910 struct hci_conn *conn;
5911
5912 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5913
5914 if (!ev->status)
5915 return;
5916
5917 hci_dev_lock(hdev);
5918
5919 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5920 if (!conn)
5921 goto unlock;
5922
5923 conn->le_tx_phy = ev->tx_phy;
5924 conn->le_rx_phy = ev->rx_phy;
5925
5926unlock:
5927 hci_dev_unlock(hdev);
5928}
5929
5930static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
5931{
5932 struct hci_ev_le_meta *le_ev = (void *) skb->data;
5933
5934 skb_pull(skb, sizeof(*le_ev));
5935
5936 switch (le_ev->subevent) {
5937 case HCI_EV_LE_CONN_COMPLETE:
5938 hci_le_conn_complete_evt(hdev, skb);
5939 break;
5940
5941 case HCI_EV_LE_CONN_UPDATE_COMPLETE:
5942 hci_le_conn_update_complete_evt(hdev, skb);
5943 break;
5944
5945 case HCI_EV_LE_ADVERTISING_REPORT:
5946 hci_le_adv_report_evt(hdev, skb);
5947 break;
5948
5949 case HCI_EV_LE_REMOTE_FEAT_COMPLETE:
5950 hci_le_remote_feat_complete_evt(hdev, skb);
5951 break;
5952
5953 case HCI_EV_LE_LTK_REQ:
5954 hci_le_ltk_request_evt(hdev, skb);
5955 break;
5956
5957 case HCI_EV_LE_REMOTE_CONN_PARAM_REQ:
5958 hci_le_remote_conn_param_req_evt(hdev, skb);
5959 break;
5960
5961 case HCI_EV_LE_DIRECT_ADV_REPORT:
5962 hci_le_direct_adv_report_evt(hdev, skb);
5963 break;
5964
5965 case HCI_EV_LE_PHY_UPDATE_COMPLETE:
5966 hci_le_phy_update_evt(hdev, skb);
5967 break;
5968
5969 case HCI_EV_LE_EXT_ADV_REPORT:
5970 hci_le_ext_adv_report_evt(hdev, skb);
5971 break;
5972
5973 case HCI_EV_LE_ENHANCED_CONN_COMPLETE:
5974 hci_le_enh_conn_complete_evt(hdev, skb);
5975 break;
5976
5977 case HCI_EV_LE_EXT_ADV_SET_TERM:
5978 hci_le_ext_adv_term_evt(hdev, skb);
5979 break;
5980
5981 default:
5982 break;
5983 }
5984}
5985
5986static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
5987 u8 event, struct sk_buff *skb)
5988{
5989 struct hci_ev_cmd_complete *ev;
5990 struct hci_event_hdr *hdr;
5991
5992 if (!skb)
5993 return false;
5994
5995 if (skb->len < sizeof(*hdr)) {
5996 bt_dev_err(hdev, "too short HCI event");
5997 return false;
5998 }
5999
6000 hdr = (void *) skb->data;
6001 skb_pull(skb, HCI_EVENT_HDR_SIZE);
6002
6003 if (event) {
6004 if (hdr->evt != event)
6005 return false;
6006 return true;
6007 }
6008
6009 /* Check if request ended in Command Status - no way to retreive
6010 * any extra parameters in this case.
6011 */
6012 if (hdr->evt == HCI_EV_CMD_STATUS)
6013 return false;
6014
6015 if (hdr->evt != HCI_EV_CMD_COMPLETE) {
6016 bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)",
6017 hdr->evt);
6018 return false;
6019 }
6020
6021 if (skb->len < sizeof(*ev)) {
6022 bt_dev_err(hdev, "too short cmd_complete event");
6023 return false;
6024 }
6025
6026 ev = (void *) skb->data;
6027 skb_pull(skb, sizeof(*ev));
6028
6029 if (opcode != __le16_to_cpu(ev->opcode)) {
6030 BT_DBG("opcode doesn't match (0x%2.2x != 0x%2.2x)", opcode,
6031 __le16_to_cpu(ev->opcode));
6032 return false;
6033 }
6034
6035 return true;
6036}
6037
6038static void hci_store_wake_reason(struct hci_dev *hdev, u8 event,
6039 struct sk_buff *skb)
6040{
6041 struct hci_ev_le_advertising_info *adv;
6042 struct hci_ev_le_direct_adv_info *direct_adv;
6043 struct hci_ev_le_ext_adv_report *ext_adv;
6044 const struct hci_ev_conn_complete *conn_complete = (void *)skb->data;
6045 const struct hci_ev_conn_request *conn_request = (void *)skb->data;
6046
6047 hci_dev_lock(hdev);
6048
6049 /* If we are currently suspended and this is the first BT event seen,
6050 * save the wake reason associated with the event.
6051 */
6052 if (!hdev->suspended || hdev->wake_reason)
6053 goto unlock;
6054
6055 /* Default to remote wake. Values for wake_reason are documented in the
6056 * Bluez mgmt api docs.
6057 */
6058 hdev->wake_reason = MGMT_WAKE_REASON_REMOTE_WAKE;
6059
6060 /* Once configured for remote wakeup, we should only wake up for
6061 * reconnections. It's useful to see which device is waking us up so
6062 * keep track of the bdaddr of the connection event that woke us up.
6063 */
6064 if (event == HCI_EV_CONN_REQUEST) {
6065 bacpy(&hdev->wake_addr, &conn_complete->bdaddr);
6066 hdev->wake_addr_type = BDADDR_BREDR;
6067 } else if (event == HCI_EV_CONN_COMPLETE) {
6068 bacpy(&hdev->wake_addr, &conn_request->bdaddr);
6069 hdev->wake_addr_type = BDADDR_BREDR;
6070 } else if (event == HCI_EV_LE_META) {
6071 struct hci_ev_le_meta *le_ev = (void *)skb->data;
6072 u8 subevent = le_ev->subevent;
6073 u8 *ptr = &skb->data[sizeof(*le_ev)];
6074 u8 num_reports = *ptr;
6075
6076 if ((subevent == HCI_EV_LE_ADVERTISING_REPORT ||
6077 subevent == HCI_EV_LE_DIRECT_ADV_REPORT ||
6078 subevent == HCI_EV_LE_EXT_ADV_REPORT) &&
6079 num_reports) {
6080 adv = (void *)(ptr + 1);
6081 direct_adv = (void *)(ptr + 1);
6082 ext_adv = (void *)(ptr + 1);
6083
6084 switch (subevent) {
6085 case HCI_EV_LE_ADVERTISING_REPORT:
6086 bacpy(&hdev->wake_addr, &adv->bdaddr);
6087 hdev->wake_addr_type = adv->bdaddr_type;
6088 break;
6089 case HCI_EV_LE_DIRECT_ADV_REPORT:
6090 bacpy(&hdev->wake_addr, &direct_adv->bdaddr);
6091 hdev->wake_addr_type = direct_adv->bdaddr_type;
6092 break;
6093 case HCI_EV_LE_EXT_ADV_REPORT:
6094 bacpy(&hdev->wake_addr, &ext_adv->bdaddr);
6095 hdev->wake_addr_type = ext_adv->bdaddr_type;
6096 break;
6097 }
6098 }
6099 } else {
6100 hdev->wake_reason = MGMT_WAKE_REASON_UNEXPECTED;
6101 }
6102
6103unlock:
6104 hci_dev_unlock(hdev);
6105}
6106
6107void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
6108{
6109 struct hci_event_hdr *hdr = (void *) skb->data;
6110 hci_req_complete_t req_complete = NULL;
6111 hci_req_complete_skb_t req_complete_skb = NULL;
6112 struct sk_buff *orig_skb = NULL;
6113 u8 status = 0, event = hdr->evt, req_evt = 0;
6114 u16 opcode = HCI_OP_NOP;
6115
6116 if (!event) {
6117 bt_dev_warn(hdev, "Received unexpected HCI Event 00000000");
6118 goto done;
6119 }
6120
6121 if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->hci.req_event == event) {
6122 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
6123 opcode = __le16_to_cpu(cmd_hdr->opcode);
6124 hci_req_cmd_complete(hdev, opcode, status, &req_complete,
6125 &req_complete_skb);
6126 req_evt = event;
6127 }
6128
6129 /* If it looks like we might end up having to call
6130 * req_complete_skb, store a pristine copy of the skb since the
6131 * various handlers may modify the original one through
6132 * skb_pull() calls, etc.
6133 */
6134 if (req_complete_skb || event == HCI_EV_CMD_STATUS ||
6135 event == HCI_EV_CMD_COMPLETE)
6136 orig_skb = skb_clone(skb, GFP_KERNEL);
6137
6138 skb_pull(skb, HCI_EVENT_HDR_SIZE);
6139
6140 /* Store wake reason if we're suspended */
6141 hci_store_wake_reason(hdev, event, skb);
6142
6143 switch (event) {
6144 case HCI_EV_INQUIRY_COMPLETE:
6145 hci_inquiry_complete_evt(hdev, skb);
6146 break;
6147
6148 case HCI_EV_INQUIRY_RESULT:
6149 hci_inquiry_result_evt(hdev, skb);
6150 break;
6151
6152 case HCI_EV_CONN_COMPLETE:
6153 hci_conn_complete_evt(hdev, skb);
6154 break;
6155
6156 case HCI_EV_CONN_REQUEST:
6157 hci_conn_request_evt(hdev, skb);
6158 break;
6159
6160 case HCI_EV_DISCONN_COMPLETE:
6161 hci_disconn_complete_evt(hdev, skb);
6162 break;
6163
6164 case HCI_EV_AUTH_COMPLETE:
6165 hci_auth_complete_evt(hdev, skb);
6166 break;
6167
6168 case HCI_EV_REMOTE_NAME:
6169 hci_remote_name_evt(hdev, skb);
6170 break;
6171
6172 case HCI_EV_ENCRYPT_CHANGE:
6173 hci_encrypt_change_evt(hdev, skb);
6174 break;
6175
6176 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
6177 hci_change_link_key_complete_evt(hdev, skb);
6178 break;
6179
6180 case HCI_EV_REMOTE_FEATURES:
6181 hci_remote_features_evt(hdev, skb);
6182 break;
6183
6184 case HCI_EV_CMD_COMPLETE:
6185 hci_cmd_complete_evt(hdev, skb, &opcode, &status,
6186 &req_complete, &req_complete_skb);
6187 break;
6188
6189 case HCI_EV_CMD_STATUS:
6190 hci_cmd_status_evt(hdev, skb, &opcode, &status, &req_complete,
6191 &req_complete_skb);
6192 break;
6193
6194 case HCI_EV_HARDWARE_ERROR:
6195 hci_hardware_error_evt(hdev, skb);
6196 break;
6197
6198 case HCI_EV_ROLE_CHANGE:
6199 hci_role_change_evt(hdev, skb);
6200 break;
6201
6202 case HCI_EV_NUM_COMP_PKTS:
6203 hci_num_comp_pkts_evt(hdev, skb);
6204 break;
6205
6206 case HCI_EV_MODE_CHANGE:
6207 hci_mode_change_evt(hdev, skb);
6208 break;
6209
6210 case HCI_EV_PIN_CODE_REQ:
6211 hci_pin_code_request_evt(hdev, skb);
6212 break;
6213
6214 case HCI_EV_LINK_KEY_REQ:
6215 hci_link_key_request_evt(hdev, skb);
6216 break;
6217
6218 case HCI_EV_LINK_KEY_NOTIFY:
6219 hci_link_key_notify_evt(hdev, skb);
6220 break;
6221
6222 case HCI_EV_CLOCK_OFFSET:
6223 hci_clock_offset_evt(hdev, skb);
6224 break;
6225
6226 case HCI_EV_PKT_TYPE_CHANGE:
6227 hci_pkt_type_change_evt(hdev, skb);
6228 break;
6229
6230 case HCI_EV_PSCAN_REP_MODE:
6231 hci_pscan_rep_mode_evt(hdev, skb);
6232 break;
6233
6234 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
6235 hci_inquiry_result_with_rssi_evt(hdev, skb);
6236 break;
6237
6238 case HCI_EV_REMOTE_EXT_FEATURES:
6239 hci_remote_ext_features_evt(hdev, skb);
6240 break;
6241
6242 case HCI_EV_SYNC_CONN_COMPLETE:
6243 hci_sync_conn_complete_evt(hdev, skb);
6244 break;
6245
6246 case HCI_EV_EXTENDED_INQUIRY_RESULT:
6247 hci_extended_inquiry_result_evt(hdev, skb);
6248 break;
6249
6250 case HCI_EV_KEY_REFRESH_COMPLETE:
6251 hci_key_refresh_complete_evt(hdev, skb);
6252 break;
6253
6254 case HCI_EV_IO_CAPA_REQUEST:
6255 hci_io_capa_request_evt(hdev, skb);
6256 break;
6257
6258 case HCI_EV_IO_CAPA_REPLY:
6259 hci_io_capa_reply_evt(hdev, skb);
6260 break;
6261
6262 case HCI_EV_USER_CONFIRM_REQUEST:
6263 hci_user_confirm_request_evt(hdev, skb);
6264 break;
6265
6266 case HCI_EV_USER_PASSKEY_REQUEST:
6267 hci_user_passkey_request_evt(hdev, skb);
6268 break;
6269
6270 case HCI_EV_USER_PASSKEY_NOTIFY:
6271 hci_user_passkey_notify_evt(hdev, skb);
6272 break;
6273
6274 case HCI_EV_KEYPRESS_NOTIFY:
6275 hci_keypress_notify_evt(hdev, skb);
6276 break;
6277
6278 case HCI_EV_SIMPLE_PAIR_COMPLETE:
6279 hci_simple_pair_complete_evt(hdev, skb);
6280 break;
6281
6282 case HCI_EV_REMOTE_HOST_FEATURES:
6283 hci_remote_host_features_evt(hdev, skb);
6284 break;
6285
6286 case HCI_EV_LE_META:
6287 hci_le_meta_evt(hdev, skb);
6288 break;
6289
6290 case HCI_EV_REMOTE_OOB_DATA_REQUEST:
6291 hci_remote_oob_data_request_evt(hdev, skb);
6292 break;
6293
6294#if IS_ENABLED(CONFIG_BT_HS)
6295 case HCI_EV_CHANNEL_SELECTED:
6296 hci_chan_selected_evt(hdev, skb);
6297 break;
6298
6299 case HCI_EV_PHY_LINK_COMPLETE:
6300 hci_phy_link_complete_evt(hdev, skb);
6301 break;
6302
6303 case HCI_EV_LOGICAL_LINK_COMPLETE:
6304 hci_loglink_complete_evt(hdev, skb);
6305 break;
6306
6307 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
6308 hci_disconn_loglink_complete_evt(hdev, skb);
6309 break;
6310
6311 case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
6312 hci_disconn_phylink_complete_evt(hdev, skb);
6313 break;
6314#endif
6315
6316 case HCI_EV_NUM_COMP_BLOCKS:
6317 hci_num_comp_blocks_evt(hdev, skb);
6318 break;
6319
6320 case HCI_EV_VENDOR:
6321 msft_vendor_evt(hdev, skb);
6322 break;
6323
6324 default:
6325 BT_DBG("%s event 0x%2.2x", hdev->name, event);
6326 break;
6327 }
6328
6329 if (req_complete) {
6330 req_complete(hdev, status, opcode);
6331 } else if (req_complete_skb) {
6332 if (!hci_get_cmd_complete(hdev, opcode, req_evt, orig_skb)) {
6333 kfree_skb(orig_skb);
6334 orig_skb = NULL;
6335 }
6336 req_complete_skb(hdev, status, opcode, orig_skb);
6337 }
6338
6339done:
6340 kfree_skb(orig_skb);
6341 kfree_skb(skb);
6342 hdev->stat.evt_rx++;
6343}