Bluetooth: Fix L2CAP channel closing for LE connections
authorJohan Hedberg <johan.hedberg@intel.com>
Tue, 14 May 2013 19:46:01 +0000 (22:46 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 5 Dec 2013 15:05:33 +0000 (07:05 -0800)
Sending of the L2CAP Disconnect request should also be performed for LE
based channels. The proper thing to do is therefore to look at whether
there's a PSM specified for the channel instead of looking at the link
type.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/l2cap_core.c

index d6f518d7e61b1ed3655db1f5259c681c9ef2e42b..744afae619314c57913fdb09bfff35cc2ff20353 100644 (file)
@@ -674,8 +674,10 @@ void l2cap_chan_close(struct l2cap_chan *chan, int reason)
 
        case BT_CONNECTED:
        case BT_CONFIG:
-               if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
-                   conn->hcon->type == ACL_LINK) {
+               /* ATT uses L2CAP_CHAN_CONN_ORIENTED so we must also
+                * check for chan->psm.
+                */
+               if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && chan->psm) {
                        __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
                        l2cap_send_disconn_req(chan, reason);
                } else