xref: /linux/net/bluetooth/af_bluetooth.c (revision b889fcf63cb62e7fdb7816565e28f44dbe4a76a5)
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 address family and sockets. */
26 
27 #include <linux/module.h>
28 #include <asm/ioctls.h>
29 
30 #include <net/bluetooth/bluetooth.h>
31 #include <linux/proc_fs.h>
32 
33 #define VERSION "2.16"
34 
35 /* Bluetooth sockets */
36 #define BT_MAX_PROTO	8
37 static const struct net_proto_family *bt_proto[BT_MAX_PROTO];
38 static DEFINE_RWLOCK(bt_proto_lock);
39 
40 static struct lock_class_key bt_lock_key[BT_MAX_PROTO];
41 static const char *const bt_key_strings[BT_MAX_PROTO] = {
42 	"sk_lock-AF_BLUETOOTH-BTPROTO_L2CAP",
43 	"sk_lock-AF_BLUETOOTH-BTPROTO_HCI",
44 	"sk_lock-AF_BLUETOOTH-BTPROTO_SCO",
45 	"sk_lock-AF_BLUETOOTH-BTPROTO_RFCOMM",
46 	"sk_lock-AF_BLUETOOTH-BTPROTO_BNEP",
47 	"sk_lock-AF_BLUETOOTH-BTPROTO_CMTP",
48 	"sk_lock-AF_BLUETOOTH-BTPROTO_HIDP",
49 	"sk_lock-AF_BLUETOOTH-BTPROTO_AVDTP",
50 };
51 
52 static struct lock_class_key bt_slock_key[BT_MAX_PROTO];
53 static const char *const bt_slock_key_strings[BT_MAX_PROTO] = {
54 	"slock-AF_BLUETOOTH-BTPROTO_L2CAP",
55 	"slock-AF_BLUETOOTH-BTPROTO_HCI",
56 	"slock-AF_BLUETOOTH-BTPROTO_SCO",
57 	"slock-AF_BLUETOOTH-BTPROTO_RFCOMM",
58 	"slock-AF_BLUETOOTH-BTPROTO_BNEP",
59 	"slock-AF_BLUETOOTH-BTPROTO_CMTP",
60 	"slock-AF_BLUETOOTH-BTPROTO_HIDP",
61 	"slock-AF_BLUETOOTH-BTPROTO_AVDTP",
62 };
63 
64 void bt_sock_reclassify_lock(struct sock *sk, int proto)
65 {
66 	BUG_ON(!sk);
67 	BUG_ON(sock_owned_by_user(sk));
68 
69 	sock_lock_init_class_and_name(sk,
70 			bt_slock_key_strings[proto], &bt_slock_key[proto],
71 				bt_key_strings[proto], &bt_lock_key[proto]);
72 }
73 EXPORT_SYMBOL(bt_sock_reclassify_lock);
74 
75 int bt_sock_register(int proto, const struct net_proto_family *ops)
76 {
77 	int err = 0;
78 
79 	if (proto < 0 || proto >= BT_MAX_PROTO)
80 		return -EINVAL;
81 
82 	write_lock(&bt_proto_lock);
83 
84 	if (bt_proto[proto])
85 		err = -EEXIST;
86 	else
87 		bt_proto[proto] = ops;
88 
89 	write_unlock(&bt_proto_lock);
90 
91 	return err;
92 }
93 EXPORT_SYMBOL(bt_sock_register);
94 
95 int bt_sock_unregister(int proto)
96 {
97 	int err = 0;
98 
99 	if (proto < 0 || proto >= BT_MAX_PROTO)
100 		return -EINVAL;
101 
102 	write_lock(&bt_proto_lock);
103 
104 	if (!bt_proto[proto])
105 		err = -ENOENT;
106 	else
107 		bt_proto[proto] = NULL;
108 
109 	write_unlock(&bt_proto_lock);
110 
111 	return err;
112 }
113 EXPORT_SYMBOL(bt_sock_unregister);
114 
115 static int bt_sock_create(struct net *net, struct socket *sock, int proto,
116 			  int kern)
117 {
118 	int err;
119 
120 	if (net != &init_net)
121 		return -EAFNOSUPPORT;
122 
123 	if (proto < 0 || proto >= BT_MAX_PROTO)
124 		return -EINVAL;
125 
126 	if (!bt_proto[proto])
127 		request_module("bt-proto-%d", proto);
128 
129 	err = -EPROTONOSUPPORT;
130 
131 	read_lock(&bt_proto_lock);
132 
133 	if (bt_proto[proto] && try_module_get(bt_proto[proto]->owner)) {
134 		err = bt_proto[proto]->create(net, sock, proto, kern);
135 		if (!err)
136 			bt_sock_reclassify_lock(sock->sk, proto);
137 		module_put(bt_proto[proto]->owner);
138 	}
139 
140 	read_unlock(&bt_proto_lock);
141 
142 	return err;
143 }
144 
145 void bt_sock_link(struct bt_sock_list *l, struct sock *sk)
146 {
147 	write_lock(&l->lock);
148 	sk_add_node(sk, &l->head);
149 	write_unlock(&l->lock);
150 }
151 EXPORT_SYMBOL(bt_sock_link);
152 
153 void bt_sock_unlink(struct bt_sock_list *l, struct sock *sk)
154 {
155 	write_lock(&l->lock);
156 	sk_del_node_init(sk);
157 	write_unlock(&l->lock);
158 }
159 EXPORT_SYMBOL(bt_sock_unlink);
160 
161 void bt_accept_enqueue(struct sock *parent, struct sock *sk)
162 {
163 	BT_DBG("parent %p, sk %p", parent, sk);
164 
165 	sock_hold(sk);
166 	list_add_tail(&bt_sk(sk)->accept_q, &bt_sk(parent)->accept_q);
167 	bt_sk(sk)->parent = parent;
168 	parent->sk_ack_backlog++;
169 }
170 EXPORT_SYMBOL(bt_accept_enqueue);
171 
172 void bt_accept_unlink(struct sock *sk)
173 {
174 	BT_DBG("sk %p state %d", sk, sk->sk_state);
175 
176 	list_del_init(&bt_sk(sk)->accept_q);
177 	bt_sk(sk)->parent->sk_ack_backlog--;
178 	bt_sk(sk)->parent = NULL;
179 	sock_put(sk);
180 }
181 EXPORT_SYMBOL(bt_accept_unlink);
182 
183 struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock)
184 {
185 	struct list_head *p, *n;
186 	struct sock *sk;
187 
188 	BT_DBG("parent %p", parent);
189 
190 	list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
191 		sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
192 
193 		lock_sock(sk);
194 
195 		/* FIXME: Is this check still needed */
196 		if (sk->sk_state == BT_CLOSED) {
197 			release_sock(sk);
198 			bt_accept_unlink(sk);
199 			continue;
200 		}
201 
202 		if (sk->sk_state == BT_CONNECTED || !newsock ||
203 		    test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags)) {
204 			bt_accept_unlink(sk);
205 			if (newsock)
206 				sock_graft(sk, newsock);
207 
208 			release_sock(sk);
209 			return sk;
210 		}
211 
212 		release_sock(sk);
213 	}
214 
215 	return NULL;
216 }
217 EXPORT_SYMBOL(bt_accept_dequeue);
218 
219 int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
220 				struct msghdr *msg, size_t len, int flags)
221 {
222 	int noblock = flags & MSG_DONTWAIT;
223 	struct sock *sk = sock->sk;
224 	struct sk_buff *skb;
225 	size_t copied;
226 	int err;
227 
228 	BT_DBG("sock %p sk %p len %zu", sock, sk, len);
229 
230 	if (flags & (MSG_OOB))
231 		return -EOPNOTSUPP;
232 
233 	skb = skb_recv_datagram(sk, flags, noblock, &err);
234 	if (!skb) {
235 		if (sk->sk_shutdown & RCV_SHUTDOWN)
236 			return 0;
237 		return err;
238 	}
239 
240 	msg->msg_namelen = 0;
241 
242 	copied = skb->len;
243 	if (len < copied) {
244 		msg->msg_flags |= MSG_TRUNC;
245 		copied = len;
246 	}
247 
248 	skb_reset_transport_header(skb);
249 	err = skb_copy_datagram_iovec(skb, 0, msg->msg_iov, copied);
250 	if (err == 0)
251 		sock_recv_ts_and_drops(msg, sk, skb);
252 
253 	skb_free_datagram(sk, skb);
254 
255 	return err ? : copied;
256 }
257 EXPORT_SYMBOL(bt_sock_recvmsg);
258 
259 static long bt_sock_data_wait(struct sock *sk, long timeo)
260 {
261 	DECLARE_WAITQUEUE(wait, current);
262 
263 	add_wait_queue(sk_sleep(sk), &wait);
264 	for (;;) {
265 		set_current_state(TASK_INTERRUPTIBLE);
266 
267 		if (!skb_queue_empty(&sk->sk_receive_queue))
268 			break;
269 
270 		if (sk->sk_err || (sk->sk_shutdown & RCV_SHUTDOWN))
271 			break;
272 
273 		if (signal_pending(current) || !timeo)
274 			break;
275 
276 		set_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
277 		release_sock(sk);
278 		timeo = schedule_timeout(timeo);
279 		lock_sock(sk);
280 		clear_bit(SOCK_ASYNC_WAITDATA, &sk->sk_socket->flags);
281 	}
282 
283 	__set_current_state(TASK_RUNNING);
284 	remove_wait_queue(sk_sleep(sk), &wait);
285 	return timeo;
286 }
287 
288 int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,
289 			       struct msghdr *msg, size_t size, int flags)
290 {
291 	struct sock *sk = sock->sk;
292 	int err = 0;
293 	size_t target, copied = 0;
294 	long timeo;
295 
296 	if (flags & MSG_OOB)
297 		return -EOPNOTSUPP;
298 
299 	msg->msg_namelen = 0;
300 
301 	BT_DBG("sk %p size %zu", sk, size);
302 
303 	lock_sock(sk);
304 
305 	target = sock_rcvlowat(sk, flags & MSG_WAITALL, size);
306 	timeo  = sock_rcvtimeo(sk, flags & MSG_DONTWAIT);
307 
308 	do {
309 		struct sk_buff *skb;
310 		int chunk;
311 
312 		skb = skb_dequeue(&sk->sk_receive_queue);
313 		if (!skb) {
314 			if (copied >= target)
315 				break;
316 
317 			err = sock_error(sk);
318 			if (err)
319 				break;
320 			if (sk->sk_shutdown & RCV_SHUTDOWN)
321 				break;
322 
323 			err = -EAGAIN;
324 			if (!timeo)
325 				break;
326 
327 			timeo = bt_sock_data_wait(sk, timeo);
328 
329 			if (signal_pending(current)) {
330 				err = sock_intr_errno(timeo);
331 				goto out;
332 			}
333 			continue;
334 		}
335 
336 		chunk = min_t(unsigned int, skb->len, size);
337 		if (skb_copy_datagram_iovec(skb, 0, msg->msg_iov, chunk)) {
338 			skb_queue_head(&sk->sk_receive_queue, skb);
339 			if (!copied)
340 				copied = -EFAULT;
341 			break;
342 		}
343 		copied += chunk;
344 		size   -= chunk;
345 
346 		sock_recv_ts_and_drops(msg, sk, skb);
347 
348 		if (!(flags & MSG_PEEK)) {
349 			int skb_len = skb_headlen(skb);
350 
351 			if (chunk <= skb_len) {
352 				__skb_pull(skb, chunk);
353 			} else {
354 				struct sk_buff *frag;
355 
356 				__skb_pull(skb, skb_len);
357 				chunk -= skb_len;
358 
359 				skb_walk_frags(skb, frag) {
360 					if (chunk <= frag->len) {
361 						/* Pulling partial data */
362 						skb->len -= chunk;
363 						skb->data_len -= chunk;
364 						__skb_pull(frag, chunk);
365 						break;
366 					} else if (frag->len) {
367 						/* Pulling all frag data */
368 						chunk -= frag->len;
369 						skb->len -= frag->len;
370 						skb->data_len -= frag->len;
371 						__skb_pull(frag, frag->len);
372 					}
373 				}
374 			}
375 
376 			if (skb->len) {
377 				skb_queue_head(&sk->sk_receive_queue, skb);
378 				break;
379 			}
380 			kfree_skb(skb);
381 
382 		} else {
383 			/* put message back and return */
384 			skb_queue_head(&sk->sk_receive_queue, skb);
385 			break;
386 		}
387 	} while (size);
388 
389 out:
390 	release_sock(sk);
391 	return copied ? : err;
392 }
393 EXPORT_SYMBOL(bt_sock_stream_recvmsg);
394 
395 static inline unsigned int bt_accept_poll(struct sock *parent)
396 {
397 	struct list_head *p, *n;
398 	struct sock *sk;
399 
400 	list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
401 		sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
402 		if (sk->sk_state == BT_CONNECTED ||
403 		    (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags) &&
404 		     sk->sk_state == BT_CONNECT2))
405 			return POLLIN | POLLRDNORM;
406 	}
407 
408 	return 0;
409 }
410 
411 unsigned int bt_sock_poll(struct file *file, struct socket *sock,
412 			  poll_table *wait)
413 {
414 	struct sock *sk = sock->sk;
415 	unsigned int mask = 0;
416 
417 	BT_DBG("sock %p, sk %p", sock, sk);
418 
419 	poll_wait(file, sk_sleep(sk), wait);
420 
421 	if (sk->sk_state == BT_LISTEN)
422 		return bt_accept_poll(sk);
423 
424 	if (sk->sk_err || !skb_queue_empty(&sk->sk_error_queue))
425 		mask |= POLLERR;
426 
427 	if (sk->sk_shutdown & RCV_SHUTDOWN)
428 		mask |= POLLRDHUP | POLLIN | POLLRDNORM;
429 
430 	if (sk->sk_shutdown == SHUTDOWN_MASK)
431 		mask |= POLLHUP;
432 
433 	if (!skb_queue_empty(&sk->sk_receive_queue))
434 		mask |= POLLIN | POLLRDNORM;
435 
436 	if (sk->sk_state == BT_CLOSED)
437 		mask |= POLLHUP;
438 
439 	if (sk->sk_state == BT_CONNECT ||
440 			sk->sk_state == BT_CONNECT2 ||
441 			sk->sk_state == BT_CONFIG)
442 		return mask;
443 
444 	if (!test_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags) && sock_writeable(sk))
445 		mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
446 	else
447 		set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
448 
449 	return mask;
450 }
451 EXPORT_SYMBOL(bt_sock_poll);
452 
453 int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg)
454 {
455 	struct sock *sk = sock->sk;
456 	struct sk_buff *skb;
457 	long amount;
458 	int err;
459 
460 	BT_DBG("sk %p cmd %x arg %lx", sk, cmd, arg);
461 
462 	switch (cmd) {
463 	case TIOCOUTQ:
464 		if (sk->sk_state == BT_LISTEN)
465 			return -EINVAL;
466 
467 		amount = sk->sk_sndbuf - sk_wmem_alloc_get(sk);
468 		if (amount < 0)
469 			amount = 0;
470 		err = put_user(amount, (int __user *) arg);
471 		break;
472 
473 	case TIOCINQ:
474 		if (sk->sk_state == BT_LISTEN)
475 			return -EINVAL;
476 
477 		lock_sock(sk);
478 		skb = skb_peek(&sk->sk_receive_queue);
479 		amount = skb ? skb->len : 0;
480 		release_sock(sk);
481 		err = put_user(amount, (int __user *) arg);
482 		break;
483 
484 	case SIOCGSTAMP:
485 		err = sock_get_timestamp(sk, (struct timeval __user *) arg);
486 		break;
487 
488 	case SIOCGSTAMPNS:
489 		err = sock_get_timestampns(sk, (struct timespec __user *) arg);
490 		break;
491 
492 	default:
493 		err = -ENOIOCTLCMD;
494 		break;
495 	}
496 
497 	return err;
498 }
499 EXPORT_SYMBOL(bt_sock_ioctl);
500 
501 int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo)
502 {
503 	DECLARE_WAITQUEUE(wait, current);
504 	int err = 0;
505 
506 	BT_DBG("sk %p", sk);
507 
508 	add_wait_queue(sk_sleep(sk), &wait);
509 	set_current_state(TASK_INTERRUPTIBLE);
510 	while (sk->sk_state != state) {
511 		if (!timeo) {
512 			err = -EINPROGRESS;
513 			break;
514 		}
515 
516 		if (signal_pending(current)) {
517 			err = sock_intr_errno(timeo);
518 			break;
519 		}
520 
521 		release_sock(sk);
522 		timeo = schedule_timeout(timeo);
523 		lock_sock(sk);
524 		set_current_state(TASK_INTERRUPTIBLE);
525 
526 		err = sock_error(sk);
527 		if (err)
528 			break;
529 	}
530 	__set_current_state(TASK_RUNNING);
531 	remove_wait_queue(sk_sleep(sk), &wait);
532 	return err;
533 }
534 EXPORT_SYMBOL(bt_sock_wait_state);
535 
536 #ifdef CONFIG_PROC_FS
537 struct bt_seq_state {
538 	struct bt_sock_list *l;
539 };
540 
541 static void *bt_seq_start(struct seq_file *seq, loff_t *pos)
542 	__acquires(seq->private->l->lock)
543 {
544 	struct bt_seq_state *s = seq->private;
545 	struct bt_sock_list *l = s->l;
546 
547 	read_lock(&l->lock);
548 	return seq_hlist_start_head(&l->head, *pos);
549 }
550 
551 static void *bt_seq_next(struct seq_file *seq, void *v, loff_t *pos)
552 {
553 	struct bt_seq_state *s = seq->private;
554 	struct bt_sock_list *l = s->l;
555 
556 	return seq_hlist_next(v, &l->head, pos);
557 }
558 
559 static void bt_seq_stop(struct seq_file *seq, void *v)
560 	__releases(seq->private->l->lock)
561 {
562 	struct bt_seq_state *s = seq->private;
563 	struct bt_sock_list *l = s->l;
564 
565 	read_unlock(&l->lock);
566 }
567 
568 static int bt_seq_show(struct seq_file *seq, void *v)
569 {
570 	struct bt_seq_state *s = seq->private;
571 	struct bt_sock_list *l = s->l;
572 
573 	if (v == SEQ_START_TOKEN) {
574 		seq_puts(seq ,"sk               RefCnt Rmem   Wmem   User   Inode  Src Dst Parent");
575 
576 		if (l->custom_seq_show) {
577 			seq_putc(seq, ' ');
578 			l->custom_seq_show(seq, v);
579 		}
580 
581 		seq_putc(seq, '\n');
582 	} else {
583 		struct sock *sk = sk_entry(v);
584 		struct bt_sock *bt = bt_sk(sk);
585 
586 		seq_printf(seq,
587 			   "%pK %-6d %-6u %-6u %-6u %-6lu %pMR %pMR %-6lu",
588 			   sk,
589 			   atomic_read(&sk->sk_refcnt),
590 			   sk_rmem_alloc_get(sk),
591 			   sk_wmem_alloc_get(sk),
592 			   from_kuid(seq_user_ns(seq), sock_i_uid(sk)),
593 			   sock_i_ino(sk),
594 			   &bt->src,
595 			   &bt->dst,
596 			   bt->parent? sock_i_ino(bt->parent): 0LU);
597 
598 		if (l->custom_seq_show) {
599 			seq_putc(seq, ' ');
600 			l->custom_seq_show(seq, v);
601 		}
602 
603 		seq_putc(seq, '\n');
604 	}
605 	return 0;
606 }
607 
608 static struct seq_operations bt_seq_ops = {
609 	.start = bt_seq_start,
610 	.next  = bt_seq_next,
611 	.stop  = bt_seq_stop,
612 	.show  = bt_seq_show,
613 };
614 
615 static int bt_seq_open(struct inode *inode, struct file *file)
616 {
617 	struct bt_sock_list *sk_list;
618 	struct bt_seq_state *s;
619 
620 	sk_list = PDE(inode)->data;
621 	s = __seq_open_private(file, &bt_seq_ops,
622 			       sizeof(struct bt_seq_state));
623 	if (!s)
624 		return -ENOMEM;
625 
626 	s->l = sk_list;
627 	return 0;
628 }
629 
630 int bt_procfs_init(struct module* module, struct net *net, const char *name,
631 		   struct bt_sock_list* sk_list,
632 		   int (* seq_show)(struct seq_file *, void *))
633 {
634 	struct proc_dir_entry * pde;
635 
636 	sk_list->custom_seq_show = seq_show;
637 
638 	sk_list->fops.owner     = module;
639 	sk_list->fops.open      = bt_seq_open;
640 	sk_list->fops.read      = seq_read;
641 	sk_list->fops.llseek    = seq_lseek;
642 	sk_list->fops.release   = seq_release_private;
643 
644 	pde = proc_net_fops_create(net, name, 0, &sk_list->fops);
645 	if (!pde)
646 		return -ENOMEM;
647 
648 	pde->data = sk_list;
649 
650 	return 0;
651 }
652 
653 void bt_procfs_cleanup(struct net *net, const char *name)
654 {
655 	proc_net_remove(net, name);
656 }
657 #else
658 int bt_procfs_init(struct module* module, struct net *net, const char *name,
659 		   struct bt_sock_list* sk_list,
660 		   int (* seq_show)(struct seq_file *, void *))
661 {
662 	return 0;
663 }
664 
665 void bt_procfs_cleanup(struct net *net, const char *name)
666 {
667 }
668 #endif
669 EXPORT_SYMBOL(bt_procfs_init);
670 EXPORT_SYMBOL(bt_procfs_cleanup);
671 
672 static struct net_proto_family bt_sock_family_ops = {
673 	.owner	= THIS_MODULE,
674 	.family	= PF_BLUETOOTH,
675 	.create	= bt_sock_create,
676 };
677 
678 static int __init bt_init(void)
679 {
680 	int err;
681 
682 	BT_INFO("Core ver %s", VERSION);
683 
684 	err = bt_sysfs_init();
685 	if (err < 0)
686 		return err;
687 
688 	err = sock_register(&bt_sock_family_ops);
689 	if (err < 0) {
690 		bt_sysfs_cleanup();
691 		return err;
692 	}
693 
694 	BT_INFO("HCI device and connection manager initialized");
695 
696 	err = hci_sock_init();
697 	if (err < 0)
698 		goto error;
699 
700 	err = l2cap_init();
701 	if (err < 0)
702 		goto sock_err;
703 
704 	err = sco_init();
705 	if (err < 0) {
706 		l2cap_exit();
707 		goto sock_err;
708 	}
709 
710 	return 0;
711 
712 sock_err:
713 	hci_sock_cleanup();
714 
715 error:
716 	sock_unregister(PF_BLUETOOTH);
717 	bt_sysfs_cleanup();
718 
719 	return err;
720 }
721 
722 static void __exit bt_exit(void)
723 {
724 
725 	sco_exit();
726 
727 	l2cap_exit();
728 
729 	hci_sock_cleanup();
730 
731 	sock_unregister(PF_BLUETOOTH);
732 
733 	bt_sysfs_cleanup();
734 }
735 
736 subsys_initcall(bt_init);
737 module_exit(bt_exit);
738 
739 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
740 MODULE_DESCRIPTION("Bluetooth Core ver " VERSION);
741 MODULE_VERSION(VERSION);
742 MODULE_LICENSE("GPL");
743 MODULE_ALIAS_NETPROTO(PF_BLUETOOTH);
744