xref: /openbmc/linux/net/bluetooth/hci_sock.c (revision a09d2831)
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 		struct timeval tv;
333 		void *data;
334 		int len;
335 
336 		skb_get_timestamp(skb, &tv);
337 
338 		data = &tv;
339 		len = sizeof(tv);
340 #ifdef CONFIG_COMPAT
341 		if (msg->msg_flags & MSG_CMSG_COMPAT) {
342 			struct compat_timeval ctv;
343 			ctv.tv_sec = tv.tv_sec;
344 			ctv.tv_usec = tv.tv_usec;
345 			data = &ctv;
346 			len = sizeof(ctv);
347 		}
348 #endif
349 
350 		put_cmsg(msg, SOL_HCI, HCI_CMSG_TSTAMP, len, data);
351 	}
352 }
353 
354 static int hci_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
355 				struct msghdr *msg, size_t len, int flags)
356 {
357 	int noblock = flags & MSG_DONTWAIT;
358 	struct sock *sk = sock->sk;
359 	struct sk_buff *skb;
360 	int copied, err;
361 
362 	BT_DBG("sock %p, sk %p", sock, sk);
363 
364 	if (flags & (MSG_OOB))
365 		return -EOPNOTSUPP;
366 
367 	if (sk->sk_state == BT_CLOSED)
368 		return 0;
369 
370 	if (!(skb = skb_recv_datagram(sk, flags, noblock, &err)))
371 		return err;
372 
373 	msg->msg_namelen = 0;
374 
375 	copied = skb->len;
376 	if (len < copied) {
377 		msg->msg_flags |= MSG_TRUNC;
378 		copied = len;
379 	}
380 
381 	skb_reset_transport_header(skb);
382 	err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
383 
384 	hci_sock_cmsg(sk, msg, skb);
385 
386 	skb_free_datagram(sk, skb);
387 
388 	return err ? : copied;
389 }
390 
391 static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
392 			    struct msghdr *msg, size_t len)
393 {
394 	struct sock *sk = sock->sk;
395 	struct hci_dev *hdev;
396 	struct sk_buff *skb;
397 	int err;
398 
399 	BT_DBG("sock %p sk %p", sock, sk);
400 
401 	if (msg->msg_flags & MSG_OOB)
402 		return -EOPNOTSUPP;
403 
404 	if (msg->msg_flags & ~(MSG_DONTWAIT|MSG_NOSIGNAL|MSG_ERRQUEUE))
405 		return -EINVAL;
406 
407 	if (len < 4 || len > HCI_MAX_FRAME_SIZE)
408 		return -EINVAL;
409 
410 	lock_sock(sk);
411 
412 	if (!(hdev = hci_pi(sk)->hdev)) {
413 		err = -EBADFD;
414 		goto done;
415 	}
416 
417 	if (!test_bit(HCI_UP, &hdev->flags)) {
418 		err = -ENETDOWN;
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 			tasklet_schedule(&hdev->tx_task);
449 		} else {
450 			skb_queue_tail(&hdev->cmd_q, skb);
451 			tasklet_schedule(&hdev->cmd_task);
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 		tasklet_schedule(&hdev->tx_task);
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, unsigned 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 			   int kern)
631 {
632 	struct sock *sk;
633 
634 	BT_DBG("sock %p", sock);
635 
636 	if (sock->type != SOCK_RAW)
637 		return -ESOCKTNOSUPPORT;
638 
639 	sock->ops = &hci_sock_ops;
640 
641 	sk = sk_alloc(net, PF_BLUETOOTH, GFP_ATOMIC, &hci_sk_proto);
642 	if (!sk)
643 		return -ENOMEM;
644 
645 	sock_init_data(sock, sk);
646 
647 	sock_reset_flag(sk, SOCK_ZAPPED);
648 
649 	sk->sk_protocol = protocol;
650 
651 	sock->state = SS_UNCONNECTED;
652 	sk->sk_state = BT_OPEN;
653 
654 	bt_sock_link(&hci_sk_list, sk);
655 	return 0;
656 }
657 
658 static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, void *ptr)
659 {
660 	struct hci_dev *hdev = (struct hci_dev *) ptr;
661 	struct hci_ev_si_device ev;
662 
663 	BT_DBG("hdev %s event %ld", hdev->name, event);
664 
665 	/* Send event to sockets */
666 	ev.event  = event;
667 	ev.dev_id = hdev->id;
668 	hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
669 
670 	if (event == HCI_DEV_UNREG) {
671 		struct sock *sk;
672 		struct hlist_node *node;
673 
674 		/* Detach sockets from device */
675 		read_lock(&hci_sk_list.lock);
676 		sk_for_each(sk, node, &hci_sk_list.head) {
677 			local_bh_disable();
678 			bh_lock_sock_nested(sk);
679 			if (hci_pi(sk)->hdev == hdev) {
680 				hci_pi(sk)->hdev = NULL;
681 				sk->sk_err = EPIPE;
682 				sk->sk_state = BT_OPEN;
683 				sk->sk_state_change(sk);
684 
685 				hci_dev_put(hdev);
686 			}
687 			bh_unlock_sock(sk);
688 			local_bh_enable();
689 		}
690 		read_unlock(&hci_sk_list.lock);
691 	}
692 
693 	return NOTIFY_DONE;
694 }
695 
696 static const struct net_proto_family hci_sock_family_ops = {
697 	.family	= PF_BLUETOOTH,
698 	.owner	= THIS_MODULE,
699 	.create	= hci_sock_create,
700 };
701 
702 static struct notifier_block hci_sock_nblock = {
703 	.notifier_call = hci_sock_dev_event
704 };
705 
706 int __init hci_sock_init(void)
707 {
708 	int err;
709 
710 	err = proto_register(&hci_sk_proto, 0);
711 	if (err < 0)
712 		return err;
713 
714 	err = bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops);
715 	if (err < 0)
716 		goto error;
717 
718 	hci_register_notifier(&hci_sock_nblock);
719 
720 	BT_INFO("HCI socket layer initialized");
721 
722 	return 0;
723 
724 error:
725 	BT_ERR("HCI socket registration failed");
726 	proto_unregister(&hci_sk_proto);
727 	return err;
728 }
729 
730 void __exit hci_sock_cleanup(void)
731 {
732 	if (bt_sock_unregister(BTPROTO_HCI) < 0)
733 		BT_ERR("HCI socket unregistration failed");
734 
735 	hci_unregister_notifier(&hci_sock_nblock);
736 
737 	proto_unregister(&hci_sk_proto);
738 }
739