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