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