mm/gup, x86/mm/pkeys: Check VMAs and PTEs for protection keys
[cascardo/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
27 #include <linux/export.h>
28 #include <linux/utsname.h>
29 #include <asm/unaligned.h>
30
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/hci_mon.h>
34 #include <net/bluetooth/mgmt.h>
35
36 #include "mgmt_util.h"
37
38 static LIST_HEAD(mgmt_chan_list);
39 static DEFINE_MUTEX(mgmt_chan_list_lock);
40
41 static atomic_t monitor_promisc = ATOMIC_INIT(0);
42
43 /* ----- HCI socket interface ----- */
44
45 /* Socket info */
46 #define hci_pi(sk) ((struct hci_pinfo *) sk)
47
48 struct hci_pinfo {
49         struct bt_sock    bt;
50         struct hci_dev    *hdev;
51         struct hci_filter filter;
52         __u32             cmsg_mask;
53         unsigned short    channel;
54         unsigned long     flags;
55 };
56
57 void hci_sock_set_flag(struct sock *sk, int nr)
58 {
59         set_bit(nr, &hci_pi(sk)->flags);
60 }
61
62 void hci_sock_clear_flag(struct sock *sk, int nr)
63 {
64         clear_bit(nr, &hci_pi(sk)->flags);
65 }
66
67 int hci_sock_test_flag(struct sock *sk, int nr)
68 {
69         return test_bit(nr, &hci_pi(sk)->flags);
70 }
71
72 unsigned short hci_sock_get_channel(struct sock *sk)
73 {
74         return hci_pi(sk)->channel;
75 }
76
77 static inline int hci_test_bit(int nr, const void *addr)
78 {
79         return *((const __u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
80 }
81
82 /* Security filter */
83 #define HCI_SFLT_MAX_OGF  5
84
85 struct hci_sec_filter {
86         __u32 type_mask;
87         __u32 event_mask[2];
88         __u32 ocf_mask[HCI_SFLT_MAX_OGF + 1][4];
89 };
90
91 static const struct hci_sec_filter hci_sec_filter = {
92         /* Packet types */
93         0x10,
94         /* Events */
95         { 0x1000d9fe, 0x0000b00c },
96         /* Commands */
97         {
98                 { 0x0 },
99                 /* OGF_LINK_CTL */
100                 { 0xbe000006, 0x00000001, 0x00000000, 0x00 },
101                 /* OGF_LINK_POLICY */
102                 { 0x00005200, 0x00000000, 0x00000000, 0x00 },
103                 /* OGF_HOST_CTL */
104                 { 0xaab00200, 0x2b402aaa, 0x05220154, 0x00 },
105                 /* OGF_INFO_PARAM */
106                 { 0x000002be, 0x00000000, 0x00000000, 0x00 },
107                 /* OGF_STATUS_PARAM */
108                 { 0x000000ea, 0x00000000, 0x00000000, 0x00 }
109         }
110 };
111
112 static struct bt_sock_list hci_sk_list = {
113         .lock = __RW_LOCK_UNLOCKED(hci_sk_list.lock)
114 };
115
116 static bool is_filtered_packet(struct sock *sk, struct sk_buff *skb)
117 {
118         struct hci_filter *flt;
119         int flt_type, flt_event;
120
121         /* Apply filter */
122         flt = &hci_pi(sk)->filter;
123
124         flt_type = hci_skb_pkt_type(skb) & HCI_FLT_TYPE_BITS;
125
126         if (!test_bit(flt_type, &flt->type_mask))
127                 return true;
128
129         /* Extra filter for event packets only */
130         if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT)
131                 return false;
132
133         flt_event = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
134
135         if (!hci_test_bit(flt_event, &flt->event_mask))
136                 return true;
137
138         /* Check filter only when opcode is set */
139         if (!flt->opcode)
140                 return false;
141
142         if (flt_event == HCI_EV_CMD_COMPLETE &&
143             flt->opcode != get_unaligned((__le16 *)(skb->data + 3)))
144                 return true;
145
146         if (flt_event == HCI_EV_CMD_STATUS &&
147             flt->opcode != get_unaligned((__le16 *)(skb->data + 4)))
148                 return true;
149
150         return false;
151 }
152
153 /* Send frame to RAW socket */
154 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
155 {
156         struct sock *sk;
157         struct sk_buff *skb_copy = NULL;
158
159         BT_DBG("hdev %p len %d", hdev, skb->len);
160
161         read_lock(&hci_sk_list.lock);
162
163         sk_for_each(sk, &hci_sk_list.head) {
164                 struct sk_buff *nskb;
165
166                 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev)
167                         continue;
168
169                 /* Don't send frame to the socket it came from */
170                 if (skb->sk == sk)
171                         continue;
172
173                 if (hci_pi(sk)->channel == HCI_CHANNEL_RAW) {
174                         if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
175                             hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
176                             hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
177                             hci_skb_pkt_type(skb) != HCI_SCODATA_PKT)
178                                 continue;
179                         if (is_filtered_packet(sk, skb))
180                                 continue;
181                 } else if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
182                         if (!bt_cb(skb)->incoming)
183                                 continue;
184                         if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
185                             hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
186                             hci_skb_pkt_type(skb) != HCI_SCODATA_PKT)
187                                 continue;
188                 } else {
189                         /* Don't send frame to other channel types */
190                         continue;
191                 }
192
193                 if (!skb_copy) {
194                         /* Create a private copy with headroom */
195                         skb_copy = __pskb_copy_fclone(skb, 1, GFP_ATOMIC, true);
196                         if (!skb_copy)
197                                 continue;
198
199                         /* Put type byte before the data */
200                         memcpy(skb_push(skb_copy, 1), &hci_skb_pkt_type(skb), 1);
201                 }
202
203                 nskb = skb_clone(skb_copy, GFP_ATOMIC);
204                 if (!nskb)
205                         continue;
206
207                 if (sock_queue_rcv_skb(sk, nskb))
208                         kfree_skb(nskb);
209         }
210
211         read_unlock(&hci_sk_list.lock);
212
213         kfree_skb(skb_copy);
214 }
215
216 /* Send frame to sockets with specific channel */
217 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
218                          int flag, struct sock *skip_sk)
219 {
220         struct sock *sk;
221
222         BT_DBG("channel %u len %d", channel, skb->len);
223
224         read_lock(&hci_sk_list.lock);
225
226         sk_for_each(sk, &hci_sk_list.head) {
227                 struct sk_buff *nskb;
228
229                 /* Ignore socket without the flag set */
230                 if (!hci_sock_test_flag(sk, flag))
231                         continue;
232
233                 /* Skip the original socket */
234                 if (sk == skip_sk)
235                         continue;
236
237                 if (sk->sk_state != BT_BOUND)
238                         continue;
239
240                 if (hci_pi(sk)->channel != channel)
241                         continue;
242
243                 nskb = skb_clone(skb, GFP_ATOMIC);
244                 if (!nskb)
245                         continue;
246
247                 if (sock_queue_rcv_skb(sk, nskb))
248                         kfree_skb(nskb);
249         }
250
251         read_unlock(&hci_sk_list.lock);
252 }
253
254 /* Send frame to monitor socket */
255 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb)
256 {
257         struct sk_buff *skb_copy = NULL;
258         struct hci_mon_hdr *hdr;
259         __le16 opcode;
260
261         if (!atomic_read(&monitor_promisc))
262                 return;
263
264         BT_DBG("hdev %p len %d", hdev, skb->len);
265
266         switch (hci_skb_pkt_type(skb)) {
267         case HCI_COMMAND_PKT:
268                 opcode = cpu_to_le16(HCI_MON_COMMAND_PKT);
269                 break;
270         case HCI_EVENT_PKT:
271                 opcode = cpu_to_le16(HCI_MON_EVENT_PKT);
272                 break;
273         case HCI_ACLDATA_PKT:
274                 if (bt_cb(skb)->incoming)
275                         opcode = cpu_to_le16(HCI_MON_ACL_RX_PKT);
276                 else
277                         opcode = cpu_to_le16(HCI_MON_ACL_TX_PKT);
278                 break;
279         case HCI_SCODATA_PKT:
280                 if (bt_cb(skb)->incoming)
281                         opcode = cpu_to_le16(HCI_MON_SCO_RX_PKT);
282                 else
283                         opcode = cpu_to_le16(HCI_MON_SCO_TX_PKT);
284                 break;
285         case HCI_DIAG_PKT:
286                 opcode = cpu_to_le16(HCI_MON_VENDOR_DIAG);
287                 break;
288         default:
289                 return;
290         }
291
292         /* Create a private copy with headroom */
293         skb_copy = __pskb_copy_fclone(skb, HCI_MON_HDR_SIZE, GFP_ATOMIC, true);
294         if (!skb_copy)
295                 return;
296
297         /* Put header before the data */
298         hdr = (void *)skb_push(skb_copy, HCI_MON_HDR_SIZE);
299         hdr->opcode = opcode;
300         hdr->index = cpu_to_le16(hdev->id);
301         hdr->len = cpu_to_le16(skb->len);
302
303         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb_copy,
304                             HCI_SOCK_TRUSTED, NULL);
305         kfree_skb(skb_copy);
306 }
307
308 static struct sk_buff *create_monitor_event(struct hci_dev *hdev, int event)
309 {
310         struct hci_mon_hdr *hdr;
311         struct hci_mon_new_index *ni;
312         struct hci_mon_index_info *ii;
313         struct sk_buff *skb;
314         __le16 opcode;
315
316         switch (event) {
317         case HCI_DEV_REG:
318                 skb = bt_skb_alloc(HCI_MON_NEW_INDEX_SIZE, GFP_ATOMIC);
319                 if (!skb)
320                         return NULL;
321
322                 ni = (void *)skb_put(skb, HCI_MON_NEW_INDEX_SIZE);
323                 ni->type = hdev->dev_type;
324                 ni->bus = hdev->bus;
325                 bacpy(&ni->bdaddr, &hdev->bdaddr);
326                 memcpy(ni->name, hdev->name, 8);
327
328                 opcode = cpu_to_le16(HCI_MON_NEW_INDEX);
329                 break;
330
331         case HCI_DEV_UNREG:
332                 skb = bt_skb_alloc(0, GFP_ATOMIC);
333                 if (!skb)
334                         return NULL;
335
336                 opcode = cpu_to_le16(HCI_MON_DEL_INDEX);
337                 break;
338
339         case HCI_DEV_SETUP:
340                 if (hdev->manufacturer == 0xffff)
341                         return NULL;
342
343                 /* fall through */
344
345         case HCI_DEV_UP:
346                 skb = bt_skb_alloc(HCI_MON_INDEX_INFO_SIZE, GFP_ATOMIC);
347                 if (!skb)
348                         return NULL;
349
350                 ii = (void *)skb_put(skb, HCI_MON_INDEX_INFO_SIZE);
351                 bacpy(&ii->bdaddr, &hdev->bdaddr);
352                 ii->manufacturer = cpu_to_le16(hdev->manufacturer);
353
354                 opcode = cpu_to_le16(HCI_MON_INDEX_INFO);
355                 break;
356
357         case HCI_DEV_OPEN:
358                 skb = bt_skb_alloc(0, GFP_ATOMIC);
359                 if (!skb)
360                         return NULL;
361
362                 opcode = cpu_to_le16(HCI_MON_OPEN_INDEX);
363                 break;
364
365         case HCI_DEV_CLOSE:
366                 skb = bt_skb_alloc(0, GFP_ATOMIC);
367                 if (!skb)
368                         return NULL;
369
370                 opcode = cpu_to_le16(HCI_MON_CLOSE_INDEX);
371                 break;
372
373         default:
374                 return NULL;
375         }
376
377         __net_timestamp(skb);
378
379         hdr = (void *)skb_push(skb, HCI_MON_HDR_SIZE);
380         hdr->opcode = opcode;
381         hdr->index = cpu_to_le16(hdev->id);
382         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
383
384         return skb;
385 }
386
387 static void __printf(2, 3)
388 send_monitor_note(struct sock *sk, const char *fmt, ...)
389 {
390         size_t len;
391         struct hci_mon_hdr *hdr;
392         struct sk_buff *skb;
393         va_list args;
394
395         va_start(args, fmt);
396         len = vsnprintf(NULL, 0, fmt, args);
397         va_end(args);
398
399         skb = bt_skb_alloc(len + 1, GFP_ATOMIC);
400         if (!skb)
401                 return;
402
403         va_start(args, fmt);
404         vsprintf(skb_put(skb, len), fmt, args);
405         *skb_put(skb, 1) = 0;
406         va_end(args);
407
408         __net_timestamp(skb);
409
410         hdr = (void *)skb_push(skb, HCI_MON_HDR_SIZE);
411         hdr->opcode = cpu_to_le16(HCI_MON_SYSTEM_NOTE);
412         hdr->index = cpu_to_le16(HCI_DEV_NONE);
413         hdr->len = cpu_to_le16(skb->len - HCI_MON_HDR_SIZE);
414
415         if (sock_queue_rcv_skb(sk, skb))
416                 kfree_skb(skb);
417 }
418
419 static void send_monitor_replay(struct sock *sk)
420 {
421         struct hci_dev *hdev;
422
423         read_lock(&hci_dev_list_lock);
424
425         list_for_each_entry(hdev, &hci_dev_list, list) {
426                 struct sk_buff *skb;
427
428                 skb = create_monitor_event(hdev, HCI_DEV_REG);
429                 if (!skb)
430                         continue;
431
432                 if (sock_queue_rcv_skb(sk, skb))
433                         kfree_skb(skb);
434
435                 if (!test_bit(HCI_RUNNING, &hdev->flags))
436                         continue;
437
438                 skb = create_monitor_event(hdev, HCI_DEV_OPEN);
439                 if (!skb)
440                         continue;
441
442                 if (sock_queue_rcv_skb(sk, skb))
443                         kfree_skb(skb);
444
445                 if (test_bit(HCI_UP, &hdev->flags))
446                         skb = create_monitor_event(hdev, HCI_DEV_UP);
447                 else if (hci_dev_test_flag(hdev, HCI_SETUP))
448                         skb = create_monitor_event(hdev, HCI_DEV_SETUP);
449                 else
450                         skb = NULL;
451
452                 if (skb) {
453                         if (sock_queue_rcv_skb(sk, skb))
454                                 kfree_skb(skb);
455                 }
456         }
457
458         read_unlock(&hci_dev_list_lock);
459 }
460
461 /* Generate internal stack event */
462 static void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
463 {
464         struct hci_event_hdr *hdr;
465         struct hci_ev_stack_internal *ev;
466         struct sk_buff *skb;
467
468         skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
469         if (!skb)
470                 return;
471
472         hdr = (void *)skb_put(skb, HCI_EVENT_HDR_SIZE);
473         hdr->evt  = HCI_EV_STACK_INTERNAL;
474         hdr->plen = sizeof(*ev) + dlen;
475
476         ev  = (void *)skb_put(skb, sizeof(*ev) + dlen);
477         ev->type = type;
478         memcpy(ev->data, data, dlen);
479
480         bt_cb(skb)->incoming = 1;
481         __net_timestamp(skb);
482
483         hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
484         hci_send_to_sock(hdev, skb);
485         kfree_skb(skb);
486 }
487
488 void hci_sock_dev_event(struct hci_dev *hdev, int event)
489 {
490         BT_DBG("hdev %s event %d", hdev->name, event);
491
492         if (atomic_read(&monitor_promisc)) {
493                 struct sk_buff *skb;
494
495                 /* Send event to monitor */
496                 skb = create_monitor_event(hdev, event);
497                 if (skb) {
498                         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
499                                             HCI_SOCK_TRUSTED, NULL);
500                         kfree_skb(skb);
501                 }
502         }
503
504         if (event <= HCI_DEV_DOWN) {
505                 struct hci_ev_si_device ev;
506
507                 /* Send event to sockets */
508                 ev.event  = event;
509                 ev.dev_id = hdev->id;
510                 hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
511         }
512
513         if (event == HCI_DEV_UNREG) {
514                 struct sock *sk;
515
516                 /* Detach sockets from device */
517                 read_lock(&hci_sk_list.lock);
518                 sk_for_each(sk, &hci_sk_list.head) {
519                         bh_lock_sock_nested(sk);
520                         if (hci_pi(sk)->hdev == hdev) {
521                                 hci_pi(sk)->hdev = NULL;
522                                 sk->sk_err = EPIPE;
523                                 sk->sk_state = BT_OPEN;
524                                 sk->sk_state_change(sk);
525
526                                 hci_dev_put(hdev);
527                         }
528                         bh_unlock_sock(sk);
529                 }
530                 read_unlock(&hci_sk_list.lock);
531         }
532 }
533
534 static struct hci_mgmt_chan *__hci_mgmt_chan_find(unsigned short channel)
535 {
536         struct hci_mgmt_chan *c;
537
538         list_for_each_entry(c, &mgmt_chan_list, list) {
539                 if (c->channel == channel)
540                         return c;
541         }
542
543         return NULL;
544 }
545
546 static struct hci_mgmt_chan *hci_mgmt_chan_find(unsigned short channel)
547 {
548         struct hci_mgmt_chan *c;
549
550         mutex_lock(&mgmt_chan_list_lock);
551         c = __hci_mgmt_chan_find(channel);
552         mutex_unlock(&mgmt_chan_list_lock);
553
554         return c;
555 }
556
557 int hci_mgmt_chan_register(struct hci_mgmt_chan *c)
558 {
559         if (c->channel < HCI_CHANNEL_CONTROL)
560                 return -EINVAL;
561
562         mutex_lock(&mgmt_chan_list_lock);
563         if (__hci_mgmt_chan_find(c->channel)) {
564                 mutex_unlock(&mgmt_chan_list_lock);
565                 return -EALREADY;
566         }
567
568         list_add_tail(&c->list, &mgmt_chan_list);
569
570         mutex_unlock(&mgmt_chan_list_lock);
571
572         return 0;
573 }
574 EXPORT_SYMBOL(hci_mgmt_chan_register);
575
576 void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c)
577 {
578         mutex_lock(&mgmt_chan_list_lock);
579         list_del(&c->list);
580         mutex_unlock(&mgmt_chan_list_lock);
581 }
582 EXPORT_SYMBOL(hci_mgmt_chan_unregister);
583
584 static int hci_sock_release(struct socket *sock)
585 {
586         struct sock *sk = sock->sk;
587         struct hci_dev *hdev;
588
589         BT_DBG("sock %p sk %p", sock, sk);
590
591         if (!sk)
592                 return 0;
593
594         hdev = hci_pi(sk)->hdev;
595
596         if (hci_pi(sk)->channel == HCI_CHANNEL_MONITOR)
597                 atomic_dec(&monitor_promisc);
598
599         bt_sock_unlink(&hci_sk_list, sk);
600
601         if (hdev) {
602                 if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
603                         /* When releasing an user channel exclusive access,
604                          * call hci_dev_do_close directly instead of calling
605                          * hci_dev_close to ensure the exclusive access will
606                          * be released and the controller brought back down.
607                          *
608                          * The checking of HCI_AUTO_OFF is not needed in this
609                          * case since it will have been cleared already when
610                          * opening the user channel.
611                          */
612                         hci_dev_do_close(hdev);
613                         hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
614                         mgmt_index_added(hdev);
615                 }
616
617                 atomic_dec(&hdev->promisc);
618                 hci_dev_put(hdev);
619         }
620
621         sock_orphan(sk);
622
623         skb_queue_purge(&sk->sk_receive_queue);
624         skb_queue_purge(&sk->sk_write_queue);
625
626         sock_put(sk);
627         return 0;
628 }
629
630 static int hci_sock_blacklist_add(struct hci_dev *hdev, void __user *arg)
631 {
632         bdaddr_t bdaddr;
633         int err;
634
635         if (copy_from_user(&bdaddr, arg, sizeof(bdaddr)))
636                 return -EFAULT;
637
638         hci_dev_lock(hdev);
639
640         err = hci_bdaddr_list_add(&hdev->blacklist, &bdaddr, BDADDR_BREDR);
641
642         hci_dev_unlock(hdev);
643
644         return err;
645 }
646
647 static int hci_sock_blacklist_del(struct hci_dev *hdev, void __user *arg)
648 {
649         bdaddr_t bdaddr;
650         int err;
651
652         if (copy_from_user(&bdaddr, arg, sizeof(bdaddr)))
653                 return -EFAULT;
654
655         hci_dev_lock(hdev);
656
657         err = hci_bdaddr_list_del(&hdev->blacklist, &bdaddr, BDADDR_BREDR);
658
659         hci_dev_unlock(hdev);
660
661         return err;
662 }
663
664 /* Ioctls that require bound socket */
665 static int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd,
666                                 unsigned long arg)
667 {
668         struct hci_dev *hdev = hci_pi(sk)->hdev;
669
670         if (!hdev)
671                 return -EBADFD;
672
673         if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
674                 return -EBUSY;
675
676         if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
677                 return -EOPNOTSUPP;
678
679         if (hdev->dev_type != HCI_BREDR)
680                 return -EOPNOTSUPP;
681
682         switch (cmd) {
683         case HCISETRAW:
684                 if (!capable(CAP_NET_ADMIN))
685                         return -EPERM;
686                 return -EOPNOTSUPP;
687
688         case HCIGETCONNINFO:
689                 return hci_get_conn_info(hdev, (void __user *)arg);
690
691         case HCIGETAUTHINFO:
692                 return hci_get_auth_info(hdev, (void __user *)arg);
693
694         case HCIBLOCKADDR:
695                 if (!capable(CAP_NET_ADMIN))
696                         return -EPERM;
697                 return hci_sock_blacklist_add(hdev, (void __user *)arg);
698
699         case HCIUNBLOCKADDR:
700                 if (!capable(CAP_NET_ADMIN))
701                         return -EPERM;
702                 return hci_sock_blacklist_del(hdev, (void __user *)arg);
703         }
704
705         return -ENOIOCTLCMD;
706 }
707
708 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd,
709                           unsigned long arg)
710 {
711         void __user *argp = (void __user *)arg;
712         struct sock *sk = sock->sk;
713         int err;
714
715         BT_DBG("cmd %x arg %lx", cmd, arg);
716
717         lock_sock(sk);
718
719         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
720                 err = -EBADFD;
721                 goto done;
722         }
723
724         release_sock(sk);
725
726         switch (cmd) {
727         case HCIGETDEVLIST:
728                 return hci_get_dev_list(argp);
729
730         case HCIGETDEVINFO:
731                 return hci_get_dev_info(argp);
732
733         case HCIGETCONNLIST:
734                 return hci_get_conn_list(argp);
735
736         case HCIDEVUP:
737                 if (!capable(CAP_NET_ADMIN))
738                         return -EPERM;
739                 return hci_dev_open(arg);
740
741         case HCIDEVDOWN:
742                 if (!capable(CAP_NET_ADMIN))
743                         return -EPERM;
744                 return hci_dev_close(arg);
745
746         case HCIDEVRESET:
747                 if (!capable(CAP_NET_ADMIN))
748                         return -EPERM;
749                 return hci_dev_reset(arg);
750
751         case HCIDEVRESTAT:
752                 if (!capable(CAP_NET_ADMIN))
753                         return -EPERM;
754                 return hci_dev_reset_stat(arg);
755
756         case HCISETSCAN:
757         case HCISETAUTH:
758         case HCISETENCRYPT:
759         case HCISETPTYPE:
760         case HCISETLINKPOL:
761         case HCISETLINKMODE:
762         case HCISETACLMTU:
763         case HCISETSCOMTU:
764                 if (!capable(CAP_NET_ADMIN))
765                         return -EPERM;
766                 return hci_dev_cmd(cmd, argp);
767
768         case HCIINQUIRY:
769                 return hci_inquiry(argp);
770         }
771
772         lock_sock(sk);
773
774         err = hci_sock_bound_ioctl(sk, cmd, arg);
775
776 done:
777         release_sock(sk);
778         return err;
779 }
780
781 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr,
782                          int addr_len)
783 {
784         struct sockaddr_hci haddr;
785         struct sock *sk = sock->sk;
786         struct hci_dev *hdev = NULL;
787         int len, err = 0;
788
789         BT_DBG("sock %p sk %p", sock, sk);
790
791         if (!addr)
792                 return -EINVAL;
793
794         memset(&haddr, 0, sizeof(haddr));
795         len = min_t(unsigned int, sizeof(haddr), addr_len);
796         memcpy(&haddr, addr, len);
797
798         if (haddr.hci_family != AF_BLUETOOTH)
799                 return -EINVAL;
800
801         lock_sock(sk);
802
803         if (sk->sk_state == BT_BOUND) {
804                 err = -EALREADY;
805                 goto done;
806         }
807
808         switch (haddr.hci_channel) {
809         case HCI_CHANNEL_RAW:
810                 if (hci_pi(sk)->hdev) {
811                         err = -EALREADY;
812                         goto done;
813                 }
814
815                 if (haddr.hci_dev != HCI_DEV_NONE) {
816                         hdev = hci_dev_get(haddr.hci_dev);
817                         if (!hdev) {
818                                 err = -ENODEV;
819                                 goto done;
820                         }
821
822                         atomic_inc(&hdev->promisc);
823                 }
824
825                 hci_pi(sk)->hdev = hdev;
826                 break;
827
828         case HCI_CHANNEL_USER:
829                 if (hci_pi(sk)->hdev) {
830                         err = -EALREADY;
831                         goto done;
832                 }
833
834                 if (haddr.hci_dev == HCI_DEV_NONE) {
835                         err = -EINVAL;
836                         goto done;
837                 }
838
839                 if (!capable(CAP_NET_ADMIN)) {
840                         err = -EPERM;
841                         goto done;
842                 }
843
844                 hdev = hci_dev_get(haddr.hci_dev);
845                 if (!hdev) {
846                         err = -ENODEV;
847                         goto done;
848                 }
849
850                 if (test_bit(HCI_INIT, &hdev->flags) ||
851                     hci_dev_test_flag(hdev, HCI_SETUP) ||
852                     hci_dev_test_flag(hdev, HCI_CONFIG) ||
853                     (!hci_dev_test_flag(hdev, HCI_AUTO_OFF) &&
854                      test_bit(HCI_UP, &hdev->flags))) {
855                         err = -EBUSY;
856                         hci_dev_put(hdev);
857                         goto done;
858                 }
859
860                 if (hci_dev_test_and_set_flag(hdev, HCI_USER_CHANNEL)) {
861                         err = -EUSERS;
862                         hci_dev_put(hdev);
863                         goto done;
864                 }
865
866                 mgmt_index_removed(hdev);
867
868                 err = hci_dev_open(hdev->id);
869                 if (err) {
870                         if (err == -EALREADY) {
871                                 /* In case the transport is already up and
872                                  * running, clear the error here.
873                                  *
874                                  * This can happen when opening an user
875                                  * channel and HCI_AUTO_OFF grace period
876                                  * is still active.
877                                  */
878                                 err = 0;
879                         } else {
880                                 hci_dev_clear_flag(hdev, HCI_USER_CHANNEL);
881                                 mgmt_index_added(hdev);
882                                 hci_dev_put(hdev);
883                                 goto done;
884                         }
885                 }
886
887                 atomic_inc(&hdev->promisc);
888
889                 hci_pi(sk)->hdev = hdev;
890                 break;
891
892         case HCI_CHANNEL_MONITOR:
893                 if (haddr.hci_dev != HCI_DEV_NONE) {
894                         err = -EINVAL;
895                         goto done;
896                 }
897
898                 if (!capable(CAP_NET_RAW)) {
899                         err = -EPERM;
900                         goto done;
901                 }
902
903                 /* The monitor interface is restricted to CAP_NET_RAW
904                  * capabilities and with that implicitly trusted.
905                  */
906                 hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
907
908                 send_monitor_note(sk, "Linux version %s (%s)",
909                                   init_utsname()->release,
910                                   init_utsname()->machine);
911                 send_monitor_note(sk, "Bluetooth subsystem version %s",
912                                   BT_SUBSYS_VERSION);
913                 send_monitor_replay(sk);
914
915                 atomic_inc(&monitor_promisc);
916                 break;
917
918         case HCI_CHANNEL_LOGGING:
919                 if (haddr.hci_dev != HCI_DEV_NONE) {
920                         err = -EINVAL;
921                         goto done;
922                 }
923
924                 if (!capable(CAP_NET_ADMIN)) {
925                         err = -EPERM;
926                         goto done;
927                 }
928                 break;
929
930         default:
931                 if (!hci_mgmt_chan_find(haddr.hci_channel)) {
932                         err = -EINVAL;
933                         goto done;
934                 }
935
936                 if (haddr.hci_dev != HCI_DEV_NONE) {
937                         err = -EINVAL;
938                         goto done;
939                 }
940
941                 /* Users with CAP_NET_ADMIN capabilities are allowed
942                  * access to all management commands and events. For
943                  * untrusted users the interface is restricted and
944                  * also only untrusted events are sent.
945                  */
946                 if (capable(CAP_NET_ADMIN))
947                         hci_sock_set_flag(sk, HCI_SOCK_TRUSTED);
948
949                 /* At the moment the index and unconfigured index events
950                  * are enabled unconditionally. Setting them on each
951                  * socket when binding keeps this functionality. They
952                  * however might be cleared later and then sending of these
953                  * events will be disabled, but that is then intentional.
954                  *
955                  * This also enables generic events that are safe to be
956                  * received by untrusted users. Example for such events
957                  * are changes to settings, class of device, name etc.
958                  */
959                 if (haddr.hci_channel == HCI_CHANNEL_CONTROL) {
960                         hci_sock_set_flag(sk, HCI_MGMT_INDEX_EVENTS);
961                         hci_sock_set_flag(sk, HCI_MGMT_UNCONF_INDEX_EVENTS);
962                         hci_sock_set_flag(sk, HCI_MGMT_GENERIC_EVENTS);
963                 }
964                 break;
965         }
966
967
968         hci_pi(sk)->channel = haddr.hci_channel;
969         sk->sk_state = BT_BOUND;
970
971 done:
972         release_sock(sk);
973         return err;
974 }
975
976 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr,
977                             int *addr_len, int peer)
978 {
979         struct sockaddr_hci *haddr = (struct sockaddr_hci *)addr;
980         struct sock *sk = sock->sk;
981         struct hci_dev *hdev;
982         int err = 0;
983
984         BT_DBG("sock %p sk %p", sock, sk);
985
986         if (peer)
987                 return -EOPNOTSUPP;
988
989         lock_sock(sk);
990
991         hdev = hci_pi(sk)->hdev;
992         if (!hdev) {
993                 err = -EBADFD;
994                 goto done;
995         }
996
997         *addr_len = sizeof(*haddr);
998         haddr->hci_family = AF_BLUETOOTH;
999         haddr->hci_dev    = hdev->id;
1000         haddr->hci_channel= hci_pi(sk)->channel;
1001
1002 done:
1003         release_sock(sk);
1004         return err;
1005 }
1006
1007 static void hci_sock_cmsg(struct sock *sk, struct msghdr *msg,
1008                           struct sk_buff *skb)
1009 {
1010         __u32 mask = hci_pi(sk)->cmsg_mask;
1011
1012         if (mask & HCI_CMSG_DIR) {
1013                 int incoming = bt_cb(skb)->incoming;
1014                 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(incoming),
1015                          &incoming);
1016         }
1017
1018         if (mask & HCI_CMSG_TSTAMP) {
1019 #ifdef CONFIG_COMPAT
1020                 struct compat_timeval ctv;
1021 #endif
1022                 struct timeval tv;
1023                 void *data;
1024                 int len;
1025
1026                 skb_get_timestamp(skb, &tv);
1027
1028                 data = &tv;
1029                 len = sizeof(tv);
1030 #ifdef CONFIG_COMPAT
1031                 if (!COMPAT_USE_64BIT_TIME &&
1032                     (msg->msg_flags & MSG_CMSG_COMPAT)) {
1033                         ctv.tv_sec = tv.tv_sec;
1034                         ctv.tv_usec = tv.tv_usec;
1035                         data = &ctv;
1036                         len = sizeof(ctv);
1037                 }
1038 #endif
1039
1040                 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, len, data);
1041         }
1042 }
1043
1044 static int hci_sock_recvmsg(struct socket *sock, struct msghdr *msg,
1045                             size_t len, int flags)
1046 {
1047         int noblock = flags & MSG_DONTWAIT;
1048         struct sock *sk = sock->sk;
1049         struct sk_buff *skb;
1050         int copied, err;
1051
1052         BT_DBG("sock %p, sk %p", sock, sk);
1053
1054         if (flags & MSG_OOB)
1055                 return -EOPNOTSUPP;
1056
1057         if (hci_pi(sk)->channel == HCI_CHANNEL_LOGGING)
1058                 return -EOPNOTSUPP;
1059
1060         if (sk->sk_state == BT_CLOSED)
1061                 return 0;
1062
1063         skb = skb_recv_datagram(sk, flags, noblock, &err);
1064         if (!skb)
1065                 return err;
1066
1067         copied = skb->len;
1068         if (len < copied) {
1069                 msg->msg_flags |= MSG_TRUNC;
1070                 copied = len;
1071         }
1072
1073         skb_reset_transport_header(skb);
1074         err = skb_copy_datagram_msg(skb, 0, msg, copied);
1075
1076         switch (hci_pi(sk)->channel) {
1077         case HCI_CHANNEL_RAW:
1078                 hci_sock_cmsg(sk, msg, skb);
1079                 break;
1080         case HCI_CHANNEL_USER:
1081         case HCI_CHANNEL_MONITOR:
1082                 sock_recv_timestamp(msg, sk, skb);
1083                 break;
1084         default:
1085                 if (hci_mgmt_chan_find(hci_pi(sk)->channel))
1086                         sock_recv_timestamp(msg, sk, skb);
1087                 break;
1088         }
1089
1090         skb_free_datagram(sk, skb);
1091
1092         return err ? : copied;
1093 }
1094
1095 static int hci_mgmt_cmd(struct hci_mgmt_chan *chan, struct sock *sk,
1096                         struct msghdr *msg, size_t msglen)
1097 {
1098         void *buf;
1099         u8 *cp;
1100         struct mgmt_hdr *hdr;
1101         u16 opcode, index, len;
1102         struct hci_dev *hdev = NULL;
1103         const struct hci_mgmt_handler *handler;
1104         bool var_len, no_hdev;
1105         int err;
1106
1107         BT_DBG("got %zu bytes", msglen);
1108
1109         if (msglen < sizeof(*hdr))
1110                 return -EINVAL;
1111
1112         buf = kmalloc(msglen, GFP_KERNEL);
1113         if (!buf)
1114                 return -ENOMEM;
1115
1116         if (memcpy_from_msg(buf, msg, msglen)) {
1117                 err = -EFAULT;
1118                 goto done;
1119         }
1120
1121         hdr = buf;
1122         opcode = __le16_to_cpu(hdr->opcode);
1123         index = __le16_to_cpu(hdr->index);
1124         len = __le16_to_cpu(hdr->len);
1125
1126         if (len != msglen - sizeof(*hdr)) {
1127                 err = -EINVAL;
1128                 goto done;
1129         }
1130
1131         if (opcode >= chan->handler_count ||
1132             chan->handlers[opcode].func == NULL) {
1133                 BT_DBG("Unknown op %u", opcode);
1134                 err = mgmt_cmd_status(sk, index, opcode,
1135                                       MGMT_STATUS_UNKNOWN_COMMAND);
1136                 goto done;
1137         }
1138
1139         handler = &chan->handlers[opcode];
1140
1141         if (!hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) &&
1142             !(handler->flags & HCI_MGMT_UNTRUSTED)) {
1143                 err = mgmt_cmd_status(sk, index, opcode,
1144                                       MGMT_STATUS_PERMISSION_DENIED);
1145                 goto done;
1146         }
1147
1148         if (index != MGMT_INDEX_NONE) {
1149                 hdev = hci_dev_get(index);
1150                 if (!hdev) {
1151                         err = mgmt_cmd_status(sk, index, opcode,
1152                                               MGMT_STATUS_INVALID_INDEX);
1153                         goto done;
1154                 }
1155
1156                 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
1157                     hci_dev_test_flag(hdev, HCI_CONFIG) ||
1158                     hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1159                         err = mgmt_cmd_status(sk, index, opcode,
1160                                               MGMT_STATUS_INVALID_INDEX);
1161                         goto done;
1162                 }
1163
1164                 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1165                     !(handler->flags & HCI_MGMT_UNCONFIGURED)) {
1166                         err = mgmt_cmd_status(sk, index, opcode,
1167                                               MGMT_STATUS_INVALID_INDEX);
1168                         goto done;
1169                 }
1170         }
1171
1172         no_hdev = (handler->flags & HCI_MGMT_NO_HDEV);
1173         if (no_hdev != !hdev) {
1174                 err = mgmt_cmd_status(sk, index, opcode,
1175                                       MGMT_STATUS_INVALID_INDEX);
1176                 goto done;
1177         }
1178
1179         var_len = (handler->flags & HCI_MGMT_VAR_LEN);
1180         if ((var_len && len < handler->data_len) ||
1181             (!var_len && len != handler->data_len)) {
1182                 err = mgmt_cmd_status(sk, index, opcode,
1183                                       MGMT_STATUS_INVALID_PARAMS);
1184                 goto done;
1185         }
1186
1187         if (hdev && chan->hdev_init)
1188                 chan->hdev_init(sk, hdev);
1189
1190         cp = buf + sizeof(*hdr);
1191
1192         err = handler->func(sk, hdev, cp, len);
1193         if (err < 0)
1194                 goto done;
1195
1196         err = msglen;
1197
1198 done:
1199         if (hdev)
1200                 hci_dev_put(hdev);
1201
1202         kfree(buf);
1203         return err;
1204 }
1205
1206 static int hci_logging_frame(struct sock *sk, struct msghdr *msg, int len)
1207 {
1208         struct hci_mon_hdr *hdr;
1209         struct sk_buff *skb;
1210         struct hci_dev *hdev;
1211         u16 index;
1212         int err;
1213
1214         /* The logging frame consists at minimum of the standard header,
1215          * the priority byte, the ident length byte and at least one string
1216          * terminator NUL byte. Anything shorter are invalid packets.
1217          */
1218         if (len < sizeof(*hdr) + 3)
1219                 return -EINVAL;
1220
1221         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
1222         if (!skb)
1223                 return err;
1224
1225         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1226                 err = -EFAULT;
1227                 goto drop;
1228         }
1229
1230         hdr = (void *)skb->data;
1231
1232         if (__le16_to_cpu(hdr->len) != len - sizeof(*hdr)) {
1233                 err = -EINVAL;
1234                 goto drop;
1235         }
1236
1237         if (__le16_to_cpu(hdr->opcode) == 0x0000) {
1238                 __u8 priority = skb->data[sizeof(*hdr)];
1239                 __u8 ident_len = skb->data[sizeof(*hdr) + 1];
1240
1241                 /* Only the priorities 0-7 are valid and with that any other
1242                  * value results in an invalid packet.
1243                  *
1244                  * The priority byte is followed by an ident length byte and
1245                  * the NUL terminated ident string. Check that the ident
1246                  * length is not overflowing the packet and also that the
1247                  * ident string itself is NUL terminated. In case the ident
1248                  * length is zero, the length value actually doubles as NUL
1249                  * terminator identifier.
1250                  *
1251                  * The message follows the ident string (if present) and
1252                  * must be NUL terminated. Otherwise it is not a valid packet.
1253                  */
1254                 if (priority > 7 || skb->data[len - 1] != 0x00 ||
1255                     ident_len > len - sizeof(*hdr) - 3 ||
1256                     skb->data[sizeof(*hdr) + ident_len + 1] != 0x00) {
1257                         err = -EINVAL;
1258                         goto drop;
1259                 }
1260         } else {
1261                 err = -EINVAL;
1262                 goto drop;
1263         }
1264
1265         index = __le16_to_cpu(hdr->index);
1266
1267         if (index != MGMT_INDEX_NONE) {
1268                 hdev = hci_dev_get(index);
1269                 if (!hdev) {
1270                         err = -ENODEV;
1271                         goto drop;
1272                 }
1273         } else {
1274                 hdev = NULL;
1275         }
1276
1277         hdr->opcode = cpu_to_le16(HCI_MON_USER_LOGGING);
1278
1279         hci_send_to_channel(HCI_CHANNEL_MONITOR, skb, HCI_SOCK_TRUSTED, NULL);
1280         err = len;
1281
1282         if (hdev)
1283                 hci_dev_put(hdev);
1284
1285 drop:
1286         kfree_skb(skb);
1287         return err;
1288 }
1289
1290 static int hci_sock_sendmsg(struct socket *sock, struct msghdr *msg,
1291                             size_t len)
1292 {
1293         struct sock *sk = sock->sk;
1294         struct hci_mgmt_chan *chan;
1295         struct hci_dev *hdev;
1296         struct sk_buff *skb;
1297         int err;
1298
1299         BT_DBG("sock %p sk %p", sock, sk);
1300
1301         if (msg->msg_flags & MSG_OOB)
1302                 return -EOPNOTSUPP;
1303
1304         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
1305                 return -EINVAL;
1306
1307         if (len < 4 || len > HCI_MAX_FRAME_SIZE)
1308                 return -EINVAL;
1309
1310         lock_sock(sk);
1311
1312         switch (hci_pi(sk)->channel) {
1313         case HCI_CHANNEL_RAW:
1314         case HCI_CHANNEL_USER:
1315                 break;
1316         case HCI_CHANNEL_MONITOR:
1317                 err = -EOPNOTSUPP;
1318                 goto done;
1319         case HCI_CHANNEL_LOGGING:
1320                 err = hci_logging_frame(sk, msg, len);
1321                 goto done;
1322         default:
1323                 mutex_lock(&mgmt_chan_list_lock);
1324                 chan = __hci_mgmt_chan_find(hci_pi(sk)->channel);
1325                 if (chan)
1326                         err = hci_mgmt_cmd(chan, sk, msg, len);
1327                 else
1328                         err = -EINVAL;
1329
1330                 mutex_unlock(&mgmt_chan_list_lock);
1331                 goto done;
1332         }
1333
1334         hdev = hci_pi(sk)->hdev;
1335         if (!hdev) {
1336                 err = -EBADFD;
1337                 goto done;
1338         }
1339
1340         if (!test_bit(HCI_UP, &hdev->flags)) {
1341                 err = -ENETDOWN;
1342                 goto done;
1343         }
1344
1345         skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
1346         if (!skb)
1347                 goto done;
1348
1349         if (memcpy_from_msg(skb_put(skb, len), msg, len)) {
1350                 err = -EFAULT;
1351                 goto drop;
1352         }
1353
1354         hci_skb_pkt_type(skb) = skb->data[0];
1355         skb_pull(skb, 1);
1356
1357         if (hci_pi(sk)->channel == HCI_CHANNEL_USER) {
1358                 /* No permission check is needed for user channel
1359                  * since that gets enforced when binding the socket.
1360                  *
1361                  * However check that the packet type is valid.
1362                  */
1363                 if (hci_skb_pkt_type(skb) != HCI_COMMAND_PKT &&
1364                     hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1365                     hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
1366                         err = -EINVAL;
1367                         goto drop;
1368                 }
1369
1370                 skb_queue_tail(&hdev->raw_q, skb);
1371                 queue_work(hdev->workqueue, &hdev->tx_work);
1372         } else if (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT) {
1373                 u16 opcode = get_unaligned_le16(skb->data);
1374                 u16 ogf = hci_opcode_ogf(opcode);
1375                 u16 ocf = hci_opcode_ocf(opcode);
1376
1377                 if (((ogf > HCI_SFLT_MAX_OGF) ||
1378                      !hci_test_bit(ocf & HCI_FLT_OCF_BITS,
1379                                    &hci_sec_filter.ocf_mask[ogf])) &&
1380                     !capable(CAP_NET_RAW)) {
1381                         err = -EPERM;
1382                         goto drop;
1383                 }
1384
1385                 /* Since the opcode has already been extracted here, store
1386                  * a copy of the value for later use by the drivers.
1387                  */
1388                 hci_skb_opcode(skb) = opcode;
1389
1390                 if (ogf == 0x3f) {
1391                         skb_queue_tail(&hdev->raw_q, skb);
1392                         queue_work(hdev->workqueue, &hdev->tx_work);
1393                 } else {
1394                         /* Stand-alone HCI commands must be flagged as
1395                          * single-command requests.
1396                          */
1397                         bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
1398
1399                         skb_queue_tail(&hdev->cmd_q, skb);
1400                         queue_work(hdev->workqueue, &hdev->cmd_work);
1401                 }
1402         } else {
1403                 if (!capable(CAP_NET_RAW)) {
1404                         err = -EPERM;
1405                         goto drop;
1406                 }
1407
1408                 if (hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
1409                     hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
1410                         err = -EINVAL;
1411                         goto drop;
1412                 }
1413
1414                 skb_queue_tail(&hdev->raw_q, skb);
1415                 queue_work(hdev->workqueue, &hdev->tx_work);
1416         }
1417
1418         err = len;
1419
1420 done:
1421         release_sock(sk);
1422         return err;
1423
1424 drop:
1425         kfree_skb(skb);
1426         goto done;
1427 }
1428
1429 static int hci_sock_setsockopt(struct socket *sock, int level, int optname,
1430                                char __user *optval, unsigned int len)
1431 {
1432         struct hci_ufilter uf = { .opcode = 0 };
1433         struct sock *sk = sock->sk;
1434         int err = 0, opt = 0;
1435
1436         BT_DBG("sk %p, opt %d", sk, optname);
1437
1438         lock_sock(sk);
1439
1440         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
1441                 err = -EBADFD;
1442                 goto done;
1443         }
1444
1445         switch (optname) {
1446         case HCI_DATA_DIR:
1447                 if (get_user(opt, (int __user *)optval)) {
1448                         err = -EFAULT;
1449                         break;
1450                 }
1451
1452                 if (opt)
1453                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
1454                 else
1455                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
1456                 break;
1457
1458         case HCI_TIME_STAMP:
1459                 if (get_user(opt, (int __user *)optval)) {
1460                         err = -EFAULT;
1461                         break;
1462                 }
1463
1464                 if (opt)
1465                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
1466                 else
1467                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
1468                 break;
1469
1470         case HCI_FILTER:
1471                 {
1472                         struct hci_filter *f = &hci_pi(sk)->filter;
1473
1474                         uf.type_mask = f->type_mask;
1475                         uf.opcode    = f->opcode;
1476                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
1477                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
1478                 }
1479
1480                 len = min_t(unsigned int, len, sizeof(uf));
1481                 if (copy_from_user(&uf, optval, len)) {
1482                         err = -EFAULT;
1483                         break;
1484                 }
1485
1486                 if (!capable(CAP_NET_RAW)) {
1487                         uf.type_mask &= hci_sec_filter.type_mask;
1488                         uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
1489                         uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
1490                 }
1491
1492                 {
1493                         struct hci_filter *f = &hci_pi(sk)->filter;
1494
1495                         f->type_mask = uf.type_mask;
1496                         f->opcode    = uf.opcode;
1497                         *((u32 *) f->event_mask + 0) = uf.event_mask[0];
1498                         *((u32 *) f->event_mask + 1) = uf.event_mask[1];
1499                 }
1500                 break;
1501
1502         default:
1503                 err = -ENOPROTOOPT;
1504                 break;
1505         }
1506
1507 done:
1508         release_sock(sk);
1509         return err;
1510 }
1511
1512 static int hci_sock_getsockopt(struct socket *sock, int level, int optname,
1513                                char __user *optval, int __user *optlen)
1514 {
1515         struct hci_ufilter uf;
1516         struct sock *sk = sock->sk;
1517         int len, opt, err = 0;
1518
1519         BT_DBG("sk %p, opt %d", sk, optname);
1520
1521         if (get_user(len, optlen))
1522                 return -EFAULT;
1523
1524         lock_sock(sk);
1525
1526         if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
1527                 err = -EBADFD;
1528                 goto done;
1529         }
1530
1531         switch (optname) {
1532         case HCI_DATA_DIR:
1533                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
1534                         opt = 1;
1535                 else
1536                         opt = 0;
1537
1538                 if (put_user(opt, optval))
1539                         err = -EFAULT;
1540                 break;
1541
1542         case HCI_TIME_STAMP:
1543                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
1544                         opt = 1;
1545                 else
1546                         opt = 0;
1547
1548                 if (put_user(opt, optval))
1549                         err = -EFAULT;
1550                 break;
1551
1552         case HCI_FILTER:
1553                 {
1554                         struct hci_filter *f = &hci_pi(sk)->filter;
1555
1556                         memset(&uf, 0, sizeof(uf));
1557                         uf.type_mask = f->type_mask;
1558                         uf.opcode    = f->opcode;
1559                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
1560                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
1561                 }
1562
1563                 len = min_t(unsigned int, len, sizeof(uf));
1564                 if (copy_to_user(optval, &uf, len))
1565                         err = -EFAULT;
1566                 break;
1567
1568         default:
1569                 err = -ENOPROTOOPT;
1570                 break;
1571         }
1572
1573 done:
1574         release_sock(sk);
1575         return err;
1576 }
1577
1578 static const struct proto_ops hci_sock_ops = {
1579         .family         = PF_BLUETOOTH,
1580         .owner          = THIS_MODULE,
1581         .release        = hci_sock_release,
1582         .bind           = hci_sock_bind,
1583         .getname        = hci_sock_getname,
1584         .sendmsg        = hci_sock_sendmsg,
1585         .recvmsg        = hci_sock_recvmsg,
1586         .ioctl          = hci_sock_ioctl,
1587         .poll           = datagram_poll,
1588         .listen         = sock_no_listen,
1589         .shutdown       = sock_no_shutdown,
1590         .setsockopt     = hci_sock_setsockopt,
1591         .getsockopt     = hci_sock_getsockopt,
1592         .connect        = sock_no_connect,
1593         .socketpair     = sock_no_socketpair,
1594         .accept         = sock_no_accept,
1595         .mmap           = sock_no_mmap
1596 };
1597
1598 static struct proto hci_sk_proto = {
1599         .name           = "HCI",
1600         .owner          = THIS_MODULE,
1601         .obj_size       = sizeof(struct hci_pinfo)
1602 };
1603
1604 static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
1605                            int kern)
1606 {
1607         struct sock *sk;
1608
1609         BT_DBG("sock %p", sock);
1610
1611         if (sock->type != SOCK_RAW)
1612                 return -ESOCKTNOSUPPORT;
1613
1614         sock->ops = &hci_sock_ops;
1615
1616         sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto, kern);
1617         if (!sk)
1618                 return -ENOMEM;
1619
1620         sock_init_data(sock, sk);
1621
1622         sock_reset_flag(sk, SOCK_ZAPPED);
1623
1624         sk->sk_protocol = protocol;
1625
1626         sock->state = SS_UNCONNECTED;
1627         sk->sk_state = BT_OPEN;
1628
1629         bt_sock_link(&hci_sk_list, sk);
1630         return 0;
1631 }
1632
1633 static const struct net_proto_family hci_sock_family_ops = {
1634         .family = PF_BLUETOOTH,
1635         .owner  = THIS_MODULE,
1636         .create = hci_sock_create,
1637 };
1638
1639 int __init hci_sock_init(void)
1640 {
1641         int err;
1642
1643         BUILD_BUG_ON(sizeof(struct sockaddr_hci) > sizeof(struct sockaddr));
1644
1645         err = proto_register(&hci_sk_proto, 0);
1646         if (err < 0)
1647                 return err;
1648
1649         err = bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops);
1650         if (err < 0) {
1651                 BT_ERR("HCI socket registration failed");
1652                 goto error;
1653         }
1654
1655         err = bt_procfs_init(&init_net, "hci", &hci_sk_list, NULL);
1656         if (err < 0) {
1657                 BT_ERR("Failed to create HCI proc file");
1658                 bt_sock_unregister(BTPROTO_HCI);
1659                 goto error;
1660         }
1661
1662         BT_INFO("HCI socket layer initialized");
1663
1664         return 0;
1665
1666 error:
1667         proto_unregister(&hci_sk_proto);
1668         return err;
1669 }
1670
1671 void hci_sock_cleanup(void)
1672 {
1673         bt_procfs_cleanup(&init_net, "hci");
1674         bt_sock_unregister(BTPROTO_HCI);
1675         proto_unregister(&hci_sk_proto);
1676 }