initramfs: fix initramfs size calculation
[linux-drm-fsl-dcu.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/module.h>
28
29 #include <linux/types.h>
30 #include <linux/capability.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/skbuff.h>
38 #include <linux/workqueue.h>
39 #include <linux/interrupt.h>
40 #include <linux/compat.h>
41 #include <linux/socket.h>
42 #include <linux/ioctl.h>
43 #include <net/sock.h>
44
45 #include <asm/system.h>
46 #include <asm/uaccess.h>
47 #include <asm/unaligned.h>
48
49 #include <net/bluetooth/bluetooth.h>
50 #include <net/bluetooth/hci_core.h>
51
52 /* ----- HCI socket interface ----- */
53
54 static inline int hci_test_bit(int nr, void *addr)
55 {
56         return *((__u32 *) addr + (nr >> 5)) & ((__u32) 1 << (nr & 31));
57 }
58
59 /* Security filter */
60 static struct hci_sec_filter hci_sec_filter = {
61         /* Packet types */
62         0x10,
63         /* Events */
64         { 0x1000d9fe, 0x0000b00c },
65         /* Commands */
66         {
67                 { 0x0 },
68                 /* OGF_LINK_CTL */
69                 { 0xbe000006, 0x00000001, 0x00000000, 0x00 },
70                 /* OGF_LINK_POLICY */
71                 { 0x00005200, 0x00000000, 0x00000000, 0x00 },
72                 /* OGF_HOST_CTL */
73                 { 0xaab00200, 0x2b402aaa, 0x05220154, 0x00 },
74                 /* OGF_INFO_PARAM */
75                 { 0x000002be, 0x00000000, 0x00000000, 0x00 },
76                 /* OGF_STATUS_PARAM */
77                 { 0x000000ea, 0x00000000, 0x00000000, 0x00 }
78         }
79 };
80
81 static struct bt_sock_list hci_sk_list = {
82         .lock = __RW_LOCK_UNLOCKED(hci_sk_list.lock)
83 };
84
85 /* Send frame to RAW socket */
86 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb)
87 {
88         struct sock *sk;
89         struct hlist_node *node;
90
91         BT_DBG("hdev %p len %d", hdev, skb->len);
92
93         read_lock(&hci_sk_list.lock);
94         sk_for_each(sk, node, &hci_sk_list.head) {
95                 struct hci_filter *flt;
96                 struct sk_buff *nskb;
97
98                 if (sk->sk_state != BT_BOUND || hci_pi(sk)->hdev != hdev)
99                         continue;
100
101                 /* Don't send frame to the socket it came from */
102                 if (skb->sk == sk)
103                         continue;
104
105                 /* Apply filter */
106                 flt = &hci_pi(sk)->filter;
107
108                 if (!test_bit((bt_cb(skb)->pkt_type == HCI_VENDOR_PKT) ?
109                                 0 : (bt_cb(skb)->pkt_type & HCI_FLT_TYPE_BITS), &flt->type_mask))
110                         continue;
111
112                 if (bt_cb(skb)->pkt_type == HCI_EVENT_PKT) {
113                         register int evt = (*(__u8 *)skb->data & HCI_FLT_EVENT_BITS);
114
115                         if (!hci_test_bit(evt, &flt->event_mask))
116                                 continue;
117
118                         if (flt->opcode &&
119                             ((evt == HCI_EV_CMD_COMPLETE &&
120                               flt->opcode !=
121                               get_unaligned((__le16 *)(skb->data + 3))) ||
122                              (evt == HCI_EV_CMD_STATUS &&
123                               flt->opcode !=
124                               get_unaligned((__le16 *)(skb->data + 4)))))
125                                 continue;
126                 }
127
128                 if (!(nskb = skb_clone(skb, GFP_ATOMIC)))
129                         continue;
130
131                 /* Put type byte before the data */
132                 memcpy(skb_push(nskb, 1), &bt_cb(nskb)->pkt_type, 1);
133
134                 if (sock_queue_rcv_skb(sk, nskb))
135                         kfree_skb(nskb);
136         }
137         read_unlock(&hci_sk_list.lock);
138 }
139
140 static int hci_sock_release(struct socket *sock)
141 {
142         struct sock *sk = sock->sk;
143         struct hci_dev *hdev;
144
145         BT_DBG("sock %p sk %p", sock, sk);
146
147         if (!sk)
148                 return 0;
149
150         hdev = hci_pi(sk)->hdev;
151
152         bt_sock_unlink(&hci_sk_list, sk);
153
154         if (hdev) {
155                 atomic_dec(&hdev->promisc);
156                 hci_dev_put(hdev);
157         }
158
159         sock_orphan(sk);
160
161         skb_queue_purge(&sk->sk_receive_queue);
162         skb_queue_purge(&sk->sk_write_queue);
163
164         sock_put(sk);
165         return 0;
166 }
167
168 /* Ioctls that require bound socket */
169 static inline int hci_sock_bound_ioctl(struct sock *sk, unsigned int cmd, unsigned long arg)
170 {
171         struct hci_dev *hdev = hci_pi(sk)->hdev;
172
173         if (!hdev)
174                 return -EBADFD;
175
176         switch (cmd) {
177         case HCISETRAW:
178                 if (!capable(CAP_NET_ADMIN))
179                         return -EACCES;
180
181                 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
182                         return -EPERM;
183
184                 if (arg)
185                         set_bit(HCI_RAW, &hdev->flags);
186                 else
187                         clear_bit(HCI_RAW, &hdev->flags);
188
189                 return 0;
190
191         case HCIGETCONNINFO:
192                 return hci_get_conn_info(hdev, (void __user *) arg);
193
194         case HCIGETAUTHINFO:
195                 return hci_get_auth_info(hdev, (void __user *) arg);
196
197         default:
198                 if (hdev->ioctl)
199                         return hdev->ioctl(hdev, cmd, arg);
200                 return -EINVAL;
201         }
202 }
203
204 static int hci_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
205 {
206         struct sock *sk = sock->sk;
207         void __user *argp = (void __user *) arg;
208         int err;
209
210         BT_DBG("cmd %x arg %lx", cmd, arg);
211
212         switch (cmd) {
213         case HCIGETDEVLIST:
214                 return hci_get_dev_list(argp);
215
216         case HCIGETDEVINFO:
217                 return hci_get_dev_info(argp);
218
219         case HCIGETCONNLIST:
220                 return hci_get_conn_list(argp);
221
222         case HCIDEVUP:
223                 if (!capable(CAP_NET_ADMIN))
224                         return -EACCES;
225                 return hci_dev_open(arg);
226
227         case HCIDEVDOWN:
228                 if (!capable(CAP_NET_ADMIN))
229                         return -EACCES;
230                 return hci_dev_close(arg);
231
232         case HCIDEVRESET:
233                 if (!capable(CAP_NET_ADMIN))
234                         return -EACCES;
235                 return hci_dev_reset(arg);
236
237         case HCIDEVRESTAT:
238                 if (!capable(CAP_NET_ADMIN))
239                         return -EACCES;
240                 return hci_dev_reset_stat(arg);
241
242         case HCISETSCAN:
243         case HCISETAUTH:
244         case HCISETENCRYPT:
245         case HCISETPTYPE:
246         case HCISETLINKPOL:
247         case HCISETLINKMODE:
248         case HCISETACLMTU:
249         case HCISETSCOMTU:
250                 if (!capable(CAP_NET_ADMIN))
251                         return -EACCES;
252                 return hci_dev_cmd(cmd, argp);
253
254         case HCIINQUIRY:
255                 return hci_inquiry(argp);
256
257         default:
258                 lock_sock(sk);
259                 err = hci_sock_bound_ioctl(sk, cmd, arg);
260                 release_sock(sk);
261                 return err;
262         }
263 }
264
265 static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
266 {
267         struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
268         struct sock *sk = sock->sk;
269         struct hci_dev *hdev = NULL;
270         int err = 0;
271
272         BT_DBG("sock %p sk %p", sock, sk);
273
274         if (!haddr || haddr->hci_family != AF_BLUETOOTH)
275                 return -EINVAL;
276
277         lock_sock(sk);
278
279         if (hci_pi(sk)->hdev) {
280                 err = -EALREADY;
281                 goto done;
282         }
283
284         if (haddr->hci_dev != HCI_DEV_NONE) {
285                 if (!(hdev = hci_dev_get(haddr->hci_dev))) {
286                         err = -ENODEV;
287                         goto done;
288                 }
289
290                 atomic_inc(&hdev->promisc);
291         }
292
293         hci_pi(sk)->hdev = hdev;
294         sk->sk_state = BT_BOUND;
295
296 done:
297         release_sock(sk);
298         return err;
299 }
300
301 static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *addr_len, int peer)
302 {
303         struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr;
304         struct sock *sk = sock->sk;
305         struct hci_dev *hdev = hci_pi(sk)->hdev;
306
307         BT_DBG("sock %p sk %p", sock, sk);
308
309         if (!hdev)
310                 return -EBADFD;
311
312         lock_sock(sk);
313
314         *addr_len = sizeof(*haddr);
315         haddr->hci_family = AF_BLUETOOTH;
316         haddr->hci_dev    = hdev->id;
317
318         release_sock(sk);
319         return 0;
320 }
321
322 static inline void hci_sock_cmsg(struct sock *sk, struct msghdr *msg, struct sk_buff *skb)
323 {
324         __u32 mask = hci_pi(sk)->cmsg_mask;
325
326         if (mask & HCI_CMSG_DIR) {
327                 int incoming = bt_cb(skb)->incoming;
328                 put_cmsg(msg, SOL_HCI, HCI_CMSG_DIR, sizeof(incoming), &incoming);
329         }
330
331         if (mask & HCI_CMSG_TSTAMP) {
332 #ifdef CONFIG_COMPAT
333                 struct compat_timeval ctv;
334 #endif
335                 struct timeval tv;
336                 void *data;
337                 int len;
338
339                 skb_get_timestamp(skb, &tv);
340
341                 data = &tv;
342                 len = sizeof(tv);
343 #ifdef CONFIG_COMPAT
344                 if (msg->msg_flags & MSG_CMSG_COMPAT) {
345                         ctv.tv_sec = tv.tv_sec;
346                         ctv.tv_usec = tv.tv_usec;
347                         data = &ctv;
348                         len = sizeof(ctv);
349                 }
350 #endif
351
352                 put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, len, data);
353         }
354 }
355
356 static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
357                                 struct msghdr *msg, size_t len, int flags)
358 {
359         int noblock = flags & MSG_DONTWAIT;
360         struct sock *sk = sock->sk;
361         struct sk_buff *skb;
362         int copied, err;
363
364         BT_DBG("sock %p, sk %p", sock, sk);
365
366         if (flags & (MSG_OOB))
367                 return -EOPNOTSUPP;
368
369         if (sk->sk_state == BT_CLOSED)
370                 return 0;
371
372         if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
373                 return err;
374
375         msg->msg_namelen = 0;
376
377         copied = skb->len;
378         if (len < copied) {
379                 msg->msg_flags |= MSG_TRUNC;
380                 copied = len;
381         }
382
383         skb_reset_transport_header(skb);
384         err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
385
386         hci_sock_cmsg(sk, msg, skb);
387
388         skb_free_datagram(sk, skb);
389
390         return err ? : copied;
391 }
392
393 static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
394                             struct msghdr *msg, size_t len)
395 {
396         struct sock *sk = sock->sk;
397         struct hci_dev *hdev;
398         struct sk_buff *skb;
399         int err;
400
401         BT_DBG("sock %p sk %p", sock, sk);
402
403         if (msg->msg_flags & MSG_OOB)
404                 return -EOPNOTSUPP;
405
406         if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
407                 return -EINVAL;
408
409         if (len < 4 || len > HCI_MAX_FRAME_SIZE)
410                 return -EINVAL;
411
412         lock_sock(sk);
413
414         if (!(hdev = hci_pi(sk)->hdev)) {
415                 err = -EBADFD;
416                 goto done;
417         }
418
419         if (!test_bit(HCI_UP, &hdev->flags)) {
420                 err = -ENETDOWN;
421                 goto done;
422         }
423
424         if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err)))
425                 goto done;
426
427         if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
428                 err = -EFAULT;
429                 goto drop;
430         }
431
432         bt_cb(skb)->pkt_type = *((unsigned char *) skb->data);
433         skb_pull(skb, 1);
434         skb->dev = (void *) hdev;
435
436         if (bt_cb(skb)->pkt_type == HCI_COMMAND_PKT) {
437                 u16 opcode = get_unaligned_le16(skb->data);
438                 u16 ogf = hci_opcode_ogf(opcode);
439                 u16 ocf = hci_opcode_ocf(opcode);
440
441                 if (((ogf > HCI_SFLT_MAX_OGF) ||
442                                 !hci_test_bit(ocf & HCI_FLT_OCF_BITS, &hci_sec_filter.ocf_mask[ogf])) &&
443                                         !capable(CAP_NET_RAW)) {
444                         err = -EPERM;
445                         goto drop;
446                 }
447
448                 if (test_bit(HCI_RAW, &hdev->flags) || (ogf == 0x3f)) {
449                         skb_queue_tail(&hdev->raw_q, skb);
450                         tasklet_schedule(&hdev->tx_task);
451                 } else {
452                         skb_queue_tail(&hdev->cmd_q, skb);
453                         tasklet_schedule(&hdev->cmd_task);
454                 }
455         } else {
456                 if (!capable(CAP_NET_RAW)) {
457                         err = -EPERM;
458                         goto drop;
459                 }
460
461                 skb_queue_tail(&hdev->raw_q, skb);
462                 tasklet_schedule(&hdev->tx_task);
463         }
464
465         err = len;
466
467 done:
468         release_sock(sk);
469         return err;
470
471 drop:
472         kfree_skb(skb);
473         goto done;
474 }
475
476 static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int len)
477 {
478         struct hci_ufilter uf = { .opcode = 0 };
479         struct sock *sk = sock->sk;
480         int err = 0, opt = 0;
481
482         BT_DBG("sk %p, opt %d", sk, optname);
483
484         lock_sock(sk);
485
486         switch (optname) {
487         case HCI_DATA_DIR:
488                 if (get_user(opt, (int __user *)optval)) {
489                         err = -EFAULT;
490                         break;
491                 }
492
493                 if (opt)
494                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_DIR;
495                 else
496                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_DIR;
497                 break;
498
499         case HCI_TIME_STAMP:
500                 if (get_user(opt, (int __user *)optval)) {
501                         err = -EFAULT;
502                         break;
503                 }
504
505                 if (opt)
506                         hci_pi(sk)->cmsg_mask |= HCI_CMSG_TSTAMP;
507                 else
508                         hci_pi(sk)->cmsg_mask &= ~HCI_CMSG_TSTAMP;
509                 break;
510
511         case HCI_FILTER:
512                 {
513                         struct hci_filter *f = &hci_pi(sk)->filter;
514
515                         uf.type_mask = f->type_mask;
516                         uf.opcode    = f->opcode;
517                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
518                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
519                 }
520
521                 len = min_t(unsigned int, len, sizeof(uf));
522                 if (copy_from_user(&uf, optval, len)) {
523                         err = -EFAULT;
524                         break;
525                 }
526
527                 if (!capable(CAP_NET_RAW)) {
528                         uf.type_mask &= hci_sec_filter.type_mask;
529                         uf.event_mask[0] &= *((u32 *) hci_sec_filter.event_mask + 0);
530                         uf.event_mask[1] &= *((u32 *) hci_sec_filter.event_mask + 1);
531                 }
532
533                 {
534                         struct hci_filter *f = &hci_pi(sk)->filter;
535
536                         f->type_mask = uf.type_mask;
537                         f->opcode    = uf.opcode;
538                         *((u32 *) f->event_mask + 0) = uf.event_mask[0];
539                         *((u32 *) f->event_mask + 1) = uf.event_mask[1];
540                 }
541                 break;
542
543         default:
544                 err = -ENOPROTOOPT;
545                 break;
546         }
547
548         release_sock(sk);
549         return err;
550 }
551
552 static int hci_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
553 {
554         struct hci_ufilter uf;
555         struct sock *sk = sock->sk;
556         int len, opt;
557
558         if (get_user(len, optlen))
559                 return -EFAULT;
560
561         switch (optname) {
562         case HCI_DATA_DIR:
563                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_DIR)
564                         opt = 1;
565                 else
566                         opt = 0;
567
568                 if (put_user(opt, optval))
569                         return -EFAULT;
570                 break;
571
572         case HCI_TIME_STAMP:
573                 if (hci_pi(sk)->cmsg_mask & HCI_CMSG_TSTAMP)
574                         opt = 1;
575                 else
576                         opt = 0;
577
578                 if (put_user(opt, optval))
579                         return -EFAULT;
580                 break;
581
582         case HCI_FILTER:
583                 {
584                         struct hci_filter *f = &hci_pi(sk)->filter;
585
586                         uf.type_mask = f->type_mask;
587                         uf.opcode    = f->opcode;
588                         uf.event_mask[0] = *((u32 *) f->event_mask + 0);
589                         uf.event_mask[1] = *((u32 *) f->event_mask + 1);
590                 }
591
592                 len = min_t(unsigned int, len, sizeof(uf));
593                 if (copy_to_user(optval, &uf, len))
594                         return -EFAULT;
595                 break;
596
597         default:
598                 return -ENOPROTOOPT;
599                 break;
600         }
601
602         return 0;
603 }
604
605 static const struct proto_ops hci_sock_ops = {
606         .family         = PF_BLUETOOTH,
607         .owner          = THIS_MODULE,
608         .release        = hci_sock_release,
609         .bind           = hci_sock_bind,
610         .getname        = hci_sock_getname,
611         .sendmsg        = hci_sock_sendmsg,
612         .recvmsg        = hci_sock_recvmsg,
613         .ioctl          = hci_sock_ioctl,
614         .poll           = datagram_poll,
615         .listen         = sock_no_listen,
616         .shutdown       = sock_no_shutdown,
617         .setsockopt     = hci_sock_setsockopt,
618         .getsockopt     = hci_sock_getsockopt,
619         .connect        = sock_no_connect,
620         .socketpair     = sock_no_socketpair,
621         .accept         = sock_no_accept,
622         .mmap           = sock_no_mmap
623 };
624
625 static struct proto hci_sk_proto = {
626         .name           = "HCI",
627         .owner          = THIS_MODULE,
628         .obj_size       = sizeof(struct hci_pinfo)
629 };
630
631 static int hci_sock_create(struct net *net, struct socket *sock, int protocol,
632                            int kern)
633 {
634         struct sock *sk;
635
636         BT_DBG("sock %p", sock);
637
638         if (sock->type != SOCK_RAW)
639                 return -ESOCKTNOSUPPORT;
640
641         sock->ops = &hci_sock_ops;
642
643         sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto);
644         if (!sk)
645                 return -ENOMEM;
646
647         sock_init_data(sock, sk);
648
649         sock_reset_flag(sk, SOCK_ZAPPED);
650
651         sk->sk_protocol = protocol;
652
653         sock->state = SS_UNCONNECTED;
654         sk->sk_state = BT_OPEN;
655
656         bt_sock_link(&hci_sk_list, sk);
657         return 0;
658 }
659
660 static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
661 {
662         struct hci_dev *hdev = (struct hci_dev *) ptr;
663         struct hci_ev_si_device ev;
664
665         BT_DBG("hdev %s event %ld", hdev->name, event);
666
667         /* Send event to sockets */
668         ev.event  = event;
669         ev.dev_id = hdev->id;
670         hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
671
672         if (event == HCI_DEV_UNREG) {
673                 struct sock *sk;
674                 struct hlist_node *node;
675
676                 /* Detach sockets from device */
677                 read_lock(&hci_sk_list.lock);
678                 sk_for_each(sk, node, &hci_sk_list.head) {
679                         local_bh_disable();
680                         bh_lock_sock_nested(sk);
681                         if (hci_pi(sk)->hdev == hdev) {
682                                 hci_pi(sk)->hdev = NULL;
683                                 sk->sk_err = EPIPE;
684                                 sk->sk_state = BT_OPEN;
685                                 sk->sk_state_change(sk);
686
687                                 hci_dev_put(hdev);
688                         }
689                         bh_unlock_sock(sk);
690                         local_bh_enable();
691                 }
692                 read_unlock(&hci_sk_list.lock);
693         }
694
695         return NOTIFY_DONE;
696 }
697
698 static const struct net_proto_family hci_sock_family_ops = {
699         .family = PF_BLUETOOTH,
700         .owner  = THIS_MODULE,
701         .create = hci_sock_create,
702 };
703
704 static struct notifier_block hci_sock_nblock = {
705         .notifier_call = hci_sock_dev_event
706 };
707
708 int __init hci_sock_init(void)
709 {
710         int err;
711
712         err = proto_register(&hci_sk_proto, 0);
713         if (err < 0)
714                 return err;
715
716         err = bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops);
717         if (err < 0)
718                 goto error;
719
720         hci_register_notifier(&hci_sock_nblock);
721
722         BT_INFO("HCI socket layer initialized");
723
724         return 0;
725
726 error:
727         BT_ERR("HCI socket registration failed");
728         proto_unregister(&hci_sk_proto);
729         return err;
730 }
731
732 void __exit hci_sock_cleanup(void)
733 {
734         if (bt_sock_unregister(BTPROTO_HCI) < 0)
735                 BT_ERR("HCI socket unregistration failed");
736
737         hci_unregister_notifier(&hci_sock_nblock);
738
739         proto_unregister(&hci_sk_proto);
740 }