diff options
Diffstat (limited to 'net/bluetooth/l2cap_core.c')
| -rw-r--r-- | net/bluetooth/l2cap_core.c | 13 | 
1 files changed, 7 insertions, 6 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index daa149b7003..38c00f14220 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -1008,7 +1008,7 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c  	if (!conn)  		return; -	if (chan->mode == L2CAP_MODE_ERTM) { +	if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {  		__clear_retrans_timer(chan);  		__clear_monitor_timer(chan);  		__clear_ack_timer(chan); @@ -1199,14 +1199,15 @@ clean:  static void l2cap_conn_ready(struct l2cap_conn *conn)  {  	struct l2cap_chan *chan; +	struct hci_conn *hcon = conn->hcon;  	BT_DBG("conn %p", conn); -	if (!conn->hcon->out && conn->hcon->type == LE_LINK) +	if (!hcon->out && hcon->type == LE_LINK)  		l2cap_le_conn_ready(conn); -	if (conn->hcon->out && conn->hcon->type == LE_LINK) -		smp_conn_security(conn, conn->hcon->pending_sec_level); +	if (hcon->out && hcon->type == LE_LINK) +		smp_conn_security(hcon, hcon->pending_sec_level);  	mutex_lock(&conn->chan_lock); @@ -1219,8 +1220,8 @@ static void l2cap_conn_ready(struct l2cap_conn *conn)  			continue;  		} -		if (conn->hcon->type == LE_LINK) { -			if (smp_conn_security(conn, chan->sec_level)) +		if (hcon->type == LE_LINK) { +			if (smp_conn_security(hcon, chan->sec_level))  				l2cap_chan_ready(chan);  		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {  |