diff options
Diffstat (limited to 'net/bluetooth/l2cap_sock.c')
-rw-r--r-- | net/bluetooth/l2cap_sock.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index 1884f72083c2..ed06f88e6f10 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c | |||
@@ -99,15 +99,6 @@ static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) | |||
99 | if (!bdaddr_type_is_valid(la.l2_bdaddr_type)) | 99 | if (!bdaddr_type_is_valid(la.l2_bdaddr_type)) |
100 | return -EINVAL; | 100 | return -EINVAL; |
101 | 101 | ||
102 | if (la.l2_cid) { | ||
103 | /* When the socket gets created it defaults to | ||
104 | * CHAN_CONN_ORIENTED, so we need to overwrite the | ||
105 | * default here. | ||
106 | */ | ||
107 | chan->chan_type = L2CAP_CHAN_FIXED; | ||
108 | chan->omtu = L2CAP_DEFAULT_MTU; | ||
109 | } | ||
110 | |||
111 | if (bdaddr_type_is_le(la.l2_bdaddr_type)) { | 102 | if (bdaddr_type_is_le(la.l2_bdaddr_type)) { |
112 | /* We only allow ATT user space socket */ | 103 | /* We only allow ATT user space socket */ |
113 | if (la.l2_cid && | 104 | if (la.l2_cid && |
@@ -790,6 +781,7 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, | |||
790 | if (chan->scid == L2CAP_CID_ATT) { | 781 | if (chan->scid == L2CAP_CID_ATT) { |
791 | if (smp_conn_security(conn->hcon, sec.level)) | 782 | if (smp_conn_security(conn->hcon, sec.level)) |
792 | break; | 783 | break; |
784 | set_bit(FLAG_PENDING_SECURITY, &chan->flags); | ||
793 | sk->sk_state = BT_CONFIG; | 785 | sk->sk_state = BT_CONFIG; |
794 | chan->state = BT_CONFIG; | 786 | chan->state = BT_CONFIG; |
795 | 787 | ||
@@ -1359,6 +1351,11 @@ static void l2cap_sock_resume_cb(struct l2cap_chan *chan) | |||
1359 | { | 1351 | { |
1360 | struct sock *sk = chan->data; | 1352 | struct sock *sk = chan->data; |
1361 | 1353 | ||
1354 | if (test_and_clear_bit(FLAG_PENDING_SECURITY, &chan->flags)) { | ||
1355 | sk->sk_state = BT_CONNECTED; | ||
1356 | chan->state = BT_CONNECTED; | ||
1357 | } | ||
1358 | |||
1362 | clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); | 1359 | clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); |
1363 | sk->sk_state_change(sk); | 1360 | sk->sk_state_change(sk); |
1364 | } | 1361 | } |