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