xref: /linux/net/bluetooth/sco.c (revision 492c826b9facefa84995f4dea917e301b5ee0884)
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 SCO sockets. */
26 
27 #include <linux/module.h>
28 
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/sched.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/interrupt.h>
38 #include <linux/socket.h>
39 #include <linux/skbuff.h>
40 #include <linux/device.h>
41 #include <linux/debugfs.h>
42 #include <linux/seq_file.h>
43 #include <linux/list.h>
44 #include <net/sock.h>
45 
46 #include <asm/system.h>
47 #include <linux/uaccess.h>
48 
49 #include <net/bluetooth/bluetooth.h>
50 #include <net/bluetooth/hci_core.h>
51 #include <net/bluetooth/sco.h>
52 
53 static int disable_esco;
54 
55 static const struct proto_ops sco_sock_ops;
56 
57 static struct bt_sock_list sco_sk_list = {
58 	.lock = __RW_LOCK_UNLOCKED(sco_sk_list.lock)
59 };
60 
61 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent);
62 static void sco_chan_del(struct sock *sk, int err);
63 
64 static int  sco_conn_del(struct hci_conn *conn, int err);
65 
66 static void sco_sock_close(struct sock *sk);
67 static void sco_sock_kill(struct sock *sk);
68 
69 /* ---- SCO timers ---- */
70 static void sco_sock_timeout(unsigned long arg)
71 {
72 	struct sock *sk = (struct sock *) arg;
73 
74 	BT_DBG("sock %p state %d", sk, sk->sk_state);
75 
76 	bh_lock_sock(sk);
77 	sk->sk_err = ETIMEDOUT;
78 	sk->sk_state_change(sk);
79 	bh_unlock_sock(sk);
80 
81 	sco_sock_kill(sk);
82 	sock_put(sk);
83 }
84 
85 static void sco_sock_set_timer(struct sock *sk, long timeout)
86 {
87 	BT_DBG("sock %p state %d timeout %ld", sk, sk->sk_state, timeout);
88 	sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
89 }
90 
91 static void sco_sock_clear_timer(struct sock *sk)
92 {
93 	BT_DBG("sock %p state %d", sk, sk->sk_state);
94 	sk_stop_timer(sk, &sk->sk_timer);
95 }
96 
97 /* ---- SCO connections ---- */
98 static struct sco_conn *sco_conn_add(struct hci_conn *hcon, __u8 status)
99 {
100 	struct hci_dev *hdev = hcon->hdev;
101 	struct sco_conn *conn = hcon->sco_data;
102 
103 	if (conn || status)
104 		return conn;
105 
106 	conn = kzalloc(sizeof(struct sco_conn), GFP_ATOMIC);
107 	if (!conn)
108 		return NULL;
109 
110 	spin_lock_init(&conn->lock);
111 
112 	hcon->sco_data = conn;
113 	conn->hcon = hcon;
114 
115 	conn->src = &hdev->bdaddr;
116 	conn->dst = &hcon->dst;
117 
118 	if (hdev->sco_mtu > 0)
119 		conn->mtu = hdev->sco_mtu;
120 	else
121 		conn->mtu = 60;
122 
123 	BT_DBG("hcon %p conn %p", hcon, conn);
124 
125 	return conn;
126 }
127 
128 static inline struct sock *sco_chan_get(struct sco_conn *conn)
129 {
130 	struct sock *sk = NULL;
131 	sco_conn_lock(conn);
132 	sk = conn->sk;
133 	sco_conn_unlock(conn);
134 	return sk;
135 }
136 
137 static int sco_conn_del(struct hci_conn *hcon, int err)
138 {
139 	struct sco_conn *conn = hcon->sco_data;
140 	struct sock *sk;
141 
142 	if (!conn)
143 		return 0;
144 
145 	BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
146 
147 	/* Kill socket */
148 	sk = sco_chan_get(conn);
149 	if (sk) {
150 		bh_lock_sock(sk);
151 		sco_sock_clear_timer(sk);
152 		sco_chan_del(sk, err);
153 		bh_unlock_sock(sk);
154 		sco_sock_kill(sk);
155 	}
156 
157 	hcon->sco_data = NULL;
158 	kfree(conn);
159 	return 0;
160 }
161 
162 static inline int sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
163 {
164 	int err = 0;
165 
166 	sco_conn_lock(conn);
167 	if (conn->sk)
168 		err = -EBUSY;
169 	else
170 		__sco_chan_add(conn, sk, parent);
171 
172 	sco_conn_unlock(conn);
173 	return err;
174 }
175 
176 static int sco_connect(struct sock *sk)
177 {
178 	bdaddr_t *src = &bt_sk(sk)->src;
179 	bdaddr_t *dst = &bt_sk(sk)->dst;
180 	struct sco_conn *conn;
181 	struct hci_conn *hcon;
182 	struct hci_dev  *hdev;
183 	int err, type;
184 
185 	BT_DBG("%s -> %s", batostr(src), batostr(dst));
186 
187 	hdev = hci_get_route(dst, src);
188 	if (!hdev)
189 		return -EHOSTUNREACH;
190 
191 	hci_dev_lock_bh(hdev);
192 
193 	if (lmp_esco_capable(hdev) && !disable_esco)
194 		type = ESCO_LINK;
195 	else
196 		type = SCO_LINK;
197 
198 	hcon = hci_connect(hdev, type, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
199 	if (IS_ERR(hcon)) {
200 		err = PTR_ERR(hcon);
201 		goto done;
202 	}
203 
204 	conn = sco_conn_add(hcon, 0);
205 	if (!conn) {
206 		hci_conn_put(hcon);
207 		err = -ENOMEM;
208 		goto done;
209 	}
210 
211 	/* Update source addr of the socket */
212 	bacpy(src, conn->src);
213 
214 	err = sco_chan_add(conn, sk, NULL);
215 	if (err)
216 		goto done;
217 
218 	if (hcon->state == BT_CONNECTED) {
219 		sco_sock_clear_timer(sk);
220 		sk->sk_state = BT_CONNECTED;
221 	} else {
222 		sk->sk_state = BT_CONNECT;
223 		sco_sock_set_timer(sk, sk->sk_sndtimeo);
224 	}
225 
226 done:
227 	hci_dev_unlock_bh(hdev);
228 	hci_dev_put(hdev);
229 	return err;
230 }
231 
232 static inline int sco_send_frame(struct sock *sk, struct msghdr *msg, int len)
233 {
234 	struct sco_conn *conn = sco_pi(sk)->conn;
235 	struct sk_buff *skb;
236 	int err, count;
237 
238 	/* Check outgoing MTU */
239 	if (len > conn->mtu)
240 		return -EINVAL;
241 
242 	BT_DBG("sk %p len %d", sk, len);
243 
244 	count = min_t(unsigned int, conn->mtu, len);
245 	skb = bt_skb_send_alloc(sk, count,
246 			msg->msg_flags & MSG_DONTWAIT, &err);
247 	if (!skb)
248 		return err;
249 
250 	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count)) {
251 		kfree_skb(skb);
252 		return -EFAULT;
253 	}
254 
255 	hci_send_sco(conn->hcon, skb);
256 
257 	return count;
258 }
259 
260 static inline void sco_recv_frame(struct sco_conn *conn, struct sk_buff *skb)
261 {
262 	struct sock *sk = sco_chan_get(conn);
263 
264 	if (!sk)
265 		goto drop;
266 
267 	BT_DBG("sk %p len %d", sk, skb->len);
268 
269 	if (sk->sk_state != BT_CONNECTED)
270 		goto drop;
271 
272 	if (!sock_queue_rcv_skb(sk, skb))
273 		return;
274 
275 drop:
276 	kfree_skb(skb);
277 }
278 
279 /* -------- Socket interface ---------- */
280 static struct sock *__sco_get_sock_by_addr(bdaddr_t *ba)
281 {
282 	struct sock *sk;
283 	struct hlist_node *node;
284 
285 	sk_for_each(sk, node, &sco_sk_list.head)
286 		if (!bacmp(&bt_sk(sk)->src, ba))
287 			goto found;
288 	sk = NULL;
289 found:
290 	return sk;
291 }
292 
293 /* Find socket listening on source bdaddr.
294  * Returns closest match.
295  */
296 static struct sock *sco_get_sock_listen(bdaddr_t *src)
297 {
298 	struct sock *sk = NULL, *sk1 = NULL;
299 	struct hlist_node *node;
300 
301 	read_lock(&sco_sk_list.lock);
302 
303 	sk_for_each(sk, node, &sco_sk_list.head) {
304 		if (sk->sk_state != BT_LISTEN)
305 			continue;
306 
307 		/* Exact match. */
308 		if (!bacmp(&bt_sk(sk)->src, src))
309 			break;
310 
311 		/* Closest match */
312 		if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
313 			sk1 = sk;
314 	}
315 
316 	read_unlock(&sco_sk_list.lock);
317 
318 	return node ? sk : sk1;
319 }
320 
321 static void sco_sock_destruct(struct sock *sk)
322 {
323 	BT_DBG("sk %p", sk);
324 
325 	skb_queue_purge(&sk->sk_receive_queue);
326 	skb_queue_purge(&sk->sk_write_queue);
327 }
328 
329 static void sco_sock_cleanup_listen(struct sock *parent)
330 {
331 	struct sock *sk;
332 
333 	BT_DBG("parent %p", parent);
334 
335 	/* Close not yet accepted channels */
336 	while ((sk = bt_accept_dequeue(parent, NULL))) {
337 		sco_sock_close(sk);
338 		sco_sock_kill(sk);
339 	}
340 
341 	parent->sk_state  = BT_CLOSED;
342 	sock_set_flag(parent, SOCK_ZAPPED);
343 }
344 
345 /* Kill socket (only if zapped and orphan)
346  * Must be called on unlocked socket.
347  */
348 static void sco_sock_kill(struct sock *sk)
349 {
350 	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
351 		return;
352 
353 	BT_DBG("sk %p state %d", sk, sk->sk_state);
354 
355 	/* Kill poor orphan */
356 	bt_sock_unlink(&sco_sk_list, sk);
357 	sock_set_flag(sk, SOCK_DEAD);
358 	sock_put(sk);
359 }
360 
361 static void __sco_sock_close(struct sock *sk)
362 {
363 	BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
364 
365 	switch (sk->sk_state) {
366 	case BT_LISTEN:
367 		sco_sock_cleanup_listen(sk);
368 		break;
369 
370 	case BT_CONNECTED:
371 	case BT_CONFIG:
372 	case BT_CONNECT:
373 	case BT_DISCONN:
374 		sco_chan_del(sk, ECONNRESET);
375 		break;
376 
377 	default:
378 		sock_set_flag(sk, SOCK_ZAPPED);
379 		break;
380 	}
381 }
382 
383 /* Must be called on unlocked socket. */
384 static void sco_sock_close(struct sock *sk)
385 {
386 	sco_sock_clear_timer(sk);
387 	lock_sock(sk);
388 	__sco_sock_close(sk);
389 	release_sock(sk);
390 	sco_sock_kill(sk);
391 }
392 
393 static void sco_sock_init(struct sock *sk, struct sock *parent)
394 {
395 	BT_DBG("sk %p", sk);
396 
397 	if (parent)
398 		sk->sk_type = parent->sk_type;
399 }
400 
401 static struct proto sco_proto = {
402 	.name		= "SCO",
403 	.owner		= THIS_MODULE,
404 	.obj_size	= sizeof(struct sco_pinfo)
405 };
406 
407 static struct sock *sco_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
408 {
409 	struct sock *sk;
410 
411 	sk = sk_alloc(net, PF_BLUETOOTH, prio, &sco_proto);
412 	if (!sk)
413 		return NULL;
414 
415 	sock_init_data(sock, sk);
416 	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
417 
418 	sk->sk_destruct = sco_sock_destruct;
419 	sk->sk_sndtimeo = SCO_CONN_TIMEOUT;
420 
421 	sock_reset_flag(sk, SOCK_ZAPPED);
422 
423 	sk->sk_protocol = proto;
424 	sk->sk_state    = BT_OPEN;
425 
426 	setup_timer(&sk->sk_timer, sco_sock_timeout, (unsigned long)sk);
427 
428 	bt_sock_link(&sco_sk_list, sk);
429 	return sk;
430 }
431 
432 static int sco_sock_create(struct net *net, struct socket *sock, int protocol,
433 			   int kern)
434 {
435 	struct sock *sk;
436 
437 	BT_DBG("sock %p", sock);
438 
439 	sock->state = SS_UNCONNECTED;
440 
441 	if (sock->type != SOCK_SEQPACKET)
442 		return -ESOCKTNOSUPPORT;
443 
444 	sock->ops = &sco_sock_ops;
445 
446 	sk = sco_sock_alloc(net, sock, protocol, GFP_ATOMIC);
447 	if (!sk)
448 		return -ENOMEM;
449 
450 	sco_sock_init(sk, NULL);
451 	return 0;
452 }
453 
454 static int sco_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_len)
455 {
456 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
457 	struct sock *sk = sock->sk;
458 	bdaddr_t *src = &sa->sco_bdaddr;
459 	int err = 0;
460 
461 	BT_DBG("sk %p %s", sk, batostr(&sa->sco_bdaddr));
462 
463 	if (!addr || addr->sa_family != AF_BLUETOOTH)
464 		return -EINVAL;
465 
466 	lock_sock(sk);
467 
468 	if (sk->sk_state != BT_OPEN) {
469 		err = -EBADFD;
470 		goto done;
471 	}
472 
473 	write_lock_bh(&sco_sk_list.lock);
474 
475 	if (bacmp(src, BDADDR_ANY) && __sco_get_sock_by_addr(src)) {
476 		err = -EADDRINUSE;
477 	} else {
478 		/* Save source address */
479 		bacpy(&bt_sk(sk)->src, &sa->sco_bdaddr);
480 		sk->sk_state = BT_BOUND;
481 	}
482 
483 	write_unlock_bh(&sco_sk_list.lock);
484 
485 done:
486 	release_sock(sk);
487 	return err;
488 }
489 
490 static int sco_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags)
491 {
492 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
493 	struct sock *sk = sock->sk;
494 	int err = 0;
495 
496 
497 	BT_DBG("sk %p", sk);
498 
499 	if (alen < sizeof(struct sockaddr_sco) ||
500 	    addr->sa_family != AF_BLUETOOTH)
501 		return -EINVAL;
502 
503 	if (sk->sk_state != BT_OPEN && sk->sk_state != BT_BOUND)
504 		return -EBADFD;
505 
506 	if (sk->sk_type != SOCK_SEQPACKET)
507 		return -EINVAL;
508 
509 	lock_sock(sk);
510 
511 	/* Set destination address and psm */
512 	bacpy(&bt_sk(sk)->dst, &sa->sco_bdaddr);
513 
514 	err = sco_connect(sk);
515 	if (err)
516 		goto done;
517 
518 	err = bt_sock_wait_state(sk, BT_CONNECTED,
519 			sock_sndtimeo(sk, flags & O_NONBLOCK));
520 
521 done:
522 	release_sock(sk);
523 	return err;
524 }
525 
526 static int sco_sock_listen(struct socket *sock, int backlog)
527 {
528 	struct sock *sk = sock->sk;
529 	int err = 0;
530 
531 	BT_DBG("sk %p backlog %d", sk, backlog);
532 
533 	lock_sock(sk);
534 
535 	if (sk->sk_state != BT_BOUND || sock->type != SOCK_SEQPACKET) {
536 		err = -EBADFD;
537 		goto done;
538 	}
539 
540 	sk->sk_max_ack_backlog = backlog;
541 	sk->sk_ack_backlog = 0;
542 	sk->sk_state = BT_LISTEN;
543 
544 done:
545 	release_sock(sk);
546 	return err;
547 }
548 
549 static int sco_sock_accept(struct socket *sock, struct socket *newsock, int flags)
550 {
551 	DECLARE_WAITQUEUE(wait, current);
552 	struct sock *sk = sock->sk, *ch;
553 	long timeo;
554 	int err = 0;
555 
556 	lock_sock(sk);
557 
558 	if (sk->sk_state != BT_LISTEN) {
559 		err = -EBADFD;
560 		goto done;
561 	}
562 
563 	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
564 
565 	BT_DBG("sk %p timeo %ld", sk, timeo);
566 
567 	/* Wait for an incoming connection. (wake-one). */
568 	add_wait_queue_exclusive(sk_sleep(sk), &wait);
569 	while (!(ch = bt_accept_dequeue(sk, newsock))) {
570 		set_current_state(TASK_INTERRUPTIBLE);
571 		if (!timeo) {
572 			err = -EAGAIN;
573 			break;
574 		}
575 
576 		release_sock(sk);
577 		timeo = schedule_timeout(timeo);
578 		lock_sock(sk);
579 
580 		if (sk->sk_state != BT_LISTEN) {
581 			err = -EBADFD;
582 			break;
583 		}
584 
585 		if (signal_pending(current)) {
586 			err = sock_intr_errno(timeo);
587 			break;
588 		}
589 	}
590 	set_current_state(TASK_RUNNING);
591 	remove_wait_queue(sk_sleep(sk), &wait);
592 
593 	if (err)
594 		goto done;
595 
596 	newsock->state = SS_CONNECTED;
597 
598 	BT_DBG("new socket %p", ch);
599 
600 done:
601 	release_sock(sk);
602 	return err;
603 }
604 
605 static int sco_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer)
606 {
607 	struct sockaddr_sco *sa = (struct sockaddr_sco *) addr;
608 	struct sock *sk = sock->sk;
609 
610 	BT_DBG("sock %p, sk %p", sock, sk);
611 
612 	addr->sa_family = AF_BLUETOOTH;
613 	*len = sizeof(struct sockaddr_sco);
614 
615 	if (peer)
616 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->dst);
617 	else
618 		bacpy(&sa->sco_bdaddr, &bt_sk(sk)->src);
619 
620 	return 0;
621 }
622 
623 static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
624 			    struct msghdr *msg, size_t len)
625 {
626 	struct sock *sk = sock->sk;
627 	int err;
628 
629 	BT_DBG("sock %p, sk %p", sock, sk);
630 
631 	err = sock_error(sk);
632 	if (err)
633 		return err;
634 
635 	if (msg->msg_flags & MSG_OOB)
636 		return -EOPNOTSUPP;
637 
638 	lock_sock(sk);
639 
640 	if (sk->sk_state == BT_CONNECTED)
641 		err = sco_send_frame(sk, msg, len);
642 	else
643 		err = -ENOTCONN;
644 
645 	release_sock(sk);
646 	return err;
647 }
648 
649 static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
650 {
651 	struct sock *sk = sock->sk;
652 	int err = 0;
653 
654 	BT_DBG("sk %p", sk);
655 
656 	lock_sock(sk);
657 
658 	switch (optname) {
659 	default:
660 		err = -ENOPROTOOPT;
661 		break;
662 	}
663 
664 	release_sock(sk);
665 	return err;
666 }
667 
668 static int sco_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen)
669 {
670 	struct sock *sk = sock->sk;
671 	struct sco_options opts;
672 	struct sco_conninfo cinfo;
673 	int len, err = 0;
674 
675 	BT_DBG("sk %p", sk);
676 
677 	if (get_user(len, optlen))
678 		return -EFAULT;
679 
680 	lock_sock(sk);
681 
682 	switch (optname) {
683 	case SCO_OPTIONS:
684 		if (sk->sk_state != BT_CONNECTED) {
685 			err = -ENOTCONN;
686 			break;
687 		}
688 
689 		opts.mtu = sco_pi(sk)->conn->mtu;
690 
691 		BT_DBG("mtu %d", opts.mtu);
692 
693 		len = min_t(unsigned int, len, sizeof(opts));
694 		if (copy_to_user(optval, (char *)&opts, len))
695 			err = -EFAULT;
696 
697 		break;
698 
699 	case SCO_CONNINFO:
700 		if (sk->sk_state != BT_CONNECTED) {
701 			err = -ENOTCONN;
702 			break;
703 		}
704 
705 		memset(&cinfo, 0, sizeof(cinfo));
706 		cinfo.hci_handle = sco_pi(sk)->conn->hcon->handle;
707 		memcpy(cinfo.dev_class, sco_pi(sk)->conn->hcon->dev_class, 3);
708 
709 		len = min_t(unsigned int, len, sizeof(cinfo));
710 		if (copy_to_user(optval, (char *)&cinfo, len))
711 			err = -EFAULT;
712 
713 		break;
714 
715 	default:
716 		err = -ENOPROTOOPT;
717 		break;
718 	}
719 
720 	release_sock(sk);
721 	return err;
722 }
723 
724 static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen)
725 {
726 	struct sock *sk = sock->sk;
727 	int len, err = 0;
728 
729 	BT_DBG("sk %p", sk);
730 
731 	if (level == SOL_SCO)
732 		return sco_sock_getsockopt_old(sock, optname, optval, optlen);
733 
734 	if (get_user(len, optlen))
735 		return -EFAULT;
736 
737 	lock_sock(sk);
738 
739 	switch (optname) {
740 	default:
741 		err = -ENOPROTOOPT;
742 		break;
743 	}
744 
745 	release_sock(sk);
746 	return err;
747 }
748 
749 static int sco_sock_shutdown(struct socket *sock, int how)
750 {
751 	struct sock *sk = sock->sk;
752 	int err = 0;
753 
754 	BT_DBG("sock %p, sk %p", sock, sk);
755 
756 	if (!sk)
757 		return 0;
758 
759 	lock_sock(sk);
760 	if (!sk->sk_shutdown) {
761 		sk->sk_shutdown = SHUTDOWN_MASK;
762 		sco_sock_clear_timer(sk);
763 		__sco_sock_close(sk);
764 
765 		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
766 			err = bt_sock_wait_state(sk, BT_CLOSED,
767 							sk->sk_lingertime);
768 	}
769 	release_sock(sk);
770 	return err;
771 }
772 
773 static int sco_sock_release(struct socket *sock)
774 {
775 	struct sock *sk = sock->sk;
776 	int err = 0;
777 
778 	BT_DBG("sock %p, sk %p", sock, sk);
779 
780 	if (!sk)
781 		return 0;
782 
783 	sco_sock_close(sk);
784 
785 	if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) {
786 		lock_sock(sk);
787 		err = bt_sock_wait_state(sk, BT_CLOSED, sk->sk_lingertime);
788 		release_sock(sk);
789 	}
790 
791 	sock_orphan(sk);
792 	sco_sock_kill(sk);
793 	return err;
794 }
795 
796 static void __sco_chan_add(struct sco_conn *conn, struct sock *sk, struct sock *parent)
797 {
798 	BT_DBG("conn %p", conn);
799 
800 	sco_pi(sk)->conn = conn;
801 	conn->sk = sk;
802 
803 	if (parent)
804 		bt_accept_enqueue(parent, sk);
805 }
806 
807 /* Delete channel.
808  * Must be called on the locked socket. */
809 static void sco_chan_del(struct sock *sk, int err)
810 {
811 	struct sco_conn *conn;
812 
813 	conn = sco_pi(sk)->conn;
814 
815 	BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
816 
817 	if (conn) {
818 		sco_conn_lock(conn);
819 		conn->sk = NULL;
820 		sco_pi(sk)->conn = NULL;
821 		sco_conn_unlock(conn);
822 		hci_conn_put(conn->hcon);
823 	}
824 
825 	sk->sk_state = BT_CLOSED;
826 	sk->sk_err   = err;
827 	sk->sk_state_change(sk);
828 
829 	sock_set_flag(sk, SOCK_ZAPPED);
830 }
831 
832 static void sco_conn_ready(struct sco_conn *conn)
833 {
834 	struct sock *parent;
835 	struct sock *sk = conn->sk;
836 
837 	BT_DBG("conn %p", conn);
838 
839 	sco_conn_lock(conn);
840 
841 	if (sk) {
842 		sco_sock_clear_timer(sk);
843 		bh_lock_sock(sk);
844 		sk->sk_state = BT_CONNECTED;
845 		sk->sk_state_change(sk);
846 		bh_unlock_sock(sk);
847 	} else {
848 		parent = sco_get_sock_listen(conn->src);
849 		if (!parent)
850 			goto done;
851 
852 		bh_lock_sock(parent);
853 
854 		sk = sco_sock_alloc(sock_net(parent), NULL,
855 				BTPROTO_SCO, GFP_ATOMIC);
856 		if (!sk) {
857 			bh_unlock_sock(parent);
858 			goto done;
859 		}
860 
861 		sco_sock_init(sk, parent);
862 
863 		bacpy(&bt_sk(sk)->src, conn->src);
864 		bacpy(&bt_sk(sk)->dst, conn->dst);
865 
866 		hci_conn_hold(conn->hcon);
867 		__sco_chan_add(conn, sk, parent);
868 
869 		sk->sk_state = BT_CONNECTED;
870 
871 		/* Wake up parent */
872 		parent->sk_data_ready(parent, 1);
873 
874 		bh_unlock_sock(parent);
875 	}
876 
877 done:
878 	sco_conn_unlock(conn);
879 }
880 
881 /* ----- SCO interface with lower layer (HCI) ----- */
882 static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
883 {
884 	register struct sock *sk;
885 	struct hlist_node *node;
886 	int lm = 0;
887 
888 	if (type != SCO_LINK && type != ESCO_LINK)
889 		return -EINVAL;
890 
891 	BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
892 
893 	/* Find listening sockets */
894 	read_lock(&sco_sk_list.lock);
895 	sk_for_each(sk, node, &sco_sk_list.head) {
896 		if (sk->sk_state != BT_LISTEN)
897 			continue;
898 
899 		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
900 				!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
901 			lm |= HCI_LM_ACCEPT;
902 			break;
903 		}
904 	}
905 	read_unlock(&sco_sk_list.lock);
906 
907 	return lm;
908 }
909 
910 static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
911 {
912 	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
913 
914 	if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
915 		return -EINVAL;
916 
917 	if (!status) {
918 		struct sco_conn *conn;
919 
920 		conn = sco_conn_add(hcon, status);
921 		if (conn)
922 			sco_conn_ready(conn);
923 	} else
924 		sco_conn_del(hcon, bt_err(status));
925 
926 	return 0;
927 }
928 
929 static int sco_disconn_cfm(struct hci_conn *hcon, __u8 reason)
930 {
931 	BT_DBG("hcon %p reason %d", hcon, reason);
932 
933 	if (hcon->type != SCO_LINK && hcon->type != ESCO_LINK)
934 		return -EINVAL;
935 
936 	sco_conn_del(hcon, bt_err(reason));
937 
938 	return 0;
939 }
940 
941 static int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
942 {
943 	struct sco_conn *conn = hcon->sco_data;
944 
945 	if (!conn)
946 		goto drop;
947 
948 	BT_DBG("conn %p len %d", conn, skb->len);
949 
950 	if (skb->len) {
951 		sco_recv_frame(conn, skb);
952 		return 0;
953 	}
954 
955 drop:
956 	kfree_skb(skb);
957 	return 0;
958 }
959 
960 static int sco_debugfs_show(struct seq_file *f, void *p)
961 {
962 	struct sock *sk;
963 	struct hlist_node *node;
964 
965 	read_lock_bh(&sco_sk_list.lock);
966 
967 	sk_for_each(sk, node, &sco_sk_list.head) {
968 		seq_printf(f, "%s %s %d\n", batostr(&bt_sk(sk)->src),
969 				batostr(&bt_sk(sk)->dst), sk->sk_state);
970 	}
971 
972 	read_unlock_bh(&sco_sk_list.lock);
973 
974 	return 0;
975 }
976 
977 static int sco_debugfs_open(struct inode *inode, struct file *file)
978 {
979 	return single_open(file, sco_debugfs_show, inode->i_private);
980 }
981 
982 static const struct file_operations sco_debugfs_fops = {
983 	.open		= sco_debugfs_open,
984 	.read		= seq_read,
985 	.llseek		= seq_lseek,
986 	.release	= single_release,
987 };
988 
989 static struct dentry *sco_debugfs;
990 
991 static const struct proto_ops sco_sock_ops = {
992 	.family		= PF_BLUETOOTH,
993 	.owner		= THIS_MODULE,
994 	.release	= sco_sock_release,
995 	.bind		= sco_sock_bind,
996 	.connect	= sco_sock_connect,
997 	.listen		= sco_sock_listen,
998 	.accept		= sco_sock_accept,
999 	.getname	= sco_sock_getname,
1000 	.sendmsg	= sco_sock_sendmsg,
1001 	.recvmsg	= bt_sock_recvmsg,
1002 	.poll		= bt_sock_poll,
1003 	.ioctl		= bt_sock_ioctl,
1004 	.mmap		= sock_no_mmap,
1005 	.socketpair	= sock_no_socketpair,
1006 	.shutdown	= sco_sock_shutdown,
1007 	.setsockopt	= sco_sock_setsockopt,
1008 	.getsockopt	= sco_sock_getsockopt
1009 };
1010 
1011 static const struct net_proto_family sco_sock_family_ops = {
1012 	.family	= PF_BLUETOOTH,
1013 	.owner	= THIS_MODULE,
1014 	.create	= sco_sock_create,
1015 };
1016 
1017 static struct hci_proto sco_hci_proto = {
1018 	.name		= "SCO",
1019 	.id		= HCI_PROTO_SCO,
1020 	.connect_ind	= sco_connect_ind,
1021 	.connect_cfm	= sco_connect_cfm,
1022 	.disconn_cfm	= sco_disconn_cfm,
1023 	.recv_scodata	= sco_recv_scodata
1024 };
1025 
1026 int __init sco_init(void)
1027 {
1028 	int err;
1029 
1030 	err = proto_register(&sco_proto, 0);
1031 	if (err < 0)
1032 		return err;
1033 
1034 	err = bt_sock_register(BTPROTO_SCO, &sco_sock_family_ops);
1035 	if (err < 0) {
1036 		BT_ERR("SCO socket registration failed");
1037 		goto error;
1038 	}
1039 
1040 	err = hci_register_proto(&sco_hci_proto);
1041 	if (err < 0) {
1042 		BT_ERR("SCO protocol registration failed");
1043 		bt_sock_unregister(BTPROTO_SCO);
1044 		goto error;
1045 	}
1046 
1047 	if (bt_debugfs) {
1048 		sco_debugfs = debugfs_create_file("sco", 0444,
1049 					bt_debugfs, NULL, &sco_debugfs_fops);
1050 		if (!sco_debugfs)
1051 			BT_ERR("Failed to create SCO debug file");
1052 	}
1053 
1054 	BT_INFO("SCO socket layer initialized");
1055 
1056 	return 0;
1057 
1058 error:
1059 	proto_unregister(&sco_proto);
1060 	return err;
1061 }
1062 
1063 void __exit sco_exit(void)
1064 {
1065 	debugfs_remove(sco_debugfs);
1066 
1067 	if (bt_sock_unregister(BTPROTO_SCO) < 0)
1068 		BT_ERR("SCO socket unregistration failed");
1069 
1070 	if (hci_unregister_proto(&sco_hci_proto) < 0)
1071 		BT_ERR("SCO protocol unregistration failed");
1072 
1073 	proto_unregister(&sco_proto);
1074 }
1075 
1076 module_param(disable_esco, bool, 0644);
1077 MODULE_PARM_DESC(disable_esco, "Disable eSCO connection creation");
1078