aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2012-12-03 13:46:03 -0500
committerJohn W. Linville <linville@tuxdriver.com>2012-12-03 13:46:03 -0500
commit06ef5c4bbb9816e7a7eb44917f11c2e3375fb51a (patch)
treecac94ec09e789a6e5162d1925ee944075bf6eef6 /net
parent55cec505559dade9e7776de8f3d23fc3e54e091d (diff)
parent0b27a4b97cb1874503c78453c0903df53c0c86b2 (diff)
Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/hci_core.c5
-rw-r--r--net/bluetooth/hci_event.c56
-rw-r--r--net/bluetooth/l2cap_core.c100
-rw-r--r--net/bluetooth/mgmt.c10
-rw-r--r--net/bluetooth/rfcomm/sock.c4
-rw-r--r--net/bluetooth/sco.c86
6 files changed, 187 insertions, 74 deletions
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 7140f83328a2..596660d37c5e 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -861,6 +861,9 @@ static int hci_dev_do_close(struct hci_dev *hdev)
861 /* Clear flags */ 861 /* Clear flags */
862 hdev->flags = 0; 862 hdev->flags = 0;
863 863
864 /* Controller radio is available but is currently powered down */
865 hdev->amp_status = 0;
866
864 memset(hdev->eir, 0, sizeof(hdev->eir)); 867 memset(hdev->eir, 0, sizeof(hdev->eir));
865 memset(hdev->dev_class, 0, sizeof(hdev->dev_class)); 868 memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
866 869
@@ -1854,6 +1857,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
1854 for (i = 0; i < NUM_REASSEMBLY; i++) 1857 for (i = 0; i < NUM_REASSEMBLY; i++)
1855 kfree_skb(hdev->reassembly[i]); 1858 kfree_skb(hdev->reassembly[i]);
1856 1859
1860 cancel_work_sync(&hdev->power_on);
1861
1857 if (!test_bit(HCI_INIT, &hdev->flags) && 1862 if (!test_bit(HCI_INIT, &hdev->flags) &&
1858 !test_bit(HCI_SETUP, &hdev->dev_flags)) { 1863 !test_bit(HCI_SETUP, &hdev->dev_flags)) {
1859 hci_dev_lock(hdev); 1864 hci_dev_lock(hdev);
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 9f5c5f244502..705078a0cc39 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -794,10 +794,10 @@ static void hci_set_le_support(struct hci_dev *hdev)
794 794
795 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) { 795 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
796 cp.le = 1; 796 cp.le = 1;
797 cp.simul = !!lmp_le_br_capable(hdev); 797 cp.simul = lmp_le_br_capable(hdev);
798 } 798 }
799 799
800 if (cp.le != !!lmp_host_le_capable(hdev)) 800 if (cp.le != lmp_host_le_capable(hdev))
801 hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp), 801 hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
802 &cp); 802 &cp);
803} 803}
@@ -2047,15 +2047,53 @@ unlock:
2047 hci_conn_check_pending(hdev); 2047 hci_conn_check_pending(hdev);
2048} 2048}
2049 2049
2050void hci_conn_accept(struct hci_conn *conn, int mask)
2051{
2052 struct hci_dev *hdev = conn->hdev;
2053
2054 BT_DBG("conn %p", conn);
2055
2056 conn->state = BT_CONFIG;
2057
2058 if (!lmp_esco_capable(hdev)) {
2059 struct hci_cp_accept_conn_req cp;
2060
2061 bacpy(&cp.bdaddr, &conn->dst);
2062
2063 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2064 cp.role = 0x00; /* Become master */
2065 else
2066 cp.role = 0x01; /* Remain slave */
2067
2068 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2069 } else /* lmp_esco_capable(hdev)) */ {
2070 struct hci_cp_accept_sync_conn_req cp;
2071
2072 bacpy(&cp.bdaddr, &conn->dst);
2073 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2074
2075 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2076 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2077 cp.max_latency = __constant_cpu_to_le16(0xffff);
2078 cp.content_format = cpu_to_le16(hdev->voice_setting);
2079 cp.retrans_effort = 0xff;
2080
2081 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2082 sizeof(cp), &cp);
2083 }
2084}
2085
2050static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb) 2086static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2051{ 2087{
2052 struct hci_ev_conn_request *ev = (void *) skb->data; 2088 struct hci_ev_conn_request *ev = (void *) skb->data;
2053 int mask = hdev->link_mode; 2089 int mask = hdev->link_mode;
2090 __u8 flags = 0;
2054 2091
2055 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr, 2092 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2056 ev->link_type); 2093 ev->link_type);
2057 2094
2058 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type); 2095 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2096 &flags);
2059 2097
2060 if ((mask & HCI_LM_ACCEPT) && 2098 if ((mask & HCI_LM_ACCEPT) &&
2061 !hci_blacklist_lookup(hdev, &ev->bdaddr)) { 2099 !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
@@ -2081,12 +2119,13 @@ static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2081 } 2119 }
2082 2120
2083 memcpy(conn->dev_class, ev->dev_class, 3); 2121 memcpy(conn->dev_class, ev->dev_class, 3);
2084 conn->state = BT_CONNECT;
2085 2122
2086 hci_dev_unlock(hdev); 2123 hci_dev_unlock(hdev);
2087 2124
2088 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) { 2125 if (ev->link_type == ACL_LINK ||
2126 (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2089 struct hci_cp_accept_conn_req cp; 2127 struct hci_cp_accept_conn_req cp;
2128 conn->state = BT_CONNECT;
2090 2129
2091 bacpy(&cp.bdaddr, &ev->bdaddr); 2130 bacpy(&cp.bdaddr, &ev->bdaddr);
2092 2131
@@ -2097,8 +2136,9 @@ static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2097 2136
2098 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), 2137 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
2099 &cp); 2138 &cp);
2100 } else { 2139 } else if (!(flags & HCI_PROTO_DEFER)) {
2101 struct hci_cp_accept_sync_conn_req cp; 2140 struct hci_cp_accept_sync_conn_req cp;
2141 conn->state = BT_CONNECT;
2102 2142
2103 bacpy(&cp.bdaddr, &ev->bdaddr); 2143 bacpy(&cp.bdaddr, &ev->bdaddr);
2104 cp.pkt_type = cpu_to_le16(conn->pkt_type); 2144 cp.pkt_type = cpu_to_le16(conn->pkt_type);
@@ -2111,6 +2151,10 @@ static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2111 2151
2112 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, 2152 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2113 sizeof(cp), &cp); 2153 sizeof(cp), &cp);
2154 } else {
2155 conn->state = BT_CONNECT2;
2156 hci_proto_connect_cfm(conn, 0);
2157 hci_conn_put(conn);
2114 } 2158 }
2115 } else { 2159 } else {
2116 /* Connection rejected */ 2160 /* Connection rejected */
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index b52f66d22437..2c78208d793e 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -53,8 +53,7 @@ static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
53static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, 53static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
54 void *data); 54 void *data);
55static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data); 55static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
56static void l2cap_send_disconn_req(struct l2cap_conn *conn, 56static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
57 struct l2cap_chan *chan, int err);
58 57
59static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control, 58static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
60 struct sk_buff_head *skbs, u8 event); 59 struct sk_buff_head *skbs, u8 event);
@@ -632,7 +631,7 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason)
632 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && 631 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
633 conn->hcon->type == ACL_LINK) { 632 conn->hcon->type == ACL_LINK) {
634 __set_chan_timer(chan, sk->sk_sndtimeo); 633 __set_chan_timer(chan, sk->sk_sndtimeo);
635 l2cap_send_disconn_req(conn, chan, reason); 634 l2cap_send_disconn_req(chan, reason);
636 } else 635 } else
637 l2cap_chan_del(chan, reason); 636 l2cap_chan_del(chan, reason);
638 break; 637 break;
@@ -1014,6 +1013,7 @@ static bool __amp_capable(struct l2cap_chan *chan)
1014 struct l2cap_conn *conn = chan->conn; 1013 struct l2cap_conn *conn = chan->conn;
1015 1014
1016 if (enable_hs && 1015 if (enable_hs &&
1016 hci_amp_capable() &&
1017 chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED && 1017 chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED &&
1018 conn->fixed_chan_mask & L2CAP_FC_A2MP) 1018 conn->fixed_chan_mask & L2CAP_FC_A2MP)
1019 return true; 1019 return true;
@@ -1180,10 +1180,10 @@ static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1180 } 1180 }
1181} 1181}
1182 1182
1183static void l2cap_send_disconn_req(struct l2cap_conn *conn, 1183static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1184 struct l2cap_chan *chan, int err)
1185{ 1184{
1186 struct sock *sk = chan->sk; 1185 struct sock *sk = chan->sk;
1186 struct l2cap_conn *conn = chan->conn;
1187 struct l2cap_disconn_req req; 1187 struct l2cap_disconn_req req;
1188 1188
1189 if (!conn) 1189 if (!conn)
@@ -1960,7 +1960,7 @@ static void l2cap_ertm_resend(struct l2cap_chan *chan)
1960 if (chan->max_tx != 0 && 1960 if (chan->max_tx != 0 &&
1961 bt_cb(skb)->control.retries > chan->max_tx) { 1961 bt_cb(skb)->control.retries > chan->max_tx) {
1962 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 1962 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
1963 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 1963 l2cap_send_disconn_req(chan, ECONNRESET);
1964 l2cap_seq_list_clear(&chan->retrans_list); 1964 l2cap_seq_list_clear(&chan->retrans_list);
1965 break; 1965 break;
1966 } 1966 }
@@ -2666,7 +2666,7 @@ static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2666 __set_monitor_timer(chan); 2666 __set_monitor_timer(chan);
2667 chan->retry_count++; 2667 chan->retry_count++;
2668 } else { 2668 } else {
2669 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED); 2669 l2cap_send_disconn_req(chan, ECONNABORTED);
2670 } 2670 }
2671 break; 2671 break;
2672 default: 2672 default:
@@ -3106,18 +3106,17 @@ done:
3106 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 3106 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3107 l2cap_add_opt_efs(&ptr, chan); 3107 l2cap_add_opt_efs(&ptr, chan);
3108 3108
3109 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
3110 break;
3111
3112 if (chan->fcs == L2CAP_FCS_NONE ||
3113 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
3114 chan->fcs = L2CAP_FCS_NONE;
3115 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
3116 }
3117
3118 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) 3109 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3119 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2, 3110 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3120 chan->tx_win); 3111 chan->tx_win);
3112
3113 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3114 if (chan->fcs == L2CAP_FCS_NONE ||
3115 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3116 chan->fcs = L2CAP_FCS_NONE;
3117 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3118 chan->fcs);
3119 }
3121 break; 3120 break;
3122 3121
3123 case L2CAP_MODE_STREAMING: 3122 case L2CAP_MODE_STREAMING:
@@ -3139,14 +3138,13 @@ done:
3139 if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) 3138 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3140 l2cap_add_opt_efs(&ptr, chan); 3139 l2cap_add_opt_efs(&ptr, chan);
3141 3140
3142 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS)) 3141 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3143 break; 3142 if (chan->fcs == L2CAP_FCS_NONE ||
3144 3143 test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3145 if (chan->fcs == L2CAP_FCS_NONE || 3144 chan->fcs = L2CAP_FCS_NONE;
3146 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) { 3145 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3147 chan->fcs = L2CAP_FCS_NONE; 3146 chan->fcs);
3148 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs); 3147 }
3149 }
3150 break; 3148 break;
3151 } 3149 }
3152 3150
@@ -3198,7 +3196,7 @@ static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
3198 3196
3199 case L2CAP_CONF_FCS: 3197 case L2CAP_CONF_FCS:
3200 if (val == L2CAP_FCS_NONE) 3198 if (val == L2CAP_FCS_NONE)
3201 set_bit(CONF_NO_FCS_RECV, &chan->conf_state); 3199 set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3202 break; 3200 break;
3203 3201
3204 case L2CAP_CONF_EFS: 3202 case L2CAP_CONF_EFS:
@@ -3433,6 +3431,13 @@ static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3433 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs), 3431 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3434 (unsigned long) &efs); 3432 (unsigned long) &efs);
3435 break; 3433 break;
3434
3435 case L2CAP_CONF_FCS:
3436 if (*result == L2CAP_CONF_PENDING)
3437 if (val == L2CAP_FCS_NONE)
3438 set_bit(CONF_RECV_NO_FCS,
3439 &chan->conf_state);
3440 break;
3436 } 3441 }
3437 } 3442 }
3438 3443
@@ -3802,7 +3807,7 @@ static inline void set_default_fcs(struct l2cap_chan *chan)
3802 */ 3807 */
3803 if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING) 3808 if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
3804 chan->fcs = L2CAP_FCS_NONE; 3809 chan->fcs = L2CAP_FCS_NONE;
3805 else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) 3810 else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
3806 chan->fcs = L2CAP_FCS_CRC16; 3811 chan->fcs = L2CAP_FCS_CRC16;
3807} 3812}
3808 3813
@@ -3877,7 +3882,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
3877 /* Complete config. */ 3882 /* Complete config. */
3878 len = l2cap_parse_conf_req(chan, rsp); 3883 len = l2cap_parse_conf_req(chan, rsp);
3879 if (len < 0) { 3884 if (len < 0) {
3880 l2cap_send_disconn_req(conn, chan, ECONNRESET); 3885 l2cap_send_disconn_req(chan, ECONNRESET);
3881 goto unlock; 3886 goto unlock;
3882 } 3887 }
3883 3888
@@ -3899,7 +3904,7 @@ static inline int l2cap_config_req(struct l2cap_conn *conn,
3899 err = l2cap_ertm_init(chan); 3904 err = l2cap_ertm_init(chan);
3900 3905
3901 if (err < 0) 3906 if (err < 0)
3902 l2cap_send_disconn_req(chan->conn, chan, -err); 3907 l2cap_send_disconn_req(chan, -err);
3903 else 3908 else
3904 l2cap_chan_ready(chan); 3909 l2cap_chan_ready(chan);
3905 3910
@@ -3967,7 +3972,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
3967 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 3972 len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3968 buf, &result); 3973 buf, &result);
3969 if (len < 0) { 3974 if (len < 0) {
3970 l2cap_send_disconn_req(conn, chan, ECONNRESET); 3975 l2cap_send_disconn_req(chan, ECONNRESET);
3971 goto done; 3976 goto done;
3972 } 3977 }
3973 3978
@@ -3988,7 +3993,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
3988 char req[64]; 3993 char req[64];
3989 3994
3990 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) { 3995 if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3991 l2cap_send_disconn_req(conn, chan, ECONNRESET); 3996 l2cap_send_disconn_req(chan, ECONNRESET);
3992 goto done; 3997 goto done;
3993 } 3998 }
3994 3999
@@ -3997,7 +4002,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
3997 len = l2cap_parse_conf_rsp(chan, rsp->data, len, 4002 len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3998 req, &result); 4003 req, &result);
3999 if (len < 0) { 4004 if (len < 0) {
4000 l2cap_send_disconn_req(conn, chan, ECONNRESET); 4005 l2cap_send_disconn_req(chan, ECONNRESET);
4001 goto done; 4006 goto done;
4002 } 4007 }
4003 4008
@@ -4013,7 +4018,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4013 l2cap_chan_set_err(chan, ECONNRESET); 4018 l2cap_chan_set_err(chan, ECONNRESET);
4014 4019
4015 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT); 4020 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4016 l2cap_send_disconn_req(conn, chan, ECONNRESET); 4021 l2cap_send_disconn_req(chan, ECONNRESET);
4017 goto done; 4022 goto done;
4018 } 4023 }
4019 4024
@@ -4030,7 +4035,7 @@ static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4030 err = l2cap_ertm_init(chan); 4035 err = l2cap_ertm_init(chan);
4031 4036
4032 if (err < 0) 4037 if (err < 0)
4033 l2cap_send_disconn_req(chan->conn, chan, -err); 4038 l2cap_send_disconn_req(chan, -err);
4034 else 4039 else
4035 l2cap_chan_ready(chan); 4040 l2cap_chan_ready(chan);
4036 } 4041 }
@@ -4392,7 +4397,7 @@ static void l2cap_logical_fail(struct l2cap_chan *chan)
4392 /* Logical link setup failed */ 4397 /* Logical link setup failed */
4393 if (chan->state != BT_CONNECTED) { 4398 if (chan->state != BT_CONNECTED) {
4394 /* Create channel failure, disconnect */ 4399 /* Create channel failure, disconnect */
4395 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 4400 l2cap_send_disconn_req(chan, ECONNRESET);
4396 return; 4401 return;
4397 } 4402 }
4398 4403
@@ -4435,7 +4440,7 @@ static void l2cap_logical_finish_create(struct l2cap_chan *chan,
4435 4440
4436 err = l2cap_ertm_init(chan); 4441 err = l2cap_ertm_init(chan);
4437 if (err < 0) 4442 if (err < 0)
4438 l2cap_send_disconn_req(chan->conn, chan, -err); 4443 l2cap_send_disconn_req(chan, -err);
4439 else 4444 else
4440 l2cap_chan_ready(chan); 4445 l2cap_chan_ready(chan);
4441 } 4446 }
@@ -5400,7 +5405,7 @@ static void l2cap_handle_srej(struct l2cap_chan *chan,
5400 5405
5401 if (control->reqseq == chan->next_tx_seq) { 5406 if (control->reqseq == chan->next_tx_seq) {
5402 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); 5407 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
5403 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 5408 l2cap_send_disconn_req(chan, ECONNRESET);
5404 return; 5409 return;
5405 } 5410 }
5406 5411
@@ -5414,7 +5419,7 @@ static void l2cap_handle_srej(struct l2cap_chan *chan,
5414 5419
5415 if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) { 5420 if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) {
5416 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 5421 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
5417 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 5422 l2cap_send_disconn_req(chan, ECONNRESET);
5418 return; 5423 return;
5419 } 5424 }
5420 5425
@@ -5458,7 +5463,7 @@ static void l2cap_handle_rej(struct l2cap_chan *chan,
5458 5463
5459 if (control->reqseq == chan->next_tx_seq) { 5464 if (control->reqseq == chan->next_tx_seq) {
5460 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq); 5465 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
5461 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 5466 l2cap_send_disconn_req(chan, ECONNRESET);
5462 return; 5467 return;
5463 } 5468 }
5464 5469
@@ -5467,7 +5472,7 @@ static void l2cap_handle_rej(struct l2cap_chan *chan,
5467 if (chan->max_tx && skb && 5472 if (chan->max_tx && skb &&
5468 bt_cb(skb)->control.retries >= chan->max_tx) { 5473 bt_cb(skb)->control.retries >= chan->max_tx) {
5469 BT_DBG("Retry limit exceeded (%d)", chan->max_tx); 5474 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
5470 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 5475 l2cap_send_disconn_req(chan, ECONNRESET);
5471 return; 5476 return;
5472 } 5477 }
5473 5478
@@ -5651,8 +5656,7 @@ static int l2cap_rx_state_recv(struct l2cap_chan *chan,
5651 break; 5656 break;
5652 case L2CAP_TXSEQ_INVALID: 5657 case L2CAP_TXSEQ_INVALID:
5653 default: 5658 default:
5654 l2cap_send_disconn_req(chan->conn, chan, 5659 l2cap_send_disconn_req(chan, ECONNRESET);
5655 ECONNRESET);
5656 break; 5660 break;
5657 } 5661 }
5658 break; 5662 break;
@@ -5785,8 +5789,7 @@ static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
5785 break; 5789 break;
5786 case L2CAP_TXSEQ_INVALID: 5790 case L2CAP_TXSEQ_INVALID:
5787 default: 5791 default:
5788 l2cap_send_disconn_req(chan->conn, chan, 5792 l2cap_send_disconn_req(chan, ECONNRESET);
5789 ECONNRESET);
5790 break; 5793 break;
5791 } 5794 }
5792 break; 5795 break;
@@ -5981,7 +5984,7 @@ static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
5981 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d", 5984 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
5982 control->reqseq, chan->next_tx_seq, 5985 control->reqseq, chan->next_tx_seq,
5983 chan->expected_ack_seq); 5986 chan->expected_ack_seq);
5984 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 5987 l2cap_send_disconn_req(chan, ECONNRESET);
5985 } 5988 }
5986 5989
5987 return err; 5990 return err;
@@ -6050,7 +6053,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6050 len -= L2CAP_FCS_SIZE; 6053 len -= L2CAP_FCS_SIZE;
6051 6054
6052 if (len > chan->mps) { 6055 if (len > chan->mps) {
6053 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 6056 l2cap_send_disconn_req(chan, ECONNRESET);
6054 goto drop; 6057 goto drop;
6055 } 6058 }
6056 6059
@@ -6075,8 +6078,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6075 } 6078 }
6076 6079
6077 if (err) 6080 if (err)
6078 l2cap_send_disconn_req(chan->conn, chan, 6081 l2cap_send_disconn_req(chan, ECONNRESET);
6079 ECONNRESET);
6080 } else { 6082 } else {
6081 const u8 rx_func_to_event[4] = { 6083 const u8 rx_func_to_event[4] = {
6082 L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ, 6084 L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
@@ -6093,7 +6095,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6093 6095
6094 if (len != 0) { 6096 if (len != 0) {
6095 BT_ERR("Trailing bytes: %d in sframe", len); 6097 BT_ERR("Trailing bytes: %d in sframe", len);
6096 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 6098 l2cap_send_disconn_req(chan, ECONNRESET);
6097 goto drop; 6099 goto drop;
6098 } 6100 }
6099 6101
@@ -6104,7 +6106,7 @@ static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6104 6106
6105 event = rx_func_to_event[control->super]; 6107 event = rx_func_to_event[control->super];
6106 if (l2cap_rx(chan, control, skb, event)) 6108 if (l2cap_rx(chan, control, skb, event))
6107 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET); 6109 l2cap_send_disconn_req(chan, ECONNRESET);
6108 } 6110 }
6109 6111
6110 return 0; 6112 return 0;
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 142764aec2af..f559b966279c 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -1226,7 +1226,7 @@ static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1226 } 1226 }
1227 1227
1228 val = !!cp->val; 1228 val = !!cp->val;
1229 enabled = !!lmp_host_le_capable(hdev); 1229 enabled = lmp_host_le_capable(hdev);
1230 1230
1231 if (!hdev_is_powered(hdev) || val == enabled) { 1231 if (!hdev_is_powered(hdev) || val == enabled) {
1232 bool changed = false; 1232 bool changed = false;
@@ -1262,7 +1262,7 @@ static int set_le(struct sock *sk, struct hci_dev *hdev, void *data, u16 len)
1262 1262
1263 if (val) { 1263 if (val) {
1264 hci_cp.le = val; 1264 hci_cp.le = val;
1265 hci_cp.simul = !!lmp_le_br_capable(hdev); 1265 hci_cp.simul = lmp_le_br_capable(hdev);
1266 } 1266 }
1267 1267
1268 err = hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp), 1268 err = hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(hci_cp),
@@ -2926,13 +2926,13 @@ int mgmt_powered(struct hci_dev *hdev, u8 powered)
2926 struct hci_cp_write_le_host_supported cp; 2926 struct hci_cp_write_le_host_supported cp;
2927 2927
2928 cp.le = 1; 2928 cp.le = 1;
2929 cp.simul = !!lmp_le_br_capable(hdev); 2929 cp.simul = lmp_le_br_capable(hdev);
2930 2930
2931 /* Check first if we already have the right 2931 /* Check first if we already have the right
2932 * host state (host features set) 2932 * host state (host features set)
2933 */ 2933 */
2934 if (cp.le != !!lmp_host_le_capable(hdev) || 2934 if (cp.le != lmp_host_le_capable(hdev) ||
2935 cp.simul != !!lmp_host_le_br_capable(hdev)) 2935 cp.simul != lmp_host_le_br_capable(hdev))
2936 hci_send_cmd(hdev, 2936 hci_send_cmd(hdev,
2937 HCI_OP_WRITE_LE_HOST_SUPPORTED, 2937 HCI_OP_WRITE_LE_HOST_SUPPORTED,
2938 sizeof(cp), &cp); 2938 sizeof(cp), &cp);
diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c
index 4ddef57d03a7..ce3f6658f4b2 100644
--- a/net/bluetooth/rfcomm/sock.c
+++ b/net/bluetooth/rfcomm/sock.c
@@ -467,7 +467,7 @@ static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int f
467 long timeo; 467 long timeo;
468 int err = 0; 468 int err = 0;
469 469
470 lock_sock(sk); 470 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
471 471
472 if (sk->sk_type != SOCK_STREAM) { 472 if (sk->sk_type != SOCK_STREAM) {
473 err = -EINVAL; 473 err = -EINVAL;
@@ -504,7 +504,7 @@ static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int f
504 504
505 release_sock(sk); 505 release_sock(sk);
506 timeo = schedule_timeout(timeo); 506 timeo = schedule_timeout(timeo);
507 lock_sock(sk); 507 lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
508 } 508 }
509 __set_current_state(TASK_RUNNING); 509 __set_current_state(TASK_RUNNING);
510 remove_wait_queue(sk_sleep(sk), &wait); 510 remove_wait_queue(sk_sleep(sk), &wait);
diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index 450cdcd88e5c..531a93d613d4 100644
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -131,15 +131,6 @@ static int sco_conn_del(struct hci_conn *hcon, int err)
131 sco_sock_clear_timer(sk); 131 sco_sock_clear_timer(sk);
132 sco_chan_del(sk, err); 132 sco_chan_del(sk, err);
133 bh_unlock_sock(sk); 133 bh_unlock_sock(sk);
134
135 sco_conn_lock(conn);
136 conn->sk = NULL;
137 sco_pi(sk)->conn = NULL;
138 sco_conn_unlock(conn);
139
140 if (conn->hcon)
141 hci_conn_put(conn->hcon);
142
143 sco_sock_kill(sk); 134 sco_sock_kill(sk);
144 } 135 }
145 136
@@ -397,6 +388,7 @@ static void sco_sock_init(struct sock *sk, struct sock *parent)
397 388
398 if (parent) { 389 if (parent) {
399 sk->sk_type = parent->sk_type; 390 sk->sk_type = parent->sk_type;
391 bt_sk(sk)->flags = bt_sk(parent)->flags;
400 security_sk_clone(parent, sk); 392 security_sk_clone(parent, sk);
401 } 393 }
402} 394}
@@ -662,16 +654,57 @@ static int sco_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
662 return err; 654 return err;
663} 655}
664 656
657static int sco_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
658 struct msghdr *msg, size_t len, int flags)
659{
660 struct sock *sk = sock->sk;
661 struct sco_pinfo *pi = sco_pi(sk);
662
663 lock_sock(sk);
664
665 if (sk->sk_state == BT_CONNECT2 &&
666 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
667 hci_conn_accept(pi->conn->hcon, 0);
668 sk->sk_state = BT_CONFIG;
669
670 release_sock(sk);
671 return 0;
672 }
673
674 release_sock(sk);
675
676 return bt_sock_recvmsg(iocb, sock, msg, len, flags);
677}
678
665static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) 679static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen)
666{ 680{
667 struct sock *sk = sock->sk; 681 struct sock *sk = sock->sk;
668 int err = 0; 682 int err = 0;
683 u32 opt;
669 684
670 BT_DBG("sk %p", sk); 685 BT_DBG("sk %p", sk);
671 686
672 lock_sock(sk); 687 lock_sock(sk);
673 688
674 switch (optname) { 689 switch (optname) {
690
691 case BT_DEFER_SETUP:
692 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
693 err = -EINVAL;
694 break;
695 }
696
697 if (get_user(opt, (u32 __user *) optval)) {
698 err = -EFAULT;
699 break;
700 }
701
702 if (opt)
703 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
704 else
705 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
706 break;
707
675 default: 708 default:
676 err = -ENOPROTOOPT; 709 err = -ENOPROTOOPT;
677 break; 710 break;
@@ -753,6 +786,19 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char
753 lock_sock(sk); 786 lock_sock(sk);
754 787
755 switch (optname) { 788 switch (optname) {
789
790 case BT_DEFER_SETUP:
791 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
792 err = -EINVAL;
793 break;
794 }
795
796 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
797 (u32 __user *) optval))
798 err = -EFAULT;
799
800 break;
801
756 default: 802 default:
757 err = -ENOPROTOOPT; 803 err = -ENOPROTOOPT;
758 break; 804 break;
@@ -830,6 +876,16 @@ static void sco_chan_del(struct sock *sk, int err)
830 876
831 BT_DBG("sk %p, conn %p, err %d", sk, conn, err); 877 BT_DBG("sk %p, conn %p, err %d", sk, conn, err);
832 878
879 if (conn) {
880 sco_conn_lock(conn);
881 conn->sk = NULL;
882 sco_pi(sk)->conn = NULL;
883 sco_conn_unlock(conn);
884
885 if (conn->hcon)
886 hci_conn_put(conn->hcon);
887 }
888
833 sk->sk_state = BT_CLOSED; 889 sk->sk_state = BT_CLOSED;
834 sk->sk_err = err; 890 sk->sk_err = err;
835 sk->sk_state_change(sk); 891 sk->sk_state_change(sk);
@@ -874,7 +930,10 @@ static void sco_conn_ready(struct sco_conn *conn)
874 hci_conn_hold(conn->hcon); 930 hci_conn_hold(conn->hcon);
875 __sco_chan_add(conn, sk, parent); 931 __sco_chan_add(conn, sk, parent);
876 932
877 sk->sk_state = BT_CONNECTED; 933 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(parent)->flags))
934 sk->sk_state = BT_CONNECT2;
935 else
936 sk->sk_state = BT_CONNECTED;
878 937
879 /* Wake up parent */ 938 /* Wake up parent */
880 parent->sk_data_ready(parent, 1); 939 parent->sk_data_ready(parent, 1);
@@ -887,7 +946,7 @@ done:
887} 946}
888 947
889/* ----- SCO interface with lower layer (HCI) ----- */ 948/* ----- SCO interface with lower layer (HCI) ----- */
890int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr) 949int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags)
891{ 950{
892 struct sock *sk; 951 struct sock *sk;
893 struct hlist_node *node; 952 struct hlist_node *node;
@@ -904,6 +963,9 @@ int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
904 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) || 963 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
905 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) { 964 !bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
906 lm |= HCI_LM_ACCEPT; 965 lm |= HCI_LM_ACCEPT;
966
967 if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
968 *flags |= HCI_PROTO_DEFER;
907 break; 969 break;
908 } 970 }
909 } 971 }
@@ -992,7 +1054,7 @@ static const struct proto_ops sco_sock_ops = {
992 .accept = sco_sock_accept, 1054 .accept = sco_sock_accept,
993 .getname = sco_sock_getname, 1055 .getname = sco_sock_getname,
994 .sendmsg = sco_sock_sendmsg, 1056 .sendmsg = sco_sock_sendmsg,
995 .recvmsg = bt_sock_recvmsg, 1057 .recvmsg = sco_sock_recvmsg,
996 .poll = bt_sock_poll, 1058 .poll = bt_sock_poll,
997 .ioctl = bt_sock_ioctl, 1059 .ioctl = bt_sock_ioctl,
998 .mmap = sock_no_mmap, 1060 .mmap = sock_no_mmap,