aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/l2cap_sock.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/bluetooth/l2cap_sock.c')
-rw-r--r--net/bluetooth/l2cap_sock.c476
1 files changed, 227 insertions, 249 deletions
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index 8248303f44e..e8292369cdc 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -26,57 +26,16 @@
26 26
27/* Bluetooth L2CAP sockets. */ 27/* Bluetooth L2CAP sockets. */
28 28
29#include <linux/security.h>
30
29#include <net/bluetooth/bluetooth.h> 31#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h> 32#include <net/bluetooth/hci_core.h>
31#include <net/bluetooth/l2cap.h> 33#include <net/bluetooth/l2cap.h>
34#include <net/bluetooth/smp.h>
32 35
33static const struct proto_ops l2cap_sock_ops; 36static const struct proto_ops l2cap_sock_ops;
34 37static void l2cap_sock_init(struct sock *sk, struct sock *parent);
35/* ---- L2CAP timers ---- */ 38static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio);
36static void l2cap_sock_timeout(unsigned long arg)
37{
38 struct sock *sk = (struct sock *) arg;
39 int reason;
40
41 BT_DBG("sock %p state %d", sk, sk->sk_state);
42
43 bh_lock_sock(sk);
44
45 if (sock_owned_by_user(sk)) {
46 /* sk is owned by user. Try again later */
47 l2cap_sock_set_timer(sk, HZ / 5);
48 bh_unlock_sock(sk);
49 sock_put(sk);
50 return;
51 }
52
53 if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
54 reason = ECONNREFUSED;
55 else if (sk->sk_state == BT_CONNECT &&
56 l2cap_pi(sk)->chan->sec_level != BT_SECURITY_SDP)
57 reason = ECONNREFUSED;
58 else
59 reason = ETIMEDOUT;
60
61 __l2cap_sock_close(sk, reason);
62
63 bh_unlock_sock(sk);
64
65 l2cap_sock_kill(sk);
66 sock_put(sk);
67}
68
69void l2cap_sock_set_timer(struct sock *sk, long timeout)
70{
71 BT_DBG("sk %p state %d timeout %ld", sk, sk->sk_state, timeout);
72 sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
73}
74
75void l2cap_sock_clear_timer(struct sock *sk)
76{
77 BT_DBG("sock %p state %d", sk, sk->sk_state);
78 sk_stop_timer(sk, &sk->sk_timer);
79}
80 39
81static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) 40static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
82{ 41{
@@ -133,6 +92,8 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
133 chan->sec_level = BT_SECURITY_SDP; 92 chan->sec_level = BT_SECURITY_SDP;
134 93
135 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr); 94 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
95
96 chan->state = BT_BOUND;
136 sk->sk_state = BT_BOUND; 97 sk->sk_state = BT_BOUND;
137 98
138done: 99done:
@@ -162,7 +123,7 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
162 123
163 lock_sock(sk); 124 lock_sock(sk);
164 125
165 if ((sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM) 126 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED
166 && !(la.l2_psm || la.l2_cid)) { 127 && !(la.l2_psm || la.l2_cid)) {
167 err = -EINVAL; 128 err = -EINVAL;
168 goto done; 129 goto done;
@@ -204,8 +165,8 @@ static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int al
204 } 165 }
205 166
206 /* PSM must be odd and lsb of upper byte must be 0 */ 167 /* PSM must be odd and lsb of upper byte must be 0 */
207 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 && 168 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 && !la.l2_cid &&
208 sk->sk_type != SOCK_RAW && !la.l2_cid) { 169 chan->chan_type != L2CAP_CHAN_RAW) {
209 err = -EINVAL; 170 err = -EINVAL;
210 goto done; 171 goto done;
211 } 172 }
@@ -258,6 +219,8 @@ static int l2cap_sock_listen(struct socket *sock, int backlog)
258 219
259 sk->sk_max_ack_backlog = backlog; 220 sk->sk_max_ack_backlog = backlog;
260 sk->sk_ack_backlog = 0; 221 sk->sk_ack_backlog = 0;
222
223 chan->state = BT_LISTEN;
261 sk->sk_state = BT_LISTEN; 224 sk->sk_state = BT_LISTEN;
262 225
263done: 226done:
@@ -274,30 +237,26 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl
274 237
275 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 238 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
276 239
277 if (sk->sk_state != BT_LISTEN) {
278 err = -EBADFD;
279 goto done;
280 }
281
282 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 240 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);
283 241
284 BT_DBG("sk %p timeo %ld", sk, timeo); 242 BT_DBG("sk %p timeo %ld", sk, timeo);
285 243
286 /* Wait for an incoming connection. (wake-one). */ 244 /* Wait for an incoming connection. (wake-one). */
287 add_wait_queue_exclusive(sk_sleep(sk), &wait); 245 add_wait_queue_exclusive(sk_sleep(sk), &wait);
288 while (!(nsk = bt_accept_dequeue(sk, newsock))) { 246 while (1) {
289 set_current_state(TASK_INTERRUPTIBLE); 247 set_current_state(TASK_INTERRUPTIBLE);
290 if (!timeo) { 248
291 err = -EAGAIN; 249 if (sk->sk_state != BT_LISTEN) {
250 err = -EBADFD;
292 break; 251 break;
293 } 252 }
294 253
295 release_sock(sk); 254 nsk = bt_accept_dequeue(sk, newsock);
296 timeo = schedule_timeout(timeo); 255 if (nsk)
297 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 256 break;
298 257
299 if (sk->sk_state != BT_LISTEN) { 258 if (!timeo) {
300 err = -EBADFD; 259 err = -EAGAIN;
301 break; 260 break;
302 } 261 }
303 262
@@ -305,8 +264,12 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int fl
305 err = sock_intr_errno(timeo); 264 err = sock_intr_errno(timeo);
306 break; 265 break;
307 } 266 }
267
268 release_sock(sk);
269 timeo = schedule_timeout(timeo);
270 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
308 } 271 }
309 set_current_state(TASK_RUNNING); 272 __set_current_state(TASK_RUNNING);
310 remove_wait_queue(sk_sleep(sk), &wait); 273 remove_wait_queue(sk_sleep(sk), &wait);
311 274
312 if (err) 275 if (err)
@@ -437,6 +400,7 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch
437 struct sock *sk = sock->sk; 400 struct sock *sk = sock->sk;
438 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 401 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
439 struct bt_security sec; 402 struct bt_security sec;
403 struct bt_power pwr;
440 int len, err = 0; 404 int len, err = 0;
441 405
442 BT_DBG("sk %p", sk); 406 BT_DBG("sk %p", sk);
@@ -454,14 +418,18 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch
454 418
455 switch (optname) { 419 switch (optname) {
456 case BT_SECURITY: 420 case BT_SECURITY:
457 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 421 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
458 && sk->sk_type != SOCK_RAW) { 422 chan->chan_type != L2CAP_CHAN_RAW) {
459 err = -EINVAL; 423 err = -EINVAL;
460 break; 424 break;
461 } 425 }
462 426
427 memset(&sec, 0, sizeof(sec));
463 sec.level = chan->sec_level; 428 sec.level = chan->sec_level;
464 429
430 if (sk->sk_state == BT_CONNECTED)
431 sec.key_size = chan->conn->hcon->enc_key_size;
432
465 len = min_t(unsigned int, len, sizeof(sec)); 433 len = min_t(unsigned int, len, sizeof(sec));
466 if (copy_to_user(optval, (char *) &sec, len)) 434 if (copy_to_user(optval, (char *) &sec, len))
467 err = -EFAULT; 435 err = -EFAULT;
@@ -485,6 +453,21 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch
485 453
486 break; 454 break;
487 455
456 case BT_POWER:
457 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
458 && sk->sk_type != SOCK_RAW) {
459 err = -EINVAL;
460 break;
461 }
462
463 pwr.force_active = chan->force_active;
464
465 len = min_t(unsigned int, len, sizeof(pwr));
466 if (copy_to_user(optval, (char *) &pwr, len))
467 err = -EFAULT;
468
469 break;
470
488 default: 471 default:
489 err = -ENOPROTOOPT; 472 err = -ENOPROTOOPT;
490 break; 473 break;
@@ -535,7 +518,7 @@ static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __us
535 chan->mode = opts.mode; 518 chan->mode = opts.mode;
536 switch (chan->mode) { 519 switch (chan->mode) {
537 case L2CAP_MODE_BASIC: 520 case L2CAP_MODE_BASIC:
538 chan->conf_state &= ~L2CAP_CONF_STATE2_DEVICE; 521 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
539 break; 522 break;
540 case L2CAP_MODE_ERTM: 523 case L2CAP_MODE_ERTM:
541 case L2CAP_MODE_STREAMING: 524 case L2CAP_MODE_STREAMING:
@@ -585,6 +568,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
585 struct sock *sk = sock->sk; 568 struct sock *sk = sock->sk;
586 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 569 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
587 struct bt_security sec; 570 struct bt_security sec;
571 struct bt_power pwr;
572 struct l2cap_conn *conn;
588 int len, err = 0; 573 int len, err = 0;
589 u32 opt; 574 u32 opt;
590 575
@@ -600,8 +585,8 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
600 585
601 switch (optname) { 586 switch (optname) {
602 case BT_SECURITY: 587 case BT_SECURITY:
603 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 588 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
604 && sk->sk_type != SOCK_RAW) { 589 chan->chan_type != L2CAP_CHAN_RAW) {
605 err = -EINVAL; 590 err = -EINVAL;
606 break; 591 break;
607 } 592 }
@@ -621,6 +606,20 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
621 } 606 }
622 607
623 chan->sec_level = sec.level; 608 chan->sec_level = sec.level;
609
610 conn = chan->conn;
611 if (conn && chan->scid == L2CAP_CID_LE_DATA) {
612 if (!conn->hcon->out) {
613 err = -EINVAL;
614 break;
615 }
616
617 if (smp_conn_security(conn, sec.level))
618 break;
619
620 err = 0;
621 sk->sk_state = BT_CONFIG;
622 }
624 break; 623 break;
625 624
626 case BT_DEFER_SETUP: 625 case BT_DEFER_SETUP:
@@ -661,6 +660,23 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch
661 chan->flushable = opt; 660 chan->flushable = opt;
662 break; 661 break;
663 662
663 case BT_POWER:
664 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
665 chan->chan_type != L2CAP_CHAN_RAW) {
666 err = -EINVAL;
667 break;
668 }
669
670 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;
671
672 len = min_t(unsigned int, sizeof(pwr), optlen);
673 if (copy_from_user((char *) &pwr, optval, len)) {
674 err = -EFAULT;
675 break;
676 }
677 chan->force_active = pwr.force_active;
678 break;
679
664 default: 680 default:
665 err = -ENOPROTOOPT; 681 err = -ENOPROTOOPT;
666 break; 682 break;
@@ -674,8 +690,6 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
674{ 690{
675 struct sock *sk = sock->sk; 691 struct sock *sk = sock->sk;
676 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 692 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
677 struct sk_buff *skb;
678 u16 control;
679 int err; 693 int err;
680 694
681 BT_DBG("sock %p, sk %p", sock, sk); 695 BT_DBG("sock %p, sk %p", sock, sk);
@@ -690,87 +704,12 @@ static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct ms
690 lock_sock(sk); 704 lock_sock(sk);
691 705
692 if (sk->sk_state != BT_CONNECTED) { 706 if (sk->sk_state != BT_CONNECTED) {
693 err = -ENOTCONN; 707 release_sock(sk);
694 goto done; 708 return -ENOTCONN;
695 }
696
697 /* Connectionless channel */
698 if (sk->sk_type == SOCK_DGRAM) {
699 skb = l2cap_create_connless_pdu(chan, msg, len);
700 if (IS_ERR(skb)) {
701 err = PTR_ERR(skb);
702 } else {
703 l2cap_do_send(chan, skb);
704 err = len;
705 }
706 goto done;
707 } 709 }
708 710
709 switch (chan->mode) { 711 err = l2cap_chan_send(chan, msg, len);
710 case L2CAP_MODE_BASIC:
711 /* Check outgoing MTU */
712 if (len > chan->omtu) {
713 err = -EMSGSIZE;
714 goto done;
715 }
716
717 /* Create a basic PDU */
718 skb = l2cap_create_basic_pdu(chan, msg, len);
719 if (IS_ERR(skb)) {
720 err = PTR_ERR(skb);
721 goto done;
722 }
723
724 l2cap_do_send(chan, skb);
725 err = len;
726 break;
727
728 case L2CAP_MODE_ERTM:
729 case L2CAP_MODE_STREAMING:
730 /* Entire SDU fits into one PDU */
731 if (len <= chan->remote_mps) {
732 control = L2CAP_SDU_UNSEGMENTED;
733 skb = l2cap_create_iframe_pdu(chan, msg, len, control,
734 0);
735 if (IS_ERR(skb)) {
736 err = PTR_ERR(skb);
737 goto done;
738 }
739 __skb_queue_tail(&chan->tx_q, skb);
740
741 if (chan->tx_send_head == NULL)
742 chan->tx_send_head = skb;
743
744 } else {
745 /* Segment SDU into multiples PDUs */
746 err = l2cap_sar_segment_sdu(chan, msg, len);
747 if (err < 0)
748 goto done;
749 }
750
751 if (chan->mode == L2CAP_MODE_STREAMING) {
752 l2cap_streaming_send(chan);
753 err = len;
754 break;
755 }
756
757 if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
758 (chan->conn_state & L2CAP_CONN_WAIT_F)) {
759 err = len;
760 break;
761 }
762 err = l2cap_ertm_send(chan);
763
764 if (err >= 0)
765 err = len;
766 break;
767
768 default:
769 BT_DBG("bad state %1.1x", chan->mode);
770 err = -EBADFD;
771 }
772 712
773done:
774 release_sock(sk); 713 release_sock(sk);
775 return err; 714 return err;
776} 715}
@@ -778,13 +717,15 @@ done:
778static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags) 717static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags)
779{ 718{
780 struct sock *sk = sock->sk; 719 struct sock *sk = sock->sk;
720 struct l2cap_pinfo *pi = l2cap_pi(sk);
721 int err;
781 722
782 lock_sock(sk); 723 lock_sock(sk);
783 724
784 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) { 725 if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) {
785 sk->sk_state = BT_CONFIG; 726 sk->sk_state = BT_CONFIG;
786 727
787 __l2cap_connect_rsp_defer(l2cap_pi(sk)->chan); 728 __l2cap_connect_rsp_defer(pi->chan);
788 release_sock(sk); 729 release_sock(sk);
789 return 0; 730 return 0;
790 } 731 }
@@ -792,15 +733,43 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms
792 release_sock(sk); 733 release_sock(sk);
793 734
794 if (sock->type == SOCK_STREAM) 735 if (sock->type == SOCK_STREAM)
795 return bt_sock_stream_recvmsg(iocb, sock, msg, len, flags); 736 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
737 else
738 err = bt_sock_recvmsg(iocb, sock, msg, len, flags);
739
740 if (pi->chan->mode != L2CAP_MODE_ERTM)
741 return err;
742
743 /* Attempt to put pending rx data in the socket buffer */
744
745 lock_sock(sk);
746
747 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
748 goto done;
749
750 if (pi->rx_busy_skb) {
751 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
752 pi->rx_busy_skb = NULL;
753 else
754 goto done;
755 }
796 756
797 return bt_sock_recvmsg(iocb, sock, msg, len, flags); 757 /* Restore data flow when half of the receive buffer is
758 * available. This avoids resending large numbers of
759 * frames.
760 */
761 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
762 l2cap_chan_busy(pi->chan, 0);
763
764done:
765 release_sock(sk);
766 return err;
798} 767}
799 768
800/* Kill socket (only if zapped and orphan) 769/* Kill socket (only if zapped and orphan)
801 * Must be called on unlocked socket. 770 * Must be called on unlocked socket.
802 */ 771 */
803void l2cap_sock_kill(struct sock *sk) 772static void l2cap_sock_kill(struct sock *sk)
804{ 773{
805 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) 774 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
806 return; 775 return;
@@ -814,87 +783,6 @@ void l2cap_sock_kill(struct sock *sk)
814 sock_put(sk); 783 sock_put(sk);
815} 784}
816 785
817/* Must be called on unlocked socket. */
818static void l2cap_sock_close(struct sock *sk)
819{
820 l2cap_sock_clear_timer(sk);
821 lock_sock(sk);
822 __l2cap_sock_close(sk, ECONNRESET);
823 release_sock(sk);
824 l2cap_sock_kill(sk);
825}
826
827static void l2cap_sock_cleanup_listen(struct sock *parent)
828{
829 struct sock *sk;
830
831 BT_DBG("parent %p", parent);
832
833 /* Close not yet accepted channels */
834 while ((sk = bt_accept_dequeue(parent, NULL)))
835 l2cap_sock_close(sk);
836
837 parent->sk_state = BT_CLOSED;
838 sock_set_flag(parent, SOCK_ZAPPED);
839}
840
841void __l2cap_sock_close(struct sock *sk, int reason)
842{
843 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
844 struct l2cap_conn *conn = chan->conn;
845
846 BT_DBG("sk %p state %d socket %p", sk, sk->sk_state, sk->sk_socket);
847
848 switch (sk->sk_state) {
849 case BT_LISTEN:
850 l2cap_sock_cleanup_listen(sk);
851 break;
852
853 case BT_CONNECTED:
854 case BT_CONFIG:
855 if ((sk->sk_type == SOCK_SEQPACKET ||
856 sk->sk_type == SOCK_STREAM) &&
857 conn->hcon->type == ACL_LINK) {
858 l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
859 l2cap_send_disconn_req(conn, chan, reason);
860 } else
861 l2cap_chan_del(chan, reason);
862 break;
863
864 case BT_CONNECT2:
865 if ((sk->sk_type == SOCK_SEQPACKET ||
866 sk->sk_type == SOCK_STREAM) &&
867 conn->hcon->type == ACL_LINK) {
868 struct l2cap_conn_rsp rsp;
869 __u16 result;
870
871 if (bt_sk(sk)->defer_setup)
872 result = L2CAP_CR_SEC_BLOCK;
873 else
874 result = L2CAP_CR_BAD_PSM;
875
876 rsp.scid = cpu_to_le16(chan->dcid);
877 rsp.dcid = cpu_to_le16(chan->scid);
878 rsp.result = cpu_to_le16(result);
879 rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
880 l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
881 sizeof(rsp), &rsp);
882 }
883
884 l2cap_chan_del(chan, reason);
885 break;
886
887 case BT_CONNECT:
888 case BT_DISCONN:
889 l2cap_chan_del(chan, reason);
890 break;
891
892 default:
893 sock_set_flag(sk, SOCK_ZAPPED);
894 break;
895 }
896}
897
898static int l2cap_sock_shutdown(struct socket *sock, int how) 786static int l2cap_sock_shutdown(struct socket *sock, int how)
899{ 787{
900 struct sock *sk = sock->sk; 788 struct sock *sk = sock->sk;
@@ -912,8 +800,7 @@ static int l2cap_sock_shutdown(struct socket *sock, int how)
912 err = __l2cap_wait_ack(sk); 800 err = __l2cap_wait_ack(sk);
913 801
914 sk->sk_shutdown = SHUTDOWN_MASK; 802 sk->sk_shutdown = SHUTDOWN_MASK;
915 l2cap_sock_clear_timer(sk); 803 l2cap_chan_close(chan, 0);
916 __l2cap_sock_close(sk, 0);
917 804
918 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) 805 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
919 err = bt_sock_wait_state(sk, BT_CLOSED, 806 err = bt_sock_wait_state(sk, BT_CLOSED,
@@ -944,15 +831,85 @@ static int l2cap_sock_release(struct socket *sock)
944 return err; 831 return err;
945} 832}
946 833
834static struct l2cap_chan *l2cap_sock_new_connection_cb(void *data)
835{
836 struct sock *sk, *parent = data;
837
838 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
839 GFP_ATOMIC);
840 if (!sk)
841 return NULL;
842
843 l2cap_sock_init(sk, parent);
844
845 return l2cap_pi(sk)->chan;
846}
847
848static int l2cap_sock_recv_cb(void *data, struct sk_buff *skb)
849{
850 int err;
851 struct sock *sk = data;
852 struct l2cap_pinfo *pi = l2cap_pi(sk);
853
854 if (pi->rx_busy_skb)
855 return -ENOMEM;
856
857 err = sock_queue_rcv_skb(sk, skb);
858
859 /* For ERTM, handle one skb that doesn't fit into the recv
860 * buffer. This is important to do because the data frames
861 * have already been acked, so the skb cannot be discarded.
862 *
863 * Notify the l2cap core that the buffer is full, so the
864 * LOCAL_BUSY state is entered and no more frames are
865 * acked and reassembled until there is buffer space
866 * available.
867 */
868 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
869 pi->rx_busy_skb = skb;
870 l2cap_chan_busy(pi->chan, 1);
871 err = 0;
872 }
873
874 return err;
875}
876
877static void l2cap_sock_close_cb(void *data)
878{
879 struct sock *sk = data;
880
881 l2cap_sock_kill(sk);
882}
883
884static void l2cap_sock_state_change_cb(void *data, int state)
885{
886 struct sock *sk = data;
887
888 sk->sk_state = state;
889}
890
891static struct l2cap_ops l2cap_chan_ops = {
892 .name = "L2CAP Socket Interface",
893 .new_connection = l2cap_sock_new_connection_cb,
894 .recv = l2cap_sock_recv_cb,
895 .close = l2cap_sock_close_cb,
896 .state_change = l2cap_sock_state_change_cb,
897};
898
947static void l2cap_sock_destruct(struct sock *sk) 899static void l2cap_sock_destruct(struct sock *sk)
948{ 900{
949 BT_DBG("sk %p", sk); 901 BT_DBG("sk %p", sk);
950 902
903 if (l2cap_pi(sk)->rx_busy_skb) {
904 kfree_skb(l2cap_pi(sk)->rx_busy_skb);
905 l2cap_pi(sk)->rx_busy_skb = NULL;
906 }
907
951 skb_queue_purge(&sk->sk_receive_queue); 908 skb_queue_purge(&sk->sk_receive_queue);
952 skb_queue_purge(&sk->sk_write_queue); 909 skb_queue_purge(&sk->sk_write_queue);
953} 910}
954 911
955void l2cap_sock_init(struct sock *sk, struct sock *parent) 912static void l2cap_sock_init(struct sock *sk, struct sock *parent)
956{ 913{
957 struct l2cap_pinfo *pi = l2cap_pi(sk); 914 struct l2cap_pinfo *pi = l2cap_pi(sk);
958 struct l2cap_chan *chan = pi->chan; 915 struct l2cap_chan *chan = pi->chan;
@@ -965,6 +922,7 @@ void l2cap_sock_init(struct sock *sk, struct sock *parent)
965 sk->sk_type = parent->sk_type; 922 sk->sk_type = parent->sk_type;
966 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup; 923 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup;
967 924
925 chan->chan_type = pchan->chan_type;
968 chan->imtu = pchan->imtu; 926 chan->imtu = pchan->imtu;
969 chan->omtu = pchan->omtu; 927 chan->omtu = pchan->omtu;
970 chan->conf_state = pchan->conf_state; 928 chan->conf_state = pchan->conf_state;
@@ -976,12 +934,29 @@ void l2cap_sock_init(struct sock *sk, struct sock *parent)
976 chan->role_switch = pchan->role_switch; 934 chan->role_switch = pchan->role_switch;
977 chan->force_reliable = pchan->force_reliable; 935 chan->force_reliable = pchan->force_reliable;
978 chan->flushable = pchan->flushable; 936 chan->flushable = pchan->flushable;
937 chan->force_active = pchan->force_active;
938
939 security_sk_clone(parent, sk);
979 } else { 940 } else {
941
942 switch (sk->sk_type) {
943 case SOCK_RAW:
944 chan->chan_type = L2CAP_CHAN_RAW;
945 break;
946 case SOCK_DGRAM:
947 chan->chan_type = L2CAP_CHAN_CONN_LESS;
948 break;
949 case SOCK_SEQPACKET:
950 case SOCK_STREAM:
951 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
952 break;
953 }
954
980 chan->imtu = L2CAP_DEFAULT_MTU; 955 chan->imtu = L2CAP_DEFAULT_MTU;
981 chan->omtu = 0; 956 chan->omtu = 0;
982 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 957 if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
983 chan->mode = L2CAP_MODE_ERTM; 958 chan->mode = L2CAP_MODE_ERTM;
984 chan->conf_state |= L2CAP_CONF_STATE2_DEVICE; 959 set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
985 } else { 960 } else {
986 chan->mode = L2CAP_MODE_BASIC; 961 chan->mode = L2CAP_MODE_BASIC;
987 } 962 }
@@ -992,10 +967,15 @@ void l2cap_sock_init(struct sock *sk, struct sock *parent)
992 chan->role_switch = 0; 967 chan->role_switch = 0;
993 chan->force_reliable = 0; 968 chan->force_reliable = 0;
994 chan->flushable = BT_FLUSHABLE_OFF; 969 chan->flushable = BT_FLUSHABLE_OFF;
970 chan->force_active = BT_POWER_FORCE_ACTIVE_ON;
971
995 } 972 }
996 973
997 /* Default config options */ 974 /* Default config options */
998 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; 975 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
976
977 chan->data = sk;
978 chan->ops = &l2cap_chan_ops;
999} 979}
1000 980
1001static struct proto l2cap_proto = { 981static struct proto l2cap_proto = {
@@ -1004,9 +984,10 @@ static struct proto l2cap_proto = {
1004 .obj_size = sizeof(struct l2cap_pinfo) 984 .obj_size = sizeof(struct l2cap_pinfo)
1005}; 985};
1006 986
1007struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio) 987static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio)
1008{ 988{
1009 struct sock *sk; 989 struct sock *sk;
990 struct l2cap_chan *chan;
1010 991
1011 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto); 992 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
1012 if (!sk) 993 if (!sk)
@@ -1016,14 +997,20 @@ struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, g
1016 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); 997 INIT_LIST_HEAD(&bt_sk(sk)->accept_q);
1017 998
1018 sk->sk_destruct = l2cap_sock_destruct; 999 sk->sk_destruct = l2cap_sock_destruct;
1019 sk->sk_sndtimeo = msecs_to_jiffies(L2CAP_CONN_TIMEOUT); 1000 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1020 1001
1021 sock_reset_flag(sk, SOCK_ZAPPED); 1002 sock_reset_flag(sk, SOCK_ZAPPED);
1022 1003
1023 sk->sk_protocol = proto; 1004 sk->sk_protocol = proto;
1024 sk->sk_state = BT_OPEN; 1005 sk->sk_state = BT_OPEN;
1025 1006
1026 setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk); 1007 chan = l2cap_chan_create(sk);
1008 if (!chan) {
1009 l2cap_sock_kill(sk);
1010 return NULL;
1011 }
1012
1013 l2cap_pi(sk)->chan = chan;
1027 1014
1028 return sk; 1015 return sk;
1029} 1016}
@@ -1032,7 +1019,6 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1032 int kern) 1019 int kern)
1033{ 1020{
1034 struct sock *sk; 1021 struct sock *sk;
1035 struct l2cap_chan *chan;
1036 1022
1037 BT_DBG("sock %p", sock); 1023 BT_DBG("sock %p", sock);
1038 1024
@@ -1051,14 +1037,6 @@ static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
1051 if (!sk) 1037 if (!sk)
1052 return -ENOMEM; 1038 return -ENOMEM;
1053 1039
1054 chan = l2cap_chan_create(sk);
1055 if (!chan) {
1056 l2cap_sock_kill(sk);
1057 return -ENOMEM;
1058 }
1059
1060 l2cap_pi(sk)->chan = chan;
1061
1062 l2cap_sock_init(sk, NULL); 1040 l2cap_sock_init(sk, NULL);
1063 return 0; 1041 return 0;
1064} 1042}