|
@@ -1244,6 +1244,13 @@ static void l2cap_move_done(struct l2cap_chan *chan)
|
|
|
|
|
|
static void l2cap_chan_ready(struct l2cap_chan *chan)
|
|
|
{
|
|
|
+ /* The channel may have already been flagged as connected in
|
|
|
+ * case of receiving data before the L2CAP info req/rsp
|
|
|
+ * procedure is complete.
|
|
|
+ */
|
|
|
+ if (chan->state == BT_CONNECTED)
|
|
|
+ return;
|
|
|
+
|
|
|
/* This clears all conf flags, including CONF_NOT_COMPLETE */
|
|
|
chan->conf_state = 0;
|
|
|
__clear_chan_timer(chan);
|
|
@@ -6785,6 +6792,13 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
|
|
|
|
|
|
BT_DBG("chan %p, len %d", chan, skb->len);
|
|
|
|
|
|
+ /* If we receive data on a fixed channel before the info req/rsp
|
|
|
+ * procdure is done simply assume that the channel is supported
|
|
|
+ * and mark it as ready.
|
|
|
+ */
|
|
|
+ if (chan->chan_type == L2CAP_CHAN_FIXED)
|
|
|
+ l2cap_chan_ready(chan);
|
|
|
+
|
|
|
if (chan->state != BT_CONNECTED)
|
|
|
goto drop;
|
|
|
|