]> asedeno.scripts.mit.edu Git - linux.git/blob - net/bluetooth/hci_sock.c
Linux 5.6-rc7
[linux.git] / net / bluetooth / hci_sock.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI sockets. */
26 #include <linux/compat.h>
27 #include <linux/export.h>
28 #include <linux/utsname.h>
29 #include <linux/sched.h>
30 #include <asm/unaligned.h>
31
32 #include <net/bluetooth/bluetooth.h>
33 #include <net/bluetooth/hci_core.h>
34 #include <net/bluetooth/hci_mon.h>
35 #include <net/bluetooth/mgmt.h>
36
37 #include "mgmt_util.h"
38
39 static LIST_HEAD(mgmt_chan_list);
40 static DEFINE_MUTEX(mgmt_chan_list_lock);
41
42 static DEFINE_IDA(sock_cookie_ida);
43
44 static atomic_t monitor_promisc = ATOMIC_INIT(0);
45
46 /* ----- HCI socket interface ----- */
47
48 /* Socket info */
49 #define hci_pi(sk) ((struct hci_pinfo *) sk)
50
51 struct hci_pinfo {
52         struct bt_sock    bt;
53         struct hci_dev    *hdev;
54         struct hci_filter filter;
55         __u32             cmsg_mask;
56         unsigned short    channel;
57         unsigned long     flags;
58         __u32             cookie;
59         char              comm[TASK_COMM_LEN];
60 };
61
62 void hci_sock_set_flag(struct sock *sk, int nr)
63 {
64         set_bit(nr, &hci_pi(sk)->flags);
65 }
66
67 void hci_sock_clear_flag(struct sock *sk, int nr)
68 {
69         clear_bit(nr, &hci_pi(sk)->flags);
70 }
71
72 int hci_sock_test_flag(struct sock *sk, int nr)
73 {
74         return test_bit(nr, &hci_pi(sk)->flags);
75 }
76
77 unsigned short hci_sock_get_channel(struct sock *sk)
78 {
79         return hci_pi(sk)->channel;
80 }
81
82 u32 hci_sock_get_cookie(struct sock *sk)
83 {
84         return hci_pi(sk)->cookie;
85 }
86
87 static bool hci_sock_gen_cookie(struct sock *sk)
88 {
89         int id = hci_pi(sk)->cookie;
90
91         if (!id) {
92                 id = ida_simple_get(&sock_cookie_ida, 1, 0, GFP_KERNEL);
93                 if (id < 0)
94                         id = 0xffffffff;
95
96                 hci_pi(sk)->cookie = id;
97                 get_task_comm(hci_pi(sk)->comm, current);
98                 return true;
99         }
100
101         return false;
102 }
103
104 static void hci_sock_free_cookie(struct sock *sk)
105 {
106         int id = hci_pi(sk)->cookie;
107
108         if (id) {
109                 hci_pi(sk)->cookie = 0xffffffff;
110                 ida_simple_remove(&sock_cookie_ida, id);
111         }
112 }
113
114 static inline int hci_test_bit(int nr, const void *addr)
115 {
116         return *((const __u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
117 }
118
119 /* Security filter */
120 #define HCI_SFLT_MAX_OGF  5
121
122 struct hci_sec_filter {
123         __u32 type_mask;
124         __u32 event_mask[2];
125         __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
126 };
127
128 static const struct hci_sec_filter hci_sec_filter = {
129         /* Packet types */
130         0x10,
131         /* Events */
132         { 0x1000d9fe, 0x0000b00c },
133         /* Commands */
134         {
135                 { 0x0 },
136                 /* OGF_LINK_CTL */
137                 { 0xbe000006, 0x00000001, 0x00000000, 0x00 },
138                 /* OGF_LINK_POLICY */
139                 { 0x00005200, 0x00000000, 0x00000000, 0x00 },
140                 /* OGF_HOST_CTL */
141                 { 0xaab00200, 0x2b402aaa, 0x05220154, 0x00 },
142                 /* OGF_INFO_PARAM */
143                 { 0x000002be, 0x00000000, 0x00000000, 0x00 },
144                 /* OGF_STATUS_PARAM */
145                 { 0x000000ea, 0x00000000, 0x00000000, 0x00 }
146         }
147 };
148
149 static struct bt_sock_list hci_sk_list = {
150         .lock = __RW_LOCK_UNLOCKED(hci_sk_list.lock)
151 };
152
153 static bool is_filtered_packet(struct sock *sk, struct sk_buff *skb)
154 {
155         struct hci_filter *flt;
156         int flt_type, flt_event;
157
158         /* Apply filter */
159         flt = &hci_pi(sk)->filter;
160
161         flt_type = hci_skb_pkt_type(skb) & HCI_FLT_TYPE_BITS;
162
163         if (!test_bit(flt_type, &flt->type_mask))
164                 return true;
165
166         /* Extra filter for event packets only */
167         if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT)
168                 return false;
169
170         flt_event = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
171
172         if (!hci_test_bit(flt_event, &flt->event_mask))
173                 return true;
174
175         /* Check filter only when opcode is set */
176         if (!flt->opcode)
177                 return false;
178
179         if (flt_event == HCI_EV_CMD_COMPLETE &&
180             flt->opcode != get_unaligned((__le16 *)(skb->data + 3)))
181                 return true;
182
183         if (flt_event == HCI_EV_CMD_STATUS &&
184             flt->opcode != get_unaligned((__le16 *)(skb->data + 4)))
185                 return true;
186
187         return false;
188 }
189
190 /* Send frame to RAW socket */
191 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
192 {
193         struct sock *sk;
194         struct sk_buff *skb_copy = NULL;
195
196         BT_DBG("hdev %p len %d", hdev, skb->len);
197
198         read_lock(&hci_sk_list.lock);
199
200         sk_for_each(sk, &hci_sk_list.head) {
201                 struct sk_buff *nskb;
202
203                 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev)
204                         continue;
205
206                 /* Don't send frame to the socket it came from */
207                 if (skb->sk == sk)
208                         continue;
209
210                 if (hci_pi(sk)->channel == HCI_CHANNEL_RAW) {
211                         if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
212                             hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
213                             hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
214                             hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
215                             hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
216                                 continue;
217                         if (is_filtered_packet(sk, skb))
218                                 continue;
219                 } else if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
220                         if (!bt_cb(skb)->incoming)
221                                 continue;
222                         if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
223                             hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
224                             hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
225                             hci_skb_pkt_type(skb) != HCI_ISODATA_PKT)
226                                 continue;
227                 } else {
228                         /* Don't send frame to other channel types */
229                         continue;
230                 }
231
232                 if (!skb_copy) {
233                         /* Create a private copy with headroom */
234                         skb_copy = __pskb_copy_fclone(skb, 1, GFP_ATOMIC, true);
235                         if (!skb_copy)
236                                 continue;
237
238                         /* Put type byte before the data */
239                         memcpy(skb_push(skb_copy, 1), &hci_skb_pkt_type(skb), 1);
240                 }
241
242                 nskb = skb_clone(skb_copy, GFP_ATOMIC);
243                 if (!nskb)
244                         continue;
245
246                 if (sock_queue_rcv_skb(sk, nskb))
247                         kfree_skb(nskb);
248         }
249
250         read_unlock(&hci_sk_list.lock);
251
252         kfree_skb(skb_copy);
253 }
254
255 /* Send frame to sockets with specific channel */
256 static void __hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
257                                   int flag, struct sock *skip_sk)
258 {
259         struct sock *sk;
260
261         BT_DBG("channel %u len %d", channel, skb->len);
262
263         sk_for_each(sk, &hci_sk_list.head) {
264                 struct sk_buff *nskb;
265
266                 /* Ignore socket without the flag set */
267                 if (!hci_sock_test_flag(sk, flag))
268                         continue;
269
270                 /* Skip the original socket */
271                 if (sk == skip_sk)
272                         continue;
273
274                 if (sk->sk_state != BT_BOUND)
275                         continue;
276
277                 if (hci_pi(sk)->channel != channel)
278                         continue;
279
280                 nskb = skb_clone(skb, GFP_ATOMIC);
281                 if (!nskb)
282                         continue;
283
284                 if (sock_queue_rcv_skb(sk, nskb))
285                         kfree_skb(nskb);
286         }
287
288 }
289
290 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
291                          int flag, struct sock *skip_sk)
292 {
293         read_lock(&hci_sk_list.lock);
294         __hci_send_to_channel(channel, skb, flag, skip_sk);
295         read_unlock(&hci_sk_list.lock);
296 }
297
298 /* Send frame to monitor socket */
299 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb)
300 {
301         struct sk_buff *skb_copy = NULL;
302         struct hci_mon_hdr *hdr;
303         __le16 opcode;
304
305         if (!atomic_read(&monitor_promisc))
306                 return;
307
308         BT_DBG("hdev %p len %d", hdev, skb->len);
309
310         switch (hci_skb_pkt_type(skb)) {
311         case HCI_COMMAND_PKT:
312                 opcode = cpu_to_le16(HCI_MON_COMMAND_PKT);
313                 break;
314         case HCI_EVENT_PKT:
315                 opcode = cpu_to_le16(HCI_MON_EVENT_PKT);
316                 break;
317         case HCI_ACLDATA_PKT:
318                 if (bt_cb(skb)->incoming)
319                         opcode = cpu_to_le16(HCI_MON_ACL_RX_PKT);
320                 else
321                         opcode = cpu_to_le16(HCI_MON_ACL_TX_PKT);
322                 break;
323         case HCI_SCODATA_PKT:
324                 if (bt_cb(skb)->incoming)
325                         opcode = cpu_to_le16(HCI_MON_SCO_RX_PKT);
326                 else
327                         opcode = cpu_to_le16(HCI_MON_SCO_TX_PKT);
328                 break;
329         case HCI_ISODATA_PKT:
330                 if (bt_cb(skb)->incoming)
331                         opcode = cpu_to_le16(HCI_MON_ISO_RX_PKT);
332                 else
333                         opcode = cpu_to_le16(HCI_MON_ISO_TX_PKT);
334                 break;
335         case HCI_DIAG_PKT:
336                 opcode = cpu_to_le16(HCI_MON_VENDOR_DIAG);
337                 break;
338         default:
339                 return;
340         }
341
342         /* Create a private copy with headroom */
343         skb_copy = __pskb_copy_fclone(skb, HCI_MON_HDR_SIZE, GFP_ATOMIC, true);
344         if (!skb_copy)
345                 return;
346
347         /* Put header before the data */
348         hdr = skb_push(skb_copy, HCI_MON_HDR_SIZE);
349         hdr->opcode = opcode;
350         hdr->index = cpu_to_le16(hdev->id);
351         hdr->len = cpu_to_le16(skb->len);
352
353         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb_copy,
354                             HCI_SOCK_TRUSTED, NULL);
355         kfree_skb(skb_copy);
356 }
357
358 void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
359                                  void *data, u16 data_len, ktime_t tstamp,
360                                  int flag, struct sock *skip_sk)
361 {
362         struct sock *sk;
363         __le16 index;
364
365         if (hdev)
366                 index = cpu_to_le16(hdev->id);
367         else
368                 index = cpu_to_le16(MGMT_INDEX_NONE);
369
370         read_lock(&hci_sk_list.lock);
371
372         sk_for_each(sk, &hci_sk_list.head) {
373                 struct hci_mon_hdr *hdr;
374                 struct sk_buff *skb;
375
376                 if (hci_pi(sk)->channel != HCI_CHANNEL_CONTROL)
377                         continue;
378
379                 /* Ignore socket without the flag set */
380                 if (!hci_sock_test_flag(sk, flag))
381                         continue;
382
383                 /* Skip the original socket */
384                 if (sk == skip_sk)
385                         continue;
386
387                 skb = bt_skb_alloc(6 + data_len, GFP_ATOMIC);
388                 if (!skb)
389                         continue;
390
391                 put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
392                 put_unaligned_le16(event, skb_put(skb, 2));
393
394                 if (data)
395                         skb_put_data(skb, data, data_len);
396
397                 skb->tstamp = tstamp;
398
399                 hdr = skb_push(skb, HCI_MON_HDR_SIZE);
400                 hdr->opcode = cpu_to_le16(HCI_MON_CTRL_EVENT);
401                 hdr->index = index;
402                 hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
403
404                 __hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
405                                       HCI_SOCK_TRUSTED, NULL);
406                 kfree_skb(skb);
407         }
408
409         read_unlock(&hci_sk_list.lock);
410 }
411
412 static struct sk_buff *create_monitor_event(struct hci_dev *hdev, int event)
413 {
414         struct hci_mon_hdr *hdr;
415         struct hci_mon_new_index *ni;
416         struct hci_mon_index_info *ii;
417         struct sk_buff *skb;
418         __le16 opcode;
419
420         switch (event) {
421         case HCI_DEV_REG:
422                 skb = bt_skb_alloc(HCI_MON_NEW_INDEX_SIZE, GFP_ATOMIC);
423                 if (!skb)
424                         return NULL;
425
426                 ni = skb_put(skb, HCI_MON_NEW_INDEX_SIZE);
427                 ni->type = hdev->dev_type;
428                 ni->bus = hdev->bus;
429                 bacpy(&ni->bdaddr, &hdev->bdaddr);
430                 memcpy(ni->name, hdev->name, 8);
431
432                 opcode = cpu_to_le16(HCI_MON_NEW_INDEX);
433                 break;
434
435         case HCI_DEV_UNREG:
436                 skb = bt_skb_alloc(0, GFP_ATOMIC);
437                 if (!skb)
438                         return NULL;
439
440                 opcode = cpu_to_le16(HCI_MON_DEL_INDEX);
441                 break;
442
443         case HCI_DEV_SETUP:
444                 if (hdev->manufacturer == 0xffff)
445                         return NULL;
446
447                 /* fall through */
448
449         case HCI_DEV_UP:
450                 skb = bt_skb_alloc(HCI_MON_INDEX_INFO_SIZE, GFP_ATOMIC);
451                 if (!skb)
452                         return NULL;
453
454                 ii = skb_put(skb, HCI_MON_INDEX_INFO_SIZE);
455                 bacpy(&ii->bdaddr, &hdev->bdaddr);
456                 ii->manufacturer = cpu_to_le16(hdev->manufacturer);
457
458                 opcode = cpu_to_le16(HCI_MON_INDEX_INFO);
459                 break;
460
461         case HCI_DEV_OPEN:
462                 skb = bt_skb_alloc(0, GFP_ATOMIC);
463                 if (!skb)
464                         return NULL;
465
466                 opcode = cpu_to_le16(HCI_MON_OPEN_INDEX);
467                 break;
468
469         case HCI_DEV_CLOSE:
470                 skb = bt_skb_alloc(0, GFP_ATOMIC);
471                 if (!skb)
472                         return NULL;
473
474                 opcode = cpu_to_le16(HCI_MON_CLOSE_INDEX);
475                 break;
476
477         default:
478                 return NULL;
479         }
480
481         __net_timestamp(skb);
482
483         hdr = skb_push(skb, HCI_MON_HDR_SIZE);
484         hdr->opcode = opcode;
485         hdr->index = cpu_to_le16(hdev->id);
486         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
487
488         return skb;
489 }
490
491 static struct sk_buff *create_monitor_ctrl_open(struct sock *sk)
492 {
493         struct hci_mon_hdr *hdr;
494         struct sk_buff *skb;
495         u16 format;
496         u8 ver[3];
497         u32 flags;
498
499         /* No message needed when cookie is not present */
500         if (!hci_pi(sk)->cookie)
501                 return NULL;
502
503         switch (hci_pi(sk)->channel) {
504         case HCI_CHANNEL_RAW:
505                 format = 0x0000;
506                 ver[0] = BT_SUBSYS_VERSION;
507                 put_unaligned_le16(BT_SUBSYS_REVISION, ver + 1);
508                 break;
509         case HCI_CHANNEL_USER:
510                 format = 0x0001;
511                 ver[0] = BT_SUBSYS_VERSION;
512                 put_unaligned_le16(BT_SUBSYS_REVISION, ver + 1);
513                 break;
514         case HCI_CHANNEL_CONTROL:
515                 format = 0x0002;
516                 mgmt_fill_version_info(ver);
517                 break;
518         default:
519                 /* No message for unsupported format */
520                 return NULL;
521         }
522
523         skb = bt_skb_alloc(14 + TASK_COMM_LEN , GFP_ATOMIC);
524         if (!skb)
525                 return NULL;
526
527         flags = hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) ? 0x1 : 0x0;
528
529         put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
530         put_unaligned_le16(format, skb_put(skb, 2));
531         skb_put_data(skb, ver, sizeof(ver));
532         put_unaligned_le32(flags, skb_put(skb, 4));
533         skb_put_u8(skb, TASK_COMM_LEN);
534         skb_put_data(skb, hci_pi(sk)->comm, TASK_COMM_LEN);
535
536         __net_timestamp(skb);
537
538         hdr = skb_push(skb, HCI_MON_HDR_SIZE);
539         hdr->opcode = cpu_to_le16(HCI_MON_CTRL_OPEN);
540         if (hci_pi(sk)->hdev)
541                 hdr->index = cpu_to_le16(hci_pi(sk)->hdev->id);
542         else
543                 hdr->index = cpu_to_le16(HCI_DEV_NONE);
544         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
545
546         return skb;
547 }
548
549 static struct sk_buff *create_monitor_ctrl_close(struct sock *sk)
550 {
551         struct hci_mon_hdr *hdr;
552         struct sk_buff *skb;
553
554         /* No message needed when cookie is not present */
555         if (!hci_pi(sk)->cookie)
556                 return NULL;
557
558         switch (hci_pi(sk)->channel) {
559         case HCI_CHANNEL_RAW:
560         case HCI_CHANNEL_USER:
561         case HCI_CHANNEL_CONTROL:
562                 break;
563         default:
564                 /* No message for unsupported format */
565                 return NULL;
566         }
567
568         skb = bt_skb_alloc(4, GFP_ATOMIC);
569         if (!skb)
570                 return NULL;
571
572         put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
573
574         __net_timestamp(skb);
575
576         hdr = skb_push(skb, HCI_MON_HDR_SIZE);
577         hdr->opcode = cpu_to_le16(HCI_MON_CTRL_CLOSE);
578         if (hci_pi(sk)->hdev)
579                 hdr->index = cpu_to_le16(hci_pi(sk)->hdev->id);
580         else
581                 hdr->index = cpu_to_le16(HCI_DEV_NONE);
582         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
583
584         return skb;
585 }
586
587 static struct sk_buff *create_monitor_ctrl_command(struct sock *sk, u16 index,
588                                                    u16 opcode, u16 len,
589                                                    const void *buf)
590 {
591         struct hci_mon_hdr *hdr;
592         struct sk_buff *skb;
593
594         skb = bt_skb_alloc(6 + len, GFP_ATOMIC);
595         if (!skb)
596                 return NULL;
597
598         put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
599         put_unaligned_le16(opcode, skb_put(skb, 2));
600
601         if (buf)
602                 skb_put_data(skb, buf, len);
603
604         __net_timestamp(skb);
605
606         hdr = skb_push(skb, HCI_MON_HDR_SIZE);
607         hdr->opcode = cpu_to_le16(HCI_MON_CTRL_COMMAND);
608         hdr->index = cpu_to_le16(index);
609         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
610
611         return skb;
612 }
613
614 static void __printf(2, 3)
615 send_monitor_note(struct sock *sk, const char *fmt, ...)
616 {
617         size_t len;
618         struct hci_mon_hdr *hdr;
619         struct sk_buff *skb;
620         va_list args;
621
622         va_start(args, fmt);
623         len = vsnprintf(NULL, 0, fmt, args);
624         va_end(args);
625
626         skb = bt_skb_alloc(len + 1, GFP_ATOMIC);
627         if (!skb)
628                 return;
629
630         va_start(args, fmt);
631         vsprintf(skb_put(skb, len), fmt, args);
632         *(u8 *)skb_put(skb, 1) = 0;
633         va_end(args);
634
635         __net_timestamp(skb);
636
637         hdr = (void *)skb_push(skb, HCI_MON_HDR_SIZE);
638         hdr->opcode = cpu_to_le16(HCI_MON_SYSTEM_NOTE);
639         hdr->index = cpu_to_le16(HCI_DEV_NONE);
640         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
641
642         if (sock_queue_rcv_skb(sk, skb))
643                 kfree_skb(skb);
644 }
645
646 static void send_monitor_replay(struct sock *sk)
647 {
648         struct hci_dev *hdev;
649
650         read_lock(&hci_dev_list_lock);
651
652         list_for_each_entry(hdev, &hci_dev_list, list) {
653                 struct sk_buff *skb;
654
655                 skb = create_monitor_event(hdev, HCI_DEV_REG);
656                 if (!skb)
657                         continue;
658
659                 if (sock_queue_rcv_skb(sk, skb))
660                         kfree_skb(skb);
661
662                 if (!test_bit(HCI_RUNNING, &hdev->flags))
663                         continue;
664
665                 skb = create_monitor_event(hdev, HCI_DEV_OPEN);
666                 if (!skb)
667                         continue;
668
669                 if (sock_queue_rcv_skb(sk, skb))
670                         kfree_skb(skb);
671
672                 if (test_bit(HCI_UP, &hdev->flags))
673                         skb = create_monitor_event(hdev, HCI_DEV_UP);
674                 else if (hci_dev_test_flag(hdev, HCI_SETUP))
675                         skb = create_monitor_event(hdev, HCI_DEV_SETUP);
676                 else
677                         skb = NULL;
678
679                 if (skb) {
680                         if (sock_queue_rcv_skb(sk, skb))
681                                 kfree_skb(skb);
682                 }
683         }
684
685         read_unlock(&hci_dev_list_lock);
686 }
687
688 static void send_monitor_control_replay(struct sock *mon_sk)
689 {
690         struct sock *sk;
691
692         read_lock(&hci_sk_list.lock);
693
694         sk_for_each(sk, &hci_sk_list.head) {
695                 struct sk_buff *skb;
696
697                 skb = create_monitor_ctrl_open(sk);
698                 if (!skb)
699                         continue;
700
701                 if (sock_queue_rcv_skb(mon_sk, skb))
702                         kfree_skb(skb);
703         }
704
705         read_unlock(&hci_sk_list.lock);
706 }
707
708 /* Generate internal stack event */
709 static void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
710 {
711         struct hci_event_hdr *hdr;
712         struct hci_ev_stack_internal *ev;
713         struct sk_buff *skb;
714
715         skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
716         if (!skb)
717                 return;
718
719         hdr = skb_put(skb, HCI_EVENT_HDR_SIZE);
720         hdr->evt  = HCI_EV_STACK_INTERNAL;
721         hdr->plen = sizeof(*ev) + dlen;
722
723         ev = skb_put(skb, sizeof(*ev) + dlen);
724         ev->type = type;
725         memcpy(ev->data, data, dlen);
726
727         bt_cb(skb)->incoming = 1;
728         __net_timestamp(skb);
729
730         hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
731         hci_send_to_sock(hdev, skb);
732         kfree_skb(skb);
733 }
734
735 void hci_sock_dev_event(struct hci_dev *hdev, int event)
736 {
737         BT_DBG("hdev %s event %d", hdev->name, event);
738
739         if (atomic_read(&monitor_promisc)) {
740                 struct sk_buff *skb;
741
742                 /* Send event to monitor */
743                 skb = create_monitor_event(hdev, event);
744                 if (skb) {
745                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
746                                             HCI_SOCK_TRUSTED, NULL);
747                         kfree_skb(skb);
748                 }
749         }
750
751         if (event <= HCI_DEV_DOWN) {
752                 struct hci_ev_si_device ev;
753
754                 /* Send event to sockets */
755                 ev.event  = event;
756                 ev.dev_id = hdev->id;
757                 hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
758         }
759
760         if (event == HCI_DEV_UNREG) {
761                 struct sock *sk;
762
763                 /* Detach sockets from device */
764                 read_lock(&hci_sk_list.lock);
765                 sk_for_each(sk, &hci_sk_list.head) {
766                         bh_lock_sock_nested(sk);
767                         if (hci_pi(sk)->hdev == hdev) {
768                                 hci_pi(sk)->hdev = NULL;
769                                 sk->sk_err = EPIPE;
770                                 sk->sk_state = BT_OPEN;
771                                 sk->sk_state_change(sk);
772
773                                 hci_dev_put(hdev);
774                         }
775                         bh_unlock_sock(sk);
776                 }
777                 read_unlock(&hci_sk_list.lock);
778         }
779 }
780
781 static struct hci_mgmt_chan *__hci_mgmt_chan_find(unsigned short channel)
782 {
783         struct hci_mgmt_chan *c;
784
785         list_for_each_entry(c, &mgmt_chan_list, list) {
786                 if (c->channel == channel)
787                         return c;
788         }
789
790         return NULL;
791 }
792
793 static struct hci_mgmt_chan *hci_mgmt_chan_find(unsigned short channel)
794 {
795         struct hci_mgmt_chan *c;
796
797         mutex_lock(&mgmt_chan_list_lock);
798         c = __hci_mgmt_chan_find(channel);
799         mutex_unlock(&mgmt_chan_list_lock);
800
801         return c;
802 }
803
804 int hci_mgmt_chan_register(struct hci_mgmt_chan *c)
805 {
806         if (c->channel < HCI_CHANNEL_CONTROL)
807                 return -EINVAL;
808
809         mutex_lock(&mgmt_chan_list_lock);
810         if (__hci_mgmt_chan_find(c->channel)) {
811                 mutex_unlock(&mgmt_chan_list_lock);
812                 return -EALREADY;
813         }
814
815         list_add_tail(&c->list, &mgmt_chan_list);
816
817         mutex_unlock(&mgmt_chan_list_lock);
818
819         return 0;
820 }
821 EXPORT_SYMBOL(hci_mgmt_chan_register);
822
823 void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c)
824 {
825         mutex_lock(&mgmt_chan_list_lock);
826         list_del(&c->list);
827         mutex_unlock(&mgmt_chan_list_lock);
828 }
829 EXPORT_SYMBOL(hci_mgmt_chan_unregister);
830
831 static int hci_sock_release(struct socket *sock)
832 {
833         struct sock *sk = sock->sk;
834         struct hci_dev *hdev;
835         struct sk_buff *skb;
836
837         BT_DBG("sock %p sk %p", sock, sk);
838
839         if (!sk)
840                 return 0;
841
842         lock_sock(sk);
843
844         switch (hci_pi(sk)->channel) {
845         case HCI_CHANNEL_MONITOR:
846                 atomic_dec(&monitor_promisc);
847                 break;
848         case HCI_CHANNEL_RAW:
849         case HCI_CHANNEL_USER:
850         case HCI_CHANNEL_CONTROL:
851                 /* Send event to monitor */
852                 skb = create_monitor_ctrl_close(sk);
853                 if (skb) {
854                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
855                                             HCI_SOCK_TRUSTED, NULL);
856                         kfree_skb(skb);
857                 }
858
859                 hci_sock_free_cookie(sk);
860                 break;
861         }
862
863         bt_sock_unlink(&hci_sk_list, sk);
864
865         hdev = hci_pi(sk)->hdev;
866         if (hdev) {
867                 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
868                         /* When releasing a user channel exclusive access,
869                          * call hci_dev_do_close directly instead of calling
870                          * hci_dev_close to ensure the exclusive access will
871                          * be released and the controller brought back down.
872                          *
873                          * The checking of HCI_AUTO_OFF is not needed in this
874                          * case since it will have been cleared already when
875                          * opening the user channel.
876                          */
877                         hci_dev_do_close(hdev);
878                         hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
879                         mgmt_index_added(hdev);
880                 }
881
882                 atomic_dec(&hdev->promisc);
883                 hci_dev_put(hdev);
884         }
885
886         sock_orphan(sk);
887
888         skb_queue_purge(&sk->sk_receive_queue);
889         skb_queue_purge(&sk->sk_write_queue);
890
891         release_sock(sk);
892         sock_put(sk);
893         return 0;
894 }
895
896 static int hci_sock_blacklist_add(struct hci_dev *hdev, void __user *arg)
897 {
898         bdaddr_t bdaddr;
899         int err;
900
901         if (copy_from_user(&bdaddr, arg, sizeof(bdaddr)))
902                 return -EFAULT;
903
904         hci_dev_lock(hdev);
905
906         err = hci_bdaddr_list_add(&hdev->blacklist, &bdaddr, BDADDR_BREDR);
907
908         hci_dev_unlock(hdev);
909
910         return err;
911 }
912
913 static int hci_sock_blacklist_del(struct hci_dev *hdev, void __user *arg)
914 {
915         bdaddr_t bdaddr;
916         int err;
917
918         if (copy_from_user(&bdaddr, arg, sizeof(bdaddr)))
919                 return -EFAULT;
920
921         hci_dev_lock(hdev);
922
923         err = hci_bdaddr_list_del(&hdev->blacklist, &bdaddr, BDADDR_BREDR);
924
925         hci_dev_unlock(hdev);
926
927         return err;
928 }
929
930 /* Ioctls that require bound socket */
931 static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd,
932                                 unsigned long arg)
933 {
934         struct hci_dev *hdev = hci_pi(sk)->hdev;
935
936         if (!hdev)
937                 return -EBADFD;
938
939         if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
940                 return -EBUSY;
941
942         if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
943                 return -EOPNOTSUPP;
944
945         if (hdev->dev_type != HCI_PRIMARY)
946                 return -EOPNOTSUPP;
947
948         switch (cmd) {
949         case HCISETRAW:
950                 if (!capable(CAP_NET_ADMIN))
951                         return -EPERM;
952                 return -EOPNOTSUPP;
953
954         case HCIGETCONNINFO:
955                 return hci_get_conn_info(hdev, (void __user *)arg);
956
957         case HCIGETAUTHINFO:
958                 return hci_get_auth_info(hdev, (void __user *)arg);
959
960         case HCIBLOCKADDR:
961                 if (!capable(CAP_NET_ADMIN))
962                         return -EPERM;
963                 return hci_sock_blacklist_add(hdev, (void __user *)arg);
964
965         case HCIUNBLOCKADDR:
966                 if (!capable(CAP_NET_ADMIN))
967                         return -EPERM;
968                 return hci_sock_blacklist_del(hdev, (void __user *)arg);
969         }
970
971         return -ENOIOCTLCMD;
972 }
973
974 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd,
975                           unsigned long arg)
976 {
977         void __user *argp = (void __user *)arg;
978         struct sock *sk = sock->sk;
979         int err;
980
981         BT_DBG("cmd %x arg %lx", cmd, arg);
982
983         lock_sock(sk);
984
985         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
986                 err = -EBADFD;
987                 goto done;
988         }
989
990         /* When calling an ioctl on an unbound raw socket, then ensure
991          * that the monitor gets informed. Ensure that the resulting event
992          * is only send once by checking if the cookie exists or not. The
993          * socket cookie will be only ever generated once for the lifetime
994          * of a given socket.
995          */
996         if (hci_sock_gen_cookie(sk)) {
997                 struct sk_buff *skb;
998
999                 if (capable(CAP_NET_ADMIN))
1000                         hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
1001
1002                 /* Send event to monitor */
1003                 skb = create_monitor_ctrl_open(sk);
1004                 if (skb) {
1005                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1006                                             HCI_SOCK_TRUSTED, NULL);
1007                         kfree_skb(skb);
1008                 }
1009         }
1010
1011         release_sock(sk);
1012
1013         switch (cmd) {
1014         case HCIGETDEVLIST:
1015                 return hci_get_dev_list(argp);
1016
1017         case HCIGETDEVINFO:
1018                 return hci_get_dev_info(argp);
1019
1020         case HCIGETCONNLIST:
1021                 return hci_get_conn_list(argp);
1022
1023         case HCIDEVUP:
1024                 if (!capable(CAP_NET_ADMIN))
1025                         return -EPERM;
1026                 return hci_dev_open(arg);
1027
1028         case HCIDEVDOWN:
1029                 if (!capable(CAP_NET_ADMIN))
1030                         return -EPERM;
1031                 return hci_dev_close(arg);
1032
1033         case HCIDEVRESET:
1034                 if (!capable(CAP_NET_ADMIN))
1035                         return -EPERM;
1036                 return hci_dev_reset(arg);
1037
1038         case HCIDEVRESTAT:
1039                 if (!capable(CAP_NET_ADMIN))
1040                         return -EPERM;
1041                 return hci_dev_reset_stat(arg);
1042
1043         case HCISETSCAN:
1044         case HCISETAUTH:
1045         case HCISETENCRYPT:
1046         case HCISETPTYPE:
1047         case HCISETLINKPOL:
1048         case HCISETLINKMODE:
1049         case HCISETACLMTU:
1050         case HCISETSCOMTU:
1051                 if (!capable(CAP_NET_ADMIN))
1052                         return -EPERM;
1053                 return hci_dev_cmd(cmd, argp);
1054
1055         case HCIINQUIRY:
1056                 return hci_inquiry(argp);
1057         }
1058
1059         lock_sock(sk);
1060
1061         err = hci_sock_bound_ioctl(sk, cmd, arg);
1062
1063 done:
1064         release_sock(sk);
1065         return err;
1066 }
1067
1068 #ifdef CONFIG_COMPAT
1069 static int hci_sock_compat_ioctl(struct socket *sock, unsigned int cmd,
1070                                  unsigned long arg)
1071 {
1072         switch (cmd) {
1073         case HCIDEVUP:
1074         case HCIDEVDOWN:
1075         case HCIDEVRESET:
1076         case HCIDEVRESTAT:
1077                 return hci_sock_ioctl(sock, cmd, arg);
1078         }
1079
1080         return hci_sock_ioctl(sock, cmd, (unsigned long)compat_ptr(arg));
1081 }
1082 #endif
1083
1084 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
1085                          int addr_len)
1086 {
1087         struct sockaddr_hci haddr;
1088         struct sock *sk = sock->sk;
1089         struct hci_dev *hdev = NULL;
1090         struct sk_buff *skb;
1091         int len, err = 0;
1092
1093         BT_DBG("sock %p sk %p", sock, sk);
1094
1095         if (!addr)
1096                 return -EINVAL;
1097
1098         memset(&haddr, 0, sizeof(haddr));
1099         len = min_t(unsigned int, sizeof(haddr), addr_len);
1100         memcpy(&haddr, addr, len);
1101
1102         if (haddr.hci_family != AF_BLUETOOTH)
1103                 return -EINVAL;
1104
1105         lock_sock(sk);
1106
1107         if (sk->sk_state == BT_BOUND) {
1108                 err = -EALREADY;
1109                 goto done;
1110         }
1111
1112         switch (haddr.hci_channel) {
1113         case HCI_CHANNEL_RAW:
1114                 if (hci_pi(sk)->hdev) {
1115                         err = -EALREADY;
1116                         goto done;
1117                 }
1118
1119                 if (haddr.hci_dev != HCI_DEV_NONE) {
1120                         hdev = hci_dev_get(haddr.hci_dev);
1121                         if (!hdev) {
1122                                 err = -ENODEV;
1123                                 goto done;
1124                         }
1125
1126                         atomic_inc(&hdev->promisc);
1127                 }
1128
1129                 hci_pi(sk)->channel = haddr.hci_channel;
1130
1131                 if (!hci_sock_gen_cookie(sk)) {
1132                         /* In the case when a cookie has already been assigned,
1133                          * then there has been already an ioctl issued against
1134                          * an unbound socket and with that triggerd an open
1135                          * notification. Send a close notification first to
1136                          * allow the state transition to bounded.
1137                          */
1138                         skb = create_monitor_ctrl_close(sk);
1139                         if (skb) {
1140                                 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1141                                                     HCI_SOCK_TRUSTED, NULL);
1142                                 kfree_skb(skb);
1143                         }
1144                 }
1145
1146                 if (capable(CAP_NET_ADMIN))
1147                         hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
1148
1149                 hci_pi(sk)->hdev = hdev;
1150
1151                 /* Send event to monitor */
1152                 skb = create_monitor_ctrl_open(sk);
1153                 if (skb) {
1154                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1155                                             HCI_SOCK_TRUSTED, NULL);
1156                         kfree_skb(skb);
1157                 }
1158                 break;
1159
1160         case HCI_CHANNEL_USER:
1161                 if (hci_pi(sk)->hdev) {
1162                         err = -EALREADY;
1163                         goto done;
1164                 }
1165
1166                 if (haddr.hci_dev == HCI_DEV_NONE) {
1167                         err = -EINVAL;
1168                         goto done;
1169                 }
1170
1171                 if (!capable(CAP_NET_ADMIN)) {
1172                         err = -EPERM;
1173                         goto done;
1174                 }
1175
1176                 hdev = hci_dev_get(haddr.hci_dev);
1177                 if (!hdev) {
1178                         err = -ENODEV;
1179                         goto done;
1180                 }
1181
1182                 if (test_bit(HCI_INIT, &hdev->flags) ||
1183                     hci_dev_test_flag(hdev, HCI_SETUP) ||
1184                     hci_dev_test_flag(hdev, HCI_CONFIG) ||
1185                     (!hci_dev_test_flag(hdev, HCI_AUTO_OFF) &&
1186                      test_bit(HCI_UP, &hdev->flags))) {
1187                         err = -EBUSY;
1188                         hci_dev_put(hdev);
1189                         goto done;
1190                 }
1191
1192                 if (hci_dev_test_and_set_flag(hdev, HCI_USER_CHANNEL)) {
1193                         err = -EUSERS;
1194                         hci_dev_put(hdev);
1195                         goto done;
1196                 }
1197
1198                 mgmt_index_removed(hdev);
1199
1200                 err = hci_dev_open(hdev->id);
1201                 if (err) {
1202                         if (err == -EALREADY) {
1203                                 /* In case the transport is already up and
1204                                  * running, clear the error here.
1205                                  *
1206                                  * This can happen when opening a user
1207                                  * channel and HCI_AUTO_OFF grace period
1208                                  * is still active.
1209                                  */
1210                                 err = 0;
1211                         } else {
1212                                 hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
1213                                 mgmt_index_added(hdev);
1214                                 hci_dev_put(hdev);
1215                                 goto done;
1216                         }
1217                 }
1218
1219                 hci_pi(sk)->channel = haddr.hci_channel;
1220
1221                 if (!hci_sock_gen_cookie(sk)) {
1222                         /* In the case when a cookie has already been assigned,
1223                          * this socket will transition from a raw socket into
1224                          * a user channel socket. For a clean transition, send
1225                          * the close notification first.
1226                          */
1227                         skb = create_monitor_ctrl_close(sk);
1228                         if (skb) {
1229                                 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1230                                                     HCI_SOCK_TRUSTED, NULL);
1231                                 kfree_skb(skb);
1232                         }
1233                 }
1234
1235                 /* The user channel is restricted to CAP_NET_ADMIN
1236                  * capabilities and with that implicitly trusted.
1237                  */
1238                 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
1239
1240                 hci_pi(sk)->hdev = hdev;
1241
1242                 /* Send event to monitor */
1243                 skb = create_monitor_ctrl_open(sk);
1244                 if (skb) {
1245                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1246                                             HCI_SOCK_TRUSTED, NULL);
1247                         kfree_skb(skb);
1248                 }
1249
1250                 atomic_inc(&hdev->promisc);
1251                 break;
1252
1253         case HCI_CHANNEL_MONITOR:
1254                 if (haddr.hci_dev != HCI_DEV_NONE) {
1255                         err = -EINVAL;
1256                         goto done;
1257                 }
1258
1259                 if (!capable(CAP_NET_RAW)) {
1260                         err = -EPERM;
1261                         goto done;
1262                 }
1263
1264                 hci_pi(sk)->channel = haddr.hci_channel;
1265
1266                 /* The monitor interface is restricted to CAP_NET_RAW
1267                  * capabilities and with that implicitly trusted.
1268                  */
1269                 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
1270
1271                 send_monitor_note(sk, "Linux version %s (%s)",
1272                                   init_utsname()->release,
1273                                   init_utsname()->machine);
1274                 send_monitor_note(sk, "Bluetooth subsystem version %u.%u",
1275                                   BT_SUBSYS_VERSION, BT_SUBSYS_REVISION);
1276                 send_monitor_replay(sk);
1277                 send_monitor_control_replay(sk);
1278
1279                 atomic_inc(&monitor_promisc);
1280                 break;
1281
1282         case HCI_CHANNEL_LOGGING:
1283                 if (haddr.hci_dev != HCI_DEV_NONE) {
1284                         err = -EINVAL;
1285                         goto done;
1286                 }
1287
1288                 if (!capable(CAP_NET_ADMIN)) {
1289                         err = -EPERM;
1290                         goto done;
1291                 }
1292
1293                 hci_pi(sk)->channel = haddr.hci_channel;
1294                 break;
1295
1296         default:
1297                 if (!hci_mgmt_chan_find(haddr.hci_channel)) {
1298                         err = -EINVAL;
1299                         goto done;
1300                 }
1301
1302                 if (haddr.hci_dev != HCI_DEV_NONE) {
1303                         err = -EINVAL;
1304                         goto done;
1305                 }
1306
1307                 /* Users with CAP_NET_ADMIN capabilities are allowed
1308                  * access to all management commands and events. For
1309                  * untrusted users the interface is restricted and
1310                  * also only untrusted events are sent.
1311                  */
1312                 if (capable(CAP_NET_ADMIN))
1313                         hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
1314
1315                 hci_pi(sk)->channel = haddr.hci_channel;
1316
1317                 /* At the moment the index and unconfigured index events
1318                  * are enabled unconditionally. Setting them on each
1319                  * socket when binding keeps this functionality. They
1320                  * however might be cleared later and then sending of these
1321                  * events will be disabled, but that is then intentional.
1322                  *
1323                  * This also enables generic events that are safe to be
1324                  * received by untrusted users. Example for such events
1325                  * are changes to settings, class of device, name etc.
1326                  */
1327                 if (hci_pi(sk)->channel == HCI_CHANNEL_CONTROL) {
1328                         if (!hci_sock_gen_cookie(sk)) {
1329                                 /* In the case when a cookie has already been
1330                                  * assigned, this socket will transtion from
1331                                  * a raw socket into a control socket. To
1332                                  * allow for a clean transtion, send the
1333                                  * close notification first.
1334                                  */
1335                                 skb = create_monitor_ctrl_close(sk);
1336                                 if (skb) {
1337                                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1338                                                             HCI_SOCK_TRUSTED, NULL);
1339                                         kfree_skb(skb);
1340                                 }
1341                         }
1342
1343                         /* Send event to monitor */
1344                         skb = create_monitor_ctrl_open(sk);
1345                         if (skb) {
1346                                 hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1347                                                     HCI_SOCK_TRUSTED, NULL);
1348                                 kfree_skb(skb);
1349                         }
1350
1351                         hci_sock_set_flag(sk, HCI_MGMT_INDEX_EVENTS);
1352                         hci_sock_set_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS);
1353                         hci_sock_set_flag(sk, HCI_MGMT_OPTION_EVENTS);
1354                         hci_sock_set_flag(sk, HCI_MGMT_SETTING_EVENTS);
1355                         hci_sock_set_flag(sk, HCI_MGMT_DEV_CLASS_EVENTS);
1356                         hci_sock_set_flag(sk, HCI_MGMT_LOCAL_NAME_EVENTS);
1357                 }
1358                 break;
1359         }
1360
1361         sk->sk_state = BT_BOUND;
1362
1363 done:
1364         release_sock(sk);
1365         return err;
1366 }
1367
1368 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr,
1369                             int peer)
1370 {
1371         struct sockaddr_hci *haddr = (struct sockaddr_hci *)addr;
1372         struct sock *sk = sock->sk;
1373         struct hci_dev *hdev;
1374         int err = 0;
1375
1376         BT_DBG("sock %p sk %p", sock, sk);
1377
1378         if (peer)
1379                 return -EOPNOTSUPP;
1380
1381         lock_sock(sk);
1382
1383         hdev = hci_pi(sk)->hdev;
1384         if (!hdev) {
1385                 err = -EBADFD;
1386                 goto done;
1387         }
1388
1389         haddr->hci_family = AF_BLUETOOTH;
1390         haddr->hci_dev    = hdev->id;
1391         haddr->hci_channel= hci_pi(sk)->channel;
1392         err = sizeof(*haddr);
1393
1394 done:
1395         release_sock(sk);
1396         return err;
1397 }
1398
1399 static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg,
1400                           struct sk_buff *skb)
1401 {
1402         __u32 mask = hci_pi(sk)->cmsg_mask;
1403
1404         if (mask & HCI_CMSG_DIR) {
1405                 int incoming = bt_cb(skb)->incoming;
1406                 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(incoming),
1407                          &incoming);
1408         }
1409
1410         if (mask & HCI_CMSG_TSTAMP) {
1411 #ifdef CONFIG_COMPAT
1412                 struct old_timeval32 ctv;
1413 #endif
1414                 struct __kernel_old_timeval tv;
1415                 void *data;
1416                 int len;
1417
1418                 skb_get_timestamp(skb, &tv);
1419
1420                 data = &tv;
1421                 len = sizeof(tv);
1422 #ifdef CONFIG_COMPAT
1423                 if (!COMPAT_USE_64BIT_TIME &&
1424                     (msg->msg_flags & MSG_CMSG_COMPAT)) {
1425                         ctv.tv_sec = tv.tv_sec;
1426                         ctv.tv_usec = tv.tv_usec;
1427                         data = &ctv;
1428                         len = sizeof(ctv);
1429                 }
1430 #endif
1431
1432                 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, len, data);
1433         }
1434 }
1435
1436 static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1437                             size_t len, int flags)
1438 {
1439         int noblock = flags & MSG_DONTWAIT;
1440         struct sock *sk = sock->sk;
1441         struct sk_buff *skb;
1442         int copied, err;
1443         unsigned int skblen;
1444
1445         BT_DBG("sock %p, sk %p", sock, sk);
1446
1447         if (flags & MSG_OOB)
1448                 return -EOPNOTSUPP;
1449
1450         if (hci_pi(sk)->channel == HCI_CHANNEL_LOGGING)
1451                 return -EOPNOTSUPP;
1452
1453         if (sk->sk_state == BT_CLOSED)
1454                 return 0;
1455
1456         skb = skb_recv_datagram(sk, flags, noblock, &err);
1457         if (!skb)
1458                 return err;
1459
1460         skblen = skb->len;
1461         copied = skb->len;
1462         if (len < copied) {
1463                 msg->msg_flags |= MSG_TRUNC;
1464                 copied = len;
1465         }
1466
1467         skb_reset_transport_header(skb);
1468         err = skb_copy_datagram_msg(skb, 0, msg, copied);
1469
1470         switch (hci_pi(sk)->channel) {
1471         case HCI_CHANNEL_RAW:
1472                 hci_sock_cmsg(sk, msg, skb);
1473                 break;
1474         case HCI_CHANNEL_USER:
1475         case HCI_CHANNEL_MONITOR:
1476                 sock_recv_timestamp(msg, sk, skb);
1477                 break;
1478         default:
1479                 if (hci_mgmt_chan_find(hci_pi(sk)->channel))
1480                         sock_recv_timestamp(msg, sk, skb);
1481                 break;
1482         }
1483
1484         skb_free_datagram(sk, skb);
1485
1486         if (flags & MSG_TRUNC)
1487                 copied = skblen;
1488
1489         return err ? : copied;
1490 }
1491
1492 static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk,
1493                         struct msghdr *msg, size_t msglen)
1494 {
1495         void *buf;
1496         u8 *cp;
1497         struct mgmt_hdr *hdr;
1498         u16 opcode, index, len;
1499         struct hci_dev *hdev = NULL;
1500         const struct hci_mgmt_handler *handler;
1501         bool var_len, no_hdev;
1502         int err;
1503
1504         BT_DBG("got %zu bytes", msglen);
1505
1506         if (msglen < sizeof(*hdr))
1507                 return -EINVAL;
1508
1509         buf = kmalloc(msglen, GFP_KERNEL);
1510         if (!buf)
1511                 return -ENOMEM;
1512
1513         if (memcpy_from_msg(buf, msg, msglen)) {
1514                 err = -EFAULT;
1515                 goto done;
1516         }
1517
1518         hdr = buf;
1519         opcode = __le16_to_cpu(hdr->opcode);
1520         index = __le16_to_cpu(hdr->index);
1521         len = __le16_to_cpu(hdr->len);
1522
1523         if (len != msglen - sizeof(*hdr)) {
1524                 err = -EINVAL;
1525                 goto done;
1526         }
1527
1528         if (chan->channel == HCI_CHANNEL_CONTROL) {
1529                 struct sk_buff *skb;
1530
1531                 /* Send event to monitor */
1532                 skb = create_monitor_ctrl_command(sk, index, opcode, len,
1533                                                   buf + sizeof(*hdr));
1534                 if (skb) {
1535                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
1536                                             HCI_SOCK_TRUSTED, NULL);
1537                         kfree_skb(skb);
1538                 }
1539         }
1540
1541         if (opcode >= chan->handler_count ||
1542             chan->handlers[opcode].func == NULL) {
1543                 BT_DBG("Unknown op %u", opcode);
1544                 err = mgmt_cmd_status(sk, index, opcode,
1545                                       MGMT_STATUS_UNKNOWN_COMMAND);
1546                 goto done;
1547         }
1548
1549         handler = &chan->handlers[opcode];
1550
1551         if (!hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) &&
1552             !(handler->flags & HCI_MGMT_UNTRUSTED)) {
1553                 err = mgmt_cmd_status(sk, index, opcode,
1554                                       MGMT_STATUS_PERMISSION_DENIED);
1555                 goto done;
1556         }
1557
1558         if (index != MGMT_INDEX_NONE) {
1559                 hdev = hci_dev_get(index);
1560                 if (!hdev) {
1561                         err = mgmt_cmd_status(sk, index, opcode,
1562                                               MGMT_STATUS_INVALID_INDEX);
1563                         goto done;
1564                 }
1565
1566                 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
1567                     hci_dev_test_flag(hdev, HCI_CONFIG) ||
1568                     hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1569                         err = mgmt_cmd_status(sk, index, opcode,
1570                                               MGMT_STATUS_INVALID_INDEX);
1571                         goto done;
1572                 }
1573
1574                 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1575                     !(handler->flags & HCI_MGMT_UNCONFIGURED)) {
1576                         err = mgmt_cmd_status(sk, index, opcode,
1577                                               MGMT_STATUS_INVALID_INDEX);
1578                         goto done;
1579                 }
1580         }
1581
1582         no_hdev = (handler->flags & HCI_MGMT_NO_HDEV);
1583         if (no_hdev != !hdev) {
1584                 err = mgmt_cmd_status(sk, index, opcode,
1585                                       MGMT_STATUS_INVALID_INDEX);
1586                 goto done;
1587         }
1588
1589         var_len = (handler->flags & HCI_MGMT_VAR_LEN);
1590         if ((var_len && len < handler->data_len) ||
1591             (!var_len && len != handler->data_len)) {
1592                 err = mgmt_cmd_status(sk, index, opcode,
1593                                       MGMT_STATUS_INVALID_PARAMS);
1594                 goto done;
1595         }
1596
1597         if (hdev && chan->hdev_init)
1598                 chan->hdev_init(sk, hdev);
1599
1600         cp = buf + sizeof(*hdr);
1601
1602         err = handler->func(sk, hdev, cp, len);
1603         if (err < 0)
1604                 goto done;
1605
1606         err = msglen;
1607
1608 done:
1609         if (hdev)
1610                 hci_dev_put(hdev);
1611
1612         kfree(buf);
1613         return err;
1614 }
1615
1616 static int hci_logging_frame(struct sock *sk, struct msghdr *msg, int len)
1617 {
1618         struct hci_mon_hdr *hdr;
1619         struct sk_buff *skb;
1620         struct hci_dev *hdev;
1621         u16 index;
1622         int err;
1623
1624         /* The logging frame consists at minimum of the standard header,
1625          * the priority byte, the ident length byte and at least one string
1626          * terminator NUL byte. Anything shorter are invalid packets.
1627          */
1628         if (len < sizeof(*hdr) + 3)
1629                 return -EINVAL;
1630
1631         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
1632         if (!skb)
1633                 return err;
1634
1635         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1636                 err = -EFAULT;
1637                 goto drop;
1638         }
1639
1640         hdr = (void *)skb->data;
1641
1642         if (__le16_to_cpu(hdr->len) != len - sizeof(*hdr)) {
1643                 err = -EINVAL;
1644                 goto drop;
1645         }
1646
1647         if (__le16_to_cpu(hdr->opcode) == 0x0000) {
1648                 __u8 priority = skb->data[sizeof(*hdr)];
1649                 __u8 ident_len = skb->data[sizeof(*hdr) + 1];
1650
1651                 /* Only the priorities 0-7 are valid and with that any other
1652                  * value results in an invalid packet.
1653                  *
1654                  * The priority byte is followed by an ident length byte and
1655                  * the NUL terminated ident string. Check that the ident
1656                  * length is not overflowing the packet and also that the
1657                  * ident string itself is NUL terminated. In case the ident
1658                  * length is zero, the length value actually doubles as NUL
1659                  * terminator identifier.
1660                  *
1661                  * The message follows the ident string (if present) and
1662                  * must be NUL terminated. Otherwise it is not a valid packet.
1663                  */
1664                 if (priority > 7 || skb->data[len - 1] != 0x00 ||
1665                     ident_len > len - sizeof(*hdr) - 3 ||
1666                     skb->data[sizeof(*hdr) + ident_len + 1] != 0x00) {
1667                         err = -EINVAL;
1668                         goto drop;
1669                 }
1670         } else {
1671                 err = -EINVAL;
1672                 goto drop;
1673         }
1674
1675         index = __le16_to_cpu(hdr->index);
1676
1677         if (index != MGMT_INDEX_NONE) {
1678                 hdev = hci_dev_get(index);
1679                 if (!hdev) {
1680                         err = -ENODEV;
1681                         goto drop;
1682                 }
1683         } else {
1684                 hdev = NULL;
1685         }
1686
1687         hdr->opcode = cpu_to_le16(HCI_MON_USER_LOGGING);
1688
1689         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb, HCI_SOCK_TRUSTED, NULL);
1690         err = len;
1691
1692         if (hdev)
1693                 hci_dev_put(hdev);
1694
1695 drop:
1696         kfree_skb(skb);
1697         return err;
1698 }
1699
1700 static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg,
1701                             size_t len)
1702 {
1703         struct sock *sk = sock->sk;
1704         struct hci_mgmt_chan *chan;
1705         struct hci_dev *hdev;
1706         struct sk_buff *skb;
1707         int err;
1708
1709         BT_DBG("sock %p sk %p", sock, sk);
1710
1711         if (msg->msg_flags & MSG_OOB)
1712                 return -EOPNOTSUPP;
1713
1714         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE|
1715                                MSG_CMSG_COMPAT))
1716                 return -EINVAL;
1717
1718         if (len < 4 || len > HCI_MAX_FRAME_SIZE)
1719                 return -EINVAL;
1720
1721         lock_sock(sk);
1722
1723         switch (hci_pi(sk)->channel) {
1724         case HCI_CHANNEL_RAW:
1725         case HCI_CHANNEL_USER:
1726                 break;
1727         case HCI_CHANNEL_MONITOR:
1728                 err = -EOPNOTSUPP;
1729                 goto done;
1730         case HCI_CHANNEL_LOGGING:
1731                 err = hci_logging_frame(sk, msg, len);
1732                 goto done;
1733         default:
1734                 mutex_lock(&mgmt_chan_list_lock);
1735                 chan = __hci_mgmt_chan_find(hci_pi(sk)->channel);
1736                 if (chan)
1737                         err = hci_mgmt_cmd(chan, sk, msg, len);
1738                 else
1739                         err = -EINVAL;
1740
1741                 mutex_unlock(&mgmt_chan_list_lock);
1742                 goto done;
1743         }
1744
1745         hdev = hci_pi(sk)->hdev;
1746         if (!hdev) {
1747                 err = -EBADFD;
1748                 goto done;
1749         }
1750
1751         if (!test_bit(HCI_UP, &hdev->flags)) {
1752                 err = -ENETDOWN;
1753                 goto done;
1754         }
1755
1756         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
1757         if (!skb)
1758                 goto done;
1759
1760         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1761                 err = -EFAULT;
1762                 goto drop;
1763         }
1764
1765         hci_skb_pkt_type(skb) = skb->data[0];
1766         skb_pull(skb, 1);
1767
1768         if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
1769                 /* No permission check is needed for user channel
1770                  * since that gets enforced when binding the socket.
1771                  *
1772                  * However check that the packet type is valid.
1773                  */
1774                 if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
1775                     hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1776                     hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
1777                     hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
1778                         err = -EINVAL;
1779                         goto drop;
1780                 }
1781
1782                 skb_queue_tail(&hdev->raw_q, skb);
1783                 queue_work(hdev->workqueue, &hdev->tx_work);
1784         } else if (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT) {
1785                 u16 opcode = get_unaligned_le16(skb->data);
1786                 u16 ogf = hci_opcode_ogf(opcode);
1787                 u16 ocf = hci_opcode_ocf(opcode);
1788
1789                 if (((ogf > HCI_SFLT_MAX_OGF) ||
1790                      !hci_test_bit(ocf & HCI_FLT_OCF_BITS,
1791                                    &hci_sec_filter.ocf_mask[ogf])) &&
1792                     !capable(CAP_NET_RAW)) {
1793                         err = -EPERM;
1794                         goto drop;
1795                 }
1796
1797                 /* Since the opcode has already been extracted here, store
1798                  * a copy of the value for later use by the drivers.
1799                  */
1800                 hci_skb_opcode(skb) = opcode;
1801
1802                 if (ogf == 0x3f) {
1803                         skb_queue_tail(&hdev->raw_q, skb);
1804                         queue_work(hdev->workqueue, &hdev->tx_work);
1805                 } else {
1806                         /* Stand-alone HCI commands must be flagged as
1807                          * single-command requests.
1808                          */
1809                         bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
1810
1811                         skb_queue_tail(&hdev->cmd_q, skb);
1812                         queue_work(hdev->workqueue, &hdev->cmd_work);
1813                 }
1814         } else {
1815                 if (!capable(CAP_NET_RAW)) {
1816                         err = -EPERM;
1817                         goto drop;
1818                 }
1819
1820                 if (hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1821                     hci_skb_pkt_type(skb) != HCI_SCODATA_PKT &&
1822                     hci_skb_pkt_type(skb) != HCI_ISODATA_PKT) {
1823                         err = -EINVAL;
1824                         goto drop;
1825                 }
1826
1827                 skb_queue_tail(&hdev->raw_q, skb);
1828                 queue_work(hdev->workqueue, &hdev->tx_work);
1829         }
1830
1831         err = len;
1832
1833 done:
1834         release_sock(sk);
1835         return err;
1836
1837 drop:
1838         kfree_skb(skb);
1839         goto done;
1840 }
1841
1842 static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
1843                                char __user *optval, unsigned int len)
1844 {
1845         struct hci_ufilter uf = { .opcode = 0 };
1846         struct sock *sk = sock->sk;
1847         int err = 0, opt = 0;
1848
1849         BT_DBG("sk %p, opt %d", sk, optname);
1850
1851         if (level != SOL_HCI)
1852                 return -ENOPROTOOPT;
1853
1854         lock_sock(sk);
1855
1856         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
1857                 err = -EBADFD;
1858                 goto done;
1859         }
1860
1861         switch (optname) {
1862         case HCI_DATA_DIR:
1863                 if (get_user(opt, (int __user *)optval)) {
1864                         err = -EFAULT;
1865                         break;
1866                 }
1867
1868                 if (opt)
1869                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
1870                 else
1871                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
1872                 break;
1873
1874         case HCI_TIME_STAMP:
1875                 if (get_user(opt, (int __user *)optval)) {
1876                         err = -EFAULT;
1877                         break;
1878                 }
1879
1880                 if (opt)
1881                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
1882                 else
1883                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
1884                 break;
1885
1886         case HCI_FILTER:
1887                 {
1888                         struct hci_filter *f = &hci_pi(sk)->filter;
1889
1890                         uf.type_mask = f->type_mask;
1891                         uf.opcode    = f->opcode;
1892                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
1893                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
1894                 }
1895
1896                 len = min_t(unsigned int, len, sizeof(uf));
1897                 if (copy_from_user(&uf, optval, len)) {
1898                         err = -EFAULT;
1899                         break;
1900                 }
1901
1902                 if (!capable(CAP_NET_RAW)) {
1903                         uf.type_mask &= hci_sec_filter.type_mask;
1904                         uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
1905                         uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
1906                 }
1907
1908                 {
1909                         struct hci_filter *f = &hci_pi(sk)->filter;
1910
1911                         f->type_mask = uf.type_mask;
1912                         f->opcode    = uf.opcode;
1913                         *((u32 *) f->event_mask + 0) = uf.event_mask[0];
1914                         *((u32 *) f->event_mask + 1) = uf.event_mask[1];
1915                 }
1916                 break;
1917
1918         default:
1919                 err = -ENOPROTOOPT;
1920                 break;
1921         }
1922
1923 done:
1924         release_sock(sk);
1925         return err;
1926 }
1927
1928 static int hci_sock_getsockopt(struct socket *sock, int level, int optname,
1929                                char __user *optval, int __user *optlen)
1930 {
1931         struct hci_ufilter uf;
1932         struct sock *sk = sock->sk;
1933         int len, opt, err = 0;
1934
1935         BT_DBG("sk %p, opt %d", sk, optname);
1936
1937         if (level != SOL_HCI)
1938                 return -ENOPROTOOPT;
1939
1940         if (get_user(len, optlen))
1941                 return -EFAULT;
1942
1943         lock_sock(sk);
1944
1945         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
1946                 err = -EBADFD;
1947                 goto done;
1948         }
1949
1950         switch (optname) {
1951         case HCI_DATA_DIR:
1952                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
1953                         opt = 1;
1954                 else
1955                         opt = 0;
1956
1957                 if (put_user(opt, optval))
1958                         err = -EFAULT;
1959                 break;
1960
1961         case HCI_TIME_STAMP:
1962                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
1963                         opt = 1;
1964                 else
1965                         opt = 0;
1966
1967                 if (put_user(opt, optval))
1968                         err = -EFAULT;
1969                 break;
1970
1971         case HCI_FILTER:
1972                 {
1973                         struct hci_filter *f = &hci_pi(sk)->filter;
1974
1975                         memset(&uf, 0, sizeof(uf));
1976                         uf.type_mask = f->type_mask;
1977                         uf.opcode    = f->opcode;
1978                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
1979                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
1980                 }
1981
1982                 len = min_t(unsigned int, len, sizeof(uf));
1983                 if (copy_to_user(optval, &uf, len))
1984                         err = -EFAULT;
1985                 break;
1986
1987         default:
1988                 err = -ENOPROTOOPT;
1989                 break;
1990         }
1991
1992 done:
1993         release_sock(sk);
1994         return err;
1995 }
1996
1997 static const struct proto_ops hci_sock_ops = {
1998         .family         = PF_BLUETOOTH,
1999         .owner          = THIS_MODULE,
2000         .release        = hci_sock_release,
2001         .bind           = hci_sock_bind,
2002         .getname        = hci_sock_getname,
2003         .sendmsg        = hci_sock_sendmsg,
2004         .recvmsg        = hci_sock_recvmsg,
2005         .ioctl          = hci_sock_ioctl,
2006 #ifdef CONFIG_COMPAT
2007         .compat_ioctl   = hci_sock_compat_ioctl,
2008 #endif
2009         .poll           = datagram_poll,
2010         .listen         = sock_no_listen,
2011         .shutdown       = sock_no_shutdown,
2012         .setsockopt     = hci_sock_setsockopt,
2013         .getsockopt     = hci_sock_getsockopt,
2014         .connect        = sock_no_connect,
2015         .socketpair     = sock_no_socketpair,
2016         .accept         = sock_no_accept,
2017         .mmap           = sock_no_mmap
2018 };
2019
2020 static struct proto hci_sk_proto = {
2021         .name           = "HCI",
2022         .owner          = THIS_MODULE,
2023         .obj_size       = sizeof(struct hci_pinfo)
2024 };
2025
2026 static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
2027                            int kern)
2028 {
2029         struct sock *sk;
2030
2031         BT_DBG("sock %p", sock);
2032
2033         if (sock->type != SOCK_RAW)
2034                 return -ESOCKTNOSUPPORT;
2035
2036         sock->ops = &hci_sock_ops;
2037
2038         sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto, kern);
2039         if (!sk)
2040                 return -ENOMEM;
2041
2042         sock_init_data(sock, sk);
2043
2044         sock_reset_flag(sk, SOCK_ZAPPED);
2045
2046         sk->sk_protocol = protocol;
2047
2048         sock->state = SS_UNCONNECTED;
2049         sk->sk_state = BT_OPEN;
2050
2051         bt_sock_link(&hci_sk_list, sk);
2052         return 0;
2053 }
2054
2055 static const struct net_proto_family hci_sock_family_ops = {
2056         .family = PF_BLUETOOTH,
2057         .owner  = THIS_MODULE,
2058         .create = hci_sock_create,
2059 };
2060
2061 int __init hci_sock_init(void)
2062 {
2063         int err;
2064
2065         BUILD_BUG_ON(sizeof(struct sockaddr_hci) > sizeof(struct sockaddr));
2066
2067         err = proto_register(&hci_sk_proto, 0);
2068         if (err < 0)
2069                 return err;
2070
2071         err = bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops);
2072         if (err < 0) {
2073                 BT_ERR("HCI socket registration failed");
2074                 goto error;
2075         }
2076
2077         err = bt_procfs_init(&init_net, "hci", &hci_sk_list, NULL);
2078         if (err < 0) {
2079                 BT_ERR("Failed to create HCI proc file");
2080                 bt_sock_unregister(BTPROTO_HCI);
2081                 goto error;
2082         }
2083
2084         BT_INFO("HCI socket layer initialized");
2085
2086         return 0;
2087
2088 error:
2089         proto_unregister(&hci_sk_proto);
2090         return err;
2091 }
2092
2093 void hci_sock_cleanup(void)
2094 {
2095         bt_procfs_cleanup(&init_net, "hci");
2096         bt_sock_unregister(BTPROTO_HCI);
2097         proto_unregister(&hci_sk_proto);
2098 }