ASoC: topology: Log control load errors in soc_tplg_control_load()
[platform/kernel/linux-starfive.git] / net / bluetooth / l2cap_core.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
4    Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5    Copyright (C) 2010 Google Inc.
6    Copyright (C) 2011 ProFUSION Embedded Systems
7    Copyright (c) 2012 Code Aurora Forum.  All rights reserved.
8
9    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
10
11    This program is free software; you can redistribute it and/or modify
12    it under the terms of the GNU General Public License version 2 as
13    published by the Free Software Foundation;
14
15    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
18    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
19    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
20    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
21    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
22    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
23
24    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
25    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
26    SOFTWARE IS DISCLAIMED.
27 */
28
29 /* Bluetooth L2CAP core. */
30
31 #include <linux/module.h>
32
33 #include <linux/debugfs.h>
34 #include <linux/crc16.h>
35 #include <linux/filter.h>
36
37 #include <net/bluetooth/bluetooth.h>
38 #include <net/bluetooth/hci_core.h>
39 #include <net/bluetooth/l2cap.h>
40
41 #include "smp.h"
42 #include "a2mp.h"
43 #include "amp.h"
44
45 #define LE_FLOWCTL_MAX_CREDITS 65535
46
47 bool disable_ertm;
48 bool enable_ecred = IS_ENABLED(CONFIG_BT_LE_L2CAP_ECRED);
49
50 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN | L2CAP_FEAT_UCD;
51
52 static LIST_HEAD(chan_list);
53 static DEFINE_RWLOCK(chan_list_lock);
54
55 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
56                                        u8 code, u8 ident, u16 dlen, void *data);
57 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
58                            void *data);
59 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size);
60 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
61
62 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
63                      struct sk_buff_head *skbs, u8 event);
64 static void l2cap_retrans_timeout(struct work_struct *work);
65 static void l2cap_monitor_timeout(struct work_struct *work);
66 static void l2cap_ack_timeout(struct work_struct *work);
67
68 static inline u8 bdaddr_type(u8 link_type, u8 bdaddr_type)
69 {
70         if (link_type == LE_LINK) {
71                 if (bdaddr_type == ADDR_LE_DEV_PUBLIC)
72                         return BDADDR_LE_PUBLIC;
73                 else
74                         return BDADDR_LE_RANDOM;
75         }
76
77         return BDADDR_BREDR;
78 }
79
80 static inline u8 bdaddr_src_type(struct hci_conn *hcon)
81 {
82         return bdaddr_type(hcon->type, hcon->src_type);
83 }
84
85 static inline u8 bdaddr_dst_type(struct hci_conn *hcon)
86 {
87         return bdaddr_type(hcon->type, hcon->dst_type);
88 }
89
90 /* ---- L2CAP channels ---- */
91
92 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
93                                                    u16 cid)
94 {
95         struct l2cap_chan *c;
96
97         list_for_each_entry(c, &conn->chan_l, list) {
98                 if (c->dcid == cid)
99                         return c;
100         }
101         return NULL;
102 }
103
104 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
105                                                    u16 cid)
106 {
107         struct l2cap_chan *c;
108
109         list_for_each_entry(c, &conn->chan_l, list) {
110                 if (c->scid == cid)
111                         return c;
112         }
113         return NULL;
114 }
115
116 /* Find channel with given SCID.
117  * Returns a reference locked channel.
118  */
119 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
120                                                  u16 cid)
121 {
122         struct l2cap_chan *c;
123
124         mutex_lock(&conn->chan_lock);
125         c = __l2cap_get_chan_by_scid(conn, cid);
126         if (c) {
127                 /* Only lock if chan reference is not 0 */
128                 c = l2cap_chan_hold_unless_zero(c);
129                 if (c)
130                         l2cap_chan_lock(c);
131         }
132         mutex_unlock(&conn->chan_lock);
133
134         return c;
135 }
136
137 /* Find channel with given DCID.
138  * Returns a reference locked channel.
139  */
140 static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
141                                                  u16 cid)
142 {
143         struct l2cap_chan *c;
144
145         mutex_lock(&conn->chan_lock);
146         c = __l2cap_get_chan_by_dcid(conn, cid);
147         if (c) {
148                 /* Only lock if chan reference is not 0 */
149                 c = l2cap_chan_hold_unless_zero(c);
150                 if (c)
151                         l2cap_chan_lock(c);
152         }
153         mutex_unlock(&conn->chan_lock);
154
155         return c;
156 }
157
158 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn,
159                                                     u8 ident)
160 {
161         struct l2cap_chan *c;
162
163         list_for_each_entry(c, &conn->chan_l, list) {
164                 if (c->ident == ident)
165                         return c;
166         }
167         return NULL;
168 }
169
170 static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
171                                                   u8 ident)
172 {
173         struct l2cap_chan *c;
174
175         mutex_lock(&conn->chan_lock);
176         c = __l2cap_get_chan_by_ident(conn, ident);
177         if (c) {
178                 /* Only lock if chan reference is not 0 */
179                 c = l2cap_chan_hold_unless_zero(c);
180                 if (c)
181                         l2cap_chan_lock(c);
182         }
183         mutex_unlock(&conn->chan_lock);
184
185         return c;
186 }
187
188 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src,
189                                                       u8 src_type)
190 {
191         struct l2cap_chan *c;
192
193         list_for_each_entry(c, &chan_list, global_l) {
194                 if (src_type == BDADDR_BREDR && c->src_type != BDADDR_BREDR)
195                         continue;
196
197                 if (src_type != BDADDR_BREDR && c->src_type == BDADDR_BREDR)
198                         continue;
199
200                 if (c->sport == psm && !bacmp(&c->src, src))
201                         return c;
202         }
203         return NULL;
204 }
205
206 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
207 {
208         int err;
209
210         write_lock(&chan_list_lock);
211
212         if (psm && __l2cap_global_chan_by_addr(psm, src, chan->src_type)) {
213                 err = -EADDRINUSE;
214                 goto done;
215         }
216
217         if (psm) {
218                 chan->psm = psm;
219                 chan->sport = psm;
220                 err = 0;
221         } else {
222                 u16 p, start, end, incr;
223
224                 if (chan->src_type == BDADDR_BREDR) {
225                         start = L2CAP_PSM_DYN_START;
226                         end = L2CAP_PSM_AUTO_END;
227                         incr = 2;
228                 } else {
229                         start = L2CAP_PSM_LE_DYN_START;
230                         end = L2CAP_PSM_LE_DYN_END;
231                         incr = 1;
232                 }
233
234                 err = -EINVAL;
235                 for (p = start; p <= end; p += incr)
236                         if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src,
237                                                          chan->src_type)) {
238                                 chan->psm   = cpu_to_le16(p);
239                                 chan->sport = cpu_to_le16(p);
240                                 err = 0;
241                                 break;
242                         }
243         }
244
245 done:
246         write_unlock(&chan_list_lock);
247         return err;
248 }
249 EXPORT_SYMBOL_GPL(l2cap_add_psm);
250
251 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
252 {
253         write_lock(&chan_list_lock);
254
255         /* Override the defaults (which are for conn-oriented) */
256         chan->omtu = L2CAP_DEFAULT_MTU;
257         chan->chan_type = L2CAP_CHAN_FIXED;
258
259         chan->scid = scid;
260
261         write_unlock(&chan_list_lock);
262
263         return 0;
264 }
265
266 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
267 {
268         u16 cid, dyn_end;
269
270         if (conn->hcon->type == LE_LINK)
271                 dyn_end = L2CAP_CID_LE_DYN_END;
272         else
273                 dyn_end = L2CAP_CID_DYN_END;
274
275         for (cid = L2CAP_CID_DYN_START; cid <= dyn_end; cid++) {
276                 if (!__l2cap_get_chan_by_scid(conn, cid))
277                         return cid;
278         }
279
280         return 0;
281 }
282
283 static void l2cap_state_change(struct l2cap_chan *chan, int state)
284 {
285         BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
286                state_to_string(state));
287
288         chan->state = state;
289         chan->ops->state_change(chan, state, 0);
290 }
291
292 static inline void l2cap_state_change_and_error(struct l2cap_chan *chan,
293                                                 int state, int err)
294 {
295         chan->state = state;
296         chan->ops->state_change(chan, chan->state, err);
297 }
298
299 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
300 {
301         chan->ops->state_change(chan, chan->state, err);
302 }
303
304 static void __set_retrans_timer(struct l2cap_chan *chan)
305 {
306         if (!delayed_work_pending(&chan->monitor_timer) &&
307             chan->retrans_timeout) {
308                 l2cap_set_timer(chan, &chan->retrans_timer,
309                                 msecs_to_jiffies(chan->retrans_timeout));
310         }
311 }
312
313 static void __set_monitor_timer(struct l2cap_chan *chan)
314 {
315         __clear_retrans_timer(chan);
316         if (chan->monitor_timeout) {
317                 l2cap_set_timer(chan, &chan->monitor_timer,
318                                 msecs_to_jiffies(chan->monitor_timeout));
319         }
320 }
321
322 static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
323                                                u16 seq)
324 {
325         struct sk_buff *skb;
326
327         skb_queue_walk(head, skb) {
328                 if (bt_cb(skb)->l2cap.txseq == seq)
329                         return skb;
330         }
331
332         return NULL;
333 }
334
335 /* ---- L2CAP sequence number lists ---- */
336
337 /* For ERTM, ordered lists of sequence numbers must be tracked for
338  * SREJ requests that are received and for frames that are to be
339  * retransmitted. These seq_list functions implement a singly-linked
340  * list in an array, where membership in the list can also be checked
341  * in constant time. Items can also be added to the tail of the list
342  * and removed from the head in constant time, without further memory
343  * allocs or frees.
344  */
345
346 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
347 {
348         size_t alloc_size, i;
349
350         /* Allocated size is a power of 2 to map sequence numbers
351          * (which may be up to 14 bits) in to a smaller array that is
352          * sized for the negotiated ERTM transmit windows.
353          */
354         alloc_size = roundup_pow_of_two(size);
355
356         seq_list->list = kmalloc_array(alloc_size, sizeof(u16), GFP_KERNEL);
357         if (!seq_list->list)
358                 return -ENOMEM;
359
360         seq_list->mask = alloc_size - 1;
361         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
362         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
363         for (i = 0; i < alloc_size; i++)
364                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
365
366         return 0;
367 }
368
369 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
370 {
371         kfree(seq_list->list);
372 }
373
374 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
375                                            u16 seq)
376 {
377         /* Constant-time check for list membership */
378         return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
379 }
380
381 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
382 {
383         u16 seq = seq_list->head;
384         u16 mask = seq_list->mask;
385
386         seq_list->head = seq_list->list[seq & mask];
387         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
388
389         if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
390                 seq_list->head = L2CAP_SEQ_LIST_CLEAR;
391                 seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
392         }
393
394         return seq;
395 }
396
397 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
398 {
399         u16 i;
400
401         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
402                 return;
403
404         for (i = 0; i <= seq_list->mask; i++)
405                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
406
407         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
408         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
409 }
410
411 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
412 {
413         u16 mask = seq_list->mask;
414
415         /* All appends happen in constant time */
416
417         if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
418                 return;
419
420         if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
421                 seq_list->head = seq;
422         else
423                 seq_list->list[seq_list->tail & mask] = seq;
424
425         seq_list->tail = seq;
426         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
427 }
428
429 static void l2cap_chan_timeout(struct work_struct *work)
430 {
431         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
432                                                chan_timer.work);
433         struct l2cap_conn *conn = chan->conn;
434         int reason;
435
436         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
437
438         mutex_lock(&conn->chan_lock);
439         /* __set_chan_timer() calls l2cap_chan_hold(chan) while scheduling
440          * this work. No need to call l2cap_chan_hold(chan) here again.
441          */
442         l2cap_chan_lock(chan);
443
444         if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
445                 reason = ECONNREFUSED;
446         else if (chan->state == BT_CONNECT &&
447                  chan->sec_level != BT_SECURITY_SDP)
448                 reason = ECONNREFUSED;
449         else
450                 reason = ETIMEDOUT;
451
452         l2cap_chan_close(chan, reason);
453
454         chan->ops->close(chan);
455
456         l2cap_chan_unlock(chan);
457         l2cap_chan_put(chan);
458
459         mutex_unlock(&conn->chan_lock);
460 }
461
462 struct l2cap_chan *l2cap_chan_create(void)
463 {
464         struct l2cap_chan *chan;
465
466         chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
467         if (!chan)
468                 return NULL;
469
470         skb_queue_head_init(&chan->tx_q);
471         skb_queue_head_init(&chan->srej_q);
472         mutex_init(&chan->lock);
473
474         /* Set default lock nesting level */
475         atomic_set(&chan->nesting, L2CAP_NESTING_NORMAL);
476
477         write_lock(&chan_list_lock);
478         list_add(&chan->global_l, &chan_list);
479         write_unlock(&chan_list_lock);
480
481         INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
482         INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
483         INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
484         INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
485
486         chan->state = BT_OPEN;
487
488         kref_init(&chan->kref);
489
490         /* This flag is cleared in l2cap_chan_ready() */
491         set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
492
493         BT_DBG("chan %p", chan);
494
495         return chan;
496 }
497 EXPORT_SYMBOL_GPL(l2cap_chan_create);
498
499 static void l2cap_chan_destroy(struct kref *kref)
500 {
501         struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
502
503         BT_DBG("chan %p", chan);
504
505         write_lock(&chan_list_lock);
506         list_del(&chan->global_l);
507         write_unlock(&chan_list_lock);
508
509         kfree(chan);
510 }
511
512 void l2cap_chan_hold(struct l2cap_chan *c)
513 {
514         BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
515
516         kref_get(&c->kref);
517 }
518
519 struct l2cap_chan *l2cap_chan_hold_unless_zero(struct l2cap_chan *c)
520 {
521         BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
522
523         if (!kref_get_unless_zero(&c->kref))
524                 return NULL;
525
526         return c;
527 }
528
529 void l2cap_chan_put(struct l2cap_chan *c)
530 {
531         BT_DBG("chan %p orig refcnt %u", c, kref_read(&c->kref));
532
533         kref_put(&c->kref, l2cap_chan_destroy);
534 }
535 EXPORT_SYMBOL_GPL(l2cap_chan_put);
536
537 void l2cap_chan_set_defaults(struct l2cap_chan *chan)
538 {
539         chan->fcs  = L2CAP_FCS_CRC16;
540         chan->max_tx = L2CAP_DEFAULT_MAX_TX;
541         chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
542         chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
543         chan->remote_max_tx = chan->max_tx;
544         chan->remote_tx_win = chan->tx_win;
545         chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
546         chan->sec_level = BT_SECURITY_LOW;
547         chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
548         chan->retrans_timeout = L2CAP_DEFAULT_RETRANS_TO;
549         chan->monitor_timeout = L2CAP_DEFAULT_MONITOR_TO;
550
551         chan->conf_state = 0;
552         set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
553
554         set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
555 }
556 EXPORT_SYMBOL_GPL(l2cap_chan_set_defaults);
557
558 static void l2cap_le_flowctl_init(struct l2cap_chan *chan, u16 tx_credits)
559 {
560         chan->sdu = NULL;
561         chan->sdu_last_frag = NULL;
562         chan->sdu_len = 0;
563         chan->tx_credits = tx_credits;
564         /* Derive MPS from connection MTU to stop HCI fragmentation */
565         chan->mps = min_t(u16, chan->imtu, chan->conn->mtu - L2CAP_HDR_SIZE);
566         /* Give enough credits for a full packet */
567         chan->rx_credits = (chan->imtu / chan->mps) + 1;
568
569         skb_queue_head_init(&chan->tx_q);
570 }
571
572 static void l2cap_ecred_init(struct l2cap_chan *chan, u16 tx_credits)
573 {
574         l2cap_le_flowctl_init(chan, tx_credits);
575
576         /* L2CAP implementations shall support a minimum MPS of 64 octets */
577         if (chan->mps < L2CAP_ECRED_MIN_MPS) {
578                 chan->mps = L2CAP_ECRED_MIN_MPS;
579                 chan->rx_credits = (chan->imtu / chan->mps) + 1;
580         }
581 }
582
583 void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
584 {
585         BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
586                __le16_to_cpu(chan->psm), chan->dcid);
587
588         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
589
590         chan->conn = conn;
591
592         switch (chan->chan_type) {
593         case L2CAP_CHAN_CONN_ORIENTED:
594                 /* Alloc CID for connection-oriented socket */
595                 chan->scid = l2cap_alloc_cid(conn);
596                 if (conn->hcon->type == ACL_LINK)
597                         chan->omtu = L2CAP_DEFAULT_MTU;
598                 break;
599
600         case L2CAP_CHAN_CONN_LESS:
601                 /* Connectionless socket */
602                 chan->scid = L2CAP_CID_CONN_LESS;
603                 chan->dcid = L2CAP_CID_CONN_LESS;
604                 chan->omtu = L2CAP_DEFAULT_MTU;
605                 break;
606
607         case L2CAP_CHAN_FIXED:
608                 /* Caller will set CID and CID specific MTU values */
609                 break;
610
611         default:
612                 /* Raw socket can send/recv signalling messages only */
613                 chan->scid = L2CAP_CID_SIGNALING;
614                 chan->dcid = L2CAP_CID_SIGNALING;
615                 chan->omtu = L2CAP_DEFAULT_MTU;
616         }
617
618         chan->local_id          = L2CAP_BESTEFFORT_ID;
619         chan->local_stype       = L2CAP_SERV_BESTEFFORT;
620         chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
621         chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
622         chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
623         chan->local_flush_to    = L2CAP_EFS_DEFAULT_FLUSH_TO;
624
625         l2cap_chan_hold(chan);
626
627         /* Only keep a reference for fixed channels if they requested it */
628         if (chan->chan_type != L2CAP_CHAN_FIXED ||
629             test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
630                 hci_conn_hold(conn->hcon);
631
632         list_add(&chan->list, &conn->chan_l);
633 }
634
635 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
636 {
637         mutex_lock(&conn->chan_lock);
638         __l2cap_chan_add(conn, chan);
639         mutex_unlock(&conn->chan_lock);
640 }
641
642 void l2cap_chan_del(struct l2cap_chan *chan, int err)
643 {
644         struct l2cap_conn *conn = chan->conn;
645
646         __clear_chan_timer(chan);
647
648         BT_DBG("chan %p, conn %p, err %d, state %s", chan, conn, err,
649                state_to_string(chan->state));
650
651         chan->ops->teardown(chan, err);
652
653         if (conn) {
654                 struct amp_mgr *mgr = conn->hcon->amp_mgr;
655                 /* Delete from channel list */
656                 list_del(&chan->list);
657
658                 l2cap_chan_put(chan);
659
660                 chan->conn = NULL;
661
662                 /* Reference was only held for non-fixed channels or
663                  * fixed channels that explicitly requested it using the
664                  * FLAG_HOLD_HCI_CONN flag.
665                  */
666                 if (chan->chan_type != L2CAP_CHAN_FIXED ||
667                     test_bit(FLAG_HOLD_HCI_CONN, &chan->flags))
668                         hci_conn_drop(conn->hcon);
669
670                 if (mgr && mgr->bredr_chan == chan)
671                         mgr->bredr_chan = NULL;
672         }
673
674         if (chan->hs_hchan) {
675                 struct hci_chan *hs_hchan = chan->hs_hchan;
676
677                 BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan);
678                 amp_disconnect_logical_link(hs_hchan);
679         }
680
681         if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
682                 return;
683
684         switch (chan->mode) {
685         case L2CAP_MODE_BASIC:
686                 break;
687
688         case L2CAP_MODE_LE_FLOWCTL:
689         case L2CAP_MODE_EXT_FLOWCTL:
690                 skb_queue_purge(&chan->tx_q);
691                 break;
692
693         case L2CAP_MODE_ERTM:
694                 __clear_retrans_timer(chan);
695                 __clear_monitor_timer(chan);
696                 __clear_ack_timer(chan);
697
698                 skb_queue_purge(&chan->srej_q);
699
700                 l2cap_seq_list_free(&chan->srej_list);
701                 l2cap_seq_list_free(&chan->retrans_list);
702                 fallthrough;
703
704         case L2CAP_MODE_STREAMING:
705                 skb_queue_purge(&chan->tx_q);
706                 break;
707         }
708 }
709 EXPORT_SYMBOL_GPL(l2cap_chan_del);
710
711 static void __l2cap_chan_list_id(struct l2cap_conn *conn, u16 id,
712                                  l2cap_chan_func_t func, void *data)
713 {
714         struct l2cap_chan *chan, *l;
715
716         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
717                 if (chan->ident == id)
718                         func(chan, data);
719         }
720 }
721
722 static void __l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
723                               void *data)
724 {
725         struct l2cap_chan *chan;
726
727         list_for_each_entry(chan, &conn->chan_l, list) {
728                 func(chan, data);
729         }
730 }
731
732 void l2cap_chan_list(struct l2cap_conn *conn, l2cap_chan_func_t func,
733                      void *data)
734 {
735         if (!conn)
736                 return;
737
738         mutex_lock(&conn->chan_lock);
739         __l2cap_chan_list(conn, func, data);
740         mutex_unlock(&conn->chan_lock);
741 }
742
743 EXPORT_SYMBOL_GPL(l2cap_chan_list);
744
745 static void l2cap_conn_update_id_addr(struct work_struct *work)
746 {
747         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
748                                                id_addr_timer.work);
749         struct hci_conn *hcon = conn->hcon;
750         struct l2cap_chan *chan;
751
752         mutex_lock(&conn->chan_lock);
753
754         list_for_each_entry(chan, &conn->chan_l, list) {
755                 l2cap_chan_lock(chan);
756                 bacpy(&chan->dst, &hcon->dst);
757                 chan->dst_type = bdaddr_dst_type(hcon);
758                 l2cap_chan_unlock(chan);
759         }
760
761         mutex_unlock(&conn->chan_lock);
762 }
763
764 static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
765 {
766         struct l2cap_conn *conn = chan->conn;
767         struct l2cap_le_conn_rsp rsp;
768         u16 result;
769
770         if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
771                 result = L2CAP_CR_LE_AUTHORIZATION;
772         else
773                 result = L2CAP_CR_LE_BAD_PSM;
774
775         l2cap_state_change(chan, BT_DISCONN);
776
777         rsp.dcid    = cpu_to_le16(chan->scid);
778         rsp.mtu     = cpu_to_le16(chan->imtu);
779         rsp.mps     = cpu_to_le16(chan->mps);
780         rsp.credits = cpu_to_le16(chan->rx_credits);
781         rsp.result  = cpu_to_le16(result);
782
783         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
784                        &rsp);
785 }
786
787 static void l2cap_chan_ecred_connect_reject(struct l2cap_chan *chan)
788 {
789         l2cap_state_change(chan, BT_DISCONN);
790
791         __l2cap_ecred_conn_rsp_defer(chan);
792 }
793
794 static void l2cap_chan_connect_reject(struct l2cap_chan *chan)
795 {
796         struct l2cap_conn *conn = chan->conn;
797         struct l2cap_conn_rsp rsp;
798         u16 result;
799
800         if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
801                 result = L2CAP_CR_SEC_BLOCK;
802         else
803                 result = L2CAP_CR_BAD_PSM;
804
805         l2cap_state_change(chan, BT_DISCONN);
806
807         rsp.scid   = cpu_to_le16(chan->dcid);
808         rsp.dcid   = cpu_to_le16(chan->scid);
809         rsp.result = cpu_to_le16(result);
810         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
811
812         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
813 }
814
815 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
816 {
817         struct l2cap_conn *conn = chan->conn;
818
819         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
820
821         switch (chan->state) {
822         case BT_LISTEN:
823                 chan->ops->teardown(chan, 0);
824                 break;
825
826         case BT_CONNECTED:
827         case BT_CONFIG:
828                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
829                         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
830                         l2cap_send_disconn_req(chan, reason);
831                 } else
832                         l2cap_chan_del(chan, reason);
833                 break;
834
835         case BT_CONNECT2:
836                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
837                         if (conn->hcon->type == ACL_LINK)
838                                 l2cap_chan_connect_reject(chan);
839                         else if (conn->hcon->type == LE_LINK) {
840                                 switch (chan->mode) {
841                                 case L2CAP_MODE_LE_FLOWCTL:
842                                         l2cap_chan_le_connect_reject(chan);
843                                         break;
844                                 case L2CAP_MODE_EXT_FLOWCTL:
845                                         l2cap_chan_ecred_connect_reject(chan);
846                                         return;
847                                 }
848                         }
849                 }
850
851                 l2cap_chan_del(chan, reason);
852                 break;
853
854         case BT_CONNECT:
855         case BT_DISCONN:
856                 l2cap_chan_del(chan, reason);
857                 break;
858
859         default:
860                 chan->ops->teardown(chan, 0);
861                 break;
862         }
863 }
864 EXPORT_SYMBOL(l2cap_chan_close);
865
866 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
867 {
868         switch (chan->chan_type) {
869         case L2CAP_CHAN_RAW:
870                 switch (chan->sec_level) {
871                 case BT_SECURITY_HIGH:
872                 case BT_SECURITY_FIPS:
873                         return HCI_AT_DEDICATED_BONDING_MITM;
874                 case BT_SECURITY_MEDIUM:
875                         return HCI_AT_DEDICATED_BONDING;
876                 default:
877                         return HCI_AT_NO_BONDING;
878                 }
879                 break;
880         case L2CAP_CHAN_CONN_LESS:
881                 if (chan->psm == cpu_to_le16(L2CAP_PSM_3DSP)) {
882                         if (chan->sec_level == BT_SECURITY_LOW)
883                                 chan->sec_level = BT_SECURITY_SDP;
884                 }
885                 if (chan->sec_level == BT_SECURITY_HIGH ||
886                     chan->sec_level == BT_SECURITY_FIPS)
887                         return HCI_AT_NO_BONDING_MITM;
888                 else
889                         return HCI_AT_NO_BONDING;
890                 break;
891         case L2CAP_CHAN_CONN_ORIENTED:
892                 if (chan->psm == cpu_to_le16(L2CAP_PSM_SDP)) {
893                         if (chan->sec_level == BT_SECURITY_LOW)
894                                 chan->sec_level = BT_SECURITY_SDP;
895
896                         if (chan->sec_level == BT_SECURITY_HIGH ||
897                             chan->sec_level == BT_SECURITY_FIPS)
898                                 return HCI_AT_NO_BONDING_MITM;
899                         else
900                                 return HCI_AT_NO_BONDING;
901                 }
902                 fallthrough;
903
904         default:
905                 switch (chan->sec_level) {
906                 case BT_SECURITY_HIGH:
907                 case BT_SECURITY_FIPS:
908                         return HCI_AT_GENERAL_BONDING_MITM;
909                 case BT_SECURITY_MEDIUM:
910                         return HCI_AT_GENERAL_BONDING;
911                 default:
912                         return HCI_AT_NO_BONDING;
913                 }
914                 break;
915         }
916 }
917
918 /* Service level security */
919 int l2cap_chan_check_security(struct l2cap_chan *chan, bool initiator)
920 {
921         struct l2cap_conn *conn = chan->conn;
922         __u8 auth_type;
923
924         if (conn->hcon->type == LE_LINK)
925                 return smp_conn_security(conn->hcon, chan->sec_level);
926
927         auth_type = l2cap_get_auth_type(chan);
928
929         return hci_conn_security(conn->hcon, chan->sec_level, auth_type,
930                                  initiator);
931 }
932
933 static u8 l2cap_get_ident(struct l2cap_conn *conn)
934 {
935         u8 id;
936
937         /* Get next available identificator.
938          *    1 - 128 are used by kernel.
939          *  129 - 199 are reserved.
940          *  200 - 254 are used by utilities like l2ping, etc.
941          */
942
943         mutex_lock(&conn->ident_lock);
944
945         if (++conn->tx_ident > 128)
946                 conn->tx_ident = 1;
947
948         id = conn->tx_ident;
949
950         mutex_unlock(&conn->ident_lock);
951
952         return id;
953 }
954
955 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
956                            void *data)
957 {
958         struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
959         u8 flags;
960
961         BT_DBG("code 0x%2.2x", code);
962
963         if (!skb)
964                 return;
965
966         /* Use NO_FLUSH if supported or we have an LE link (which does
967          * not support auto-flushing packets) */
968         if (lmp_no_flush_capable(conn->hcon->hdev) ||
969             conn->hcon->type == LE_LINK)
970                 flags = ACL_START_NO_FLUSH;
971         else
972                 flags = ACL_START;
973
974         bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
975         skb->priority = HCI_PRIO_MAX;
976
977         hci_send_acl(conn->hchan, skb, flags);
978 }
979
980 static bool __chan_is_moving(struct l2cap_chan *chan)
981 {
982         return chan->move_state != L2CAP_MOVE_STABLE &&
983                chan->move_state != L2CAP_MOVE_WAIT_PREPARE;
984 }
985
986 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
987 {
988         struct hci_conn *hcon = chan->conn->hcon;
989         u16 flags;
990
991         BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
992                skb->priority);
993
994         if (chan->hs_hcon && !__chan_is_moving(chan)) {
995                 if (chan->hs_hchan)
996                         hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE);
997                 else
998                         kfree_skb(skb);
999
1000                 return;
1001         }
1002
1003         /* Use NO_FLUSH for LE links (where this is the only option) or
1004          * if the BR/EDR link supports it and flushing has not been
1005          * explicitly requested (through FLAG_FLUSHABLE).
1006          */
1007         if (hcon->type == LE_LINK ||
1008             (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
1009              lmp_no_flush_capable(hcon->hdev)))
1010                 flags = ACL_START_NO_FLUSH;
1011         else
1012                 flags = ACL_START;
1013
1014         bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1015         hci_send_acl(chan->conn->hchan, skb, flags);
1016 }
1017
1018 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
1019 {
1020         control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
1021         control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
1022
1023         if (enh & L2CAP_CTRL_FRAME_TYPE) {
1024                 /* S-Frame */
1025                 control->sframe = 1;
1026                 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
1027                 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
1028
1029                 control->sar = 0;
1030                 control->txseq = 0;
1031         } else {
1032                 /* I-Frame */
1033                 control->sframe = 0;
1034                 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
1035                 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
1036
1037                 control->poll = 0;
1038                 control->super = 0;
1039         }
1040 }
1041
1042 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
1043 {
1044         control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1045         control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
1046
1047         if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
1048                 /* S-Frame */
1049                 control->sframe = 1;
1050                 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
1051                 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
1052
1053                 control->sar = 0;
1054                 control->txseq = 0;
1055         } else {
1056                 /* I-Frame */
1057                 control->sframe = 0;
1058                 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
1059                 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1060
1061                 control->poll = 0;
1062                 control->super = 0;
1063         }
1064 }
1065
1066 static inline void __unpack_control(struct l2cap_chan *chan,
1067                                     struct sk_buff *skb)
1068 {
1069         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1070                 __unpack_extended_control(get_unaligned_le32(skb->data),
1071                                           &bt_cb(skb)->l2cap);
1072                 skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
1073         } else {
1074                 __unpack_enhanced_control(get_unaligned_le16(skb->data),
1075                                           &bt_cb(skb)->l2cap);
1076                 skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
1077         }
1078 }
1079
1080 static u32 __pack_extended_control(struct l2cap_ctrl *control)
1081 {
1082         u32 packed;
1083
1084         packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
1085         packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
1086
1087         if (control->sframe) {
1088                 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
1089                 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
1090                 packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
1091         } else {
1092                 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
1093                 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
1094         }
1095
1096         return packed;
1097 }
1098
1099 static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
1100 {
1101         u16 packed;
1102
1103         packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
1104         packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
1105
1106         if (control->sframe) {
1107                 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
1108                 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
1109                 packed |= L2CAP_CTRL_FRAME_TYPE;
1110         } else {
1111                 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
1112                 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
1113         }
1114
1115         return packed;
1116 }
1117
1118 static inline void __pack_control(struct l2cap_chan *chan,
1119                                   struct l2cap_ctrl *control,
1120                                   struct sk_buff *skb)
1121 {
1122         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1123                 put_unaligned_le32(__pack_extended_control(control),
1124                                    skb->data + L2CAP_HDR_SIZE);
1125         } else {
1126                 put_unaligned_le16(__pack_enhanced_control(control),
1127                                    skb->data + L2CAP_HDR_SIZE);
1128         }
1129 }
1130
1131 static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
1132 {
1133         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1134                 return L2CAP_EXT_HDR_SIZE;
1135         else
1136                 return L2CAP_ENH_HDR_SIZE;
1137 }
1138
1139 static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
1140                                                u32 control)
1141 {
1142         struct sk_buff *skb;
1143         struct l2cap_hdr *lh;
1144         int hlen = __ertm_hdr_size(chan);
1145
1146         if (chan->fcs == L2CAP_FCS_CRC16)
1147                 hlen += L2CAP_FCS_SIZE;
1148
1149         skb = bt_skb_alloc(hlen, GFP_KERNEL);
1150
1151         if (!skb)
1152                 return ERR_PTR(-ENOMEM);
1153
1154         lh = skb_put(skb, L2CAP_HDR_SIZE);
1155         lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
1156         lh->cid = cpu_to_le16(chan->dcid);
1157
1158         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1159                 put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
1160         else
1161                 put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
1162
1163         if (chan->fcs == L2CAP_FCS_CRC16) {
1164                 u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
1165                 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1166         }
1167
1168         skb->priority = HCI_PRIO_MAX;
1169         return skb;
1170 }
1171
1172 static void l2cap_send_sframe(struct l2cap_chan *chan,
1173                               struct l2cap_ctrl *control)
1174 {
1175         struct sk_buff *skb;
1176         u32 control_field;
1177
1178         BT_DBG("chan %p, control %p", chan, control);
1179
1180         if (!control->sframe)
1181                 return;
1182
1183         if (__chan_is_moving(chan))
1184                 return;
1185
1186         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
1187             !control->poll)
1188                 control->final = 1;
1189
1190         if (control->super == L2CAP_SUPER_RR)
1191                 clear_bit(CONN_RNR_SENT, &chan->conn_state);
1192         else if (control->super == L2CAP_SUPER_RNR)
1193                 set_bit(CONN_RNR_SENT, &chan->conn_state);
1194
1195         if (control->super != L2CAP_SUPER_SREJ) {
1196                 chan->last_acked_seq = control->reqseq;
1197                 __clear_ack_timer(chan);
1198         }
1199
1200         BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
1201                control->final, control->poll, control->super);
1202
1203         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
1204                 control_field = __pack_extended_control(control);
1205         else
1206                 control_field = __pack_enhanced_control(control);
1207
1208         skb = l2cap_create_sframe_pdu(chan, control_field);
1209         if (!IS_ERR(skb))
1210                 l2cap_do_send(chan, skb);
1211 }
1212
1213 static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
1214 {
1215         struct l2cap_ctrl control;
1216
1217         BT_DBG("chan %p, poll %d", chan, poll);
1218
1219         memset(&control, 0, sizeof(control));
1220         control.sframe = 1;
1221         control.poll = poll;
1222
1223         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
1224                 control.super = L2CAP_SUPER_RNR;
1225         else
1226                 control.super = L2CAP_SUPER_RR;
1227
1228         control.reqseq = chan->buffer_seq;
1229         l2cap_send_sframe(chan, &control);
1230 }
1231
1232 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
1233 {
1234         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
1235                 return true;
1236
1237         return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
1238 }
1239
1240 static bool __amp_capable(struct l2cap_chan *chan)
1241 {
1242         struct l2cap_conn *conn = chan->conn;
1243         struct hci_dev *hdev;
1244         bool amp_available = false;
1245
1246         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
1247                 return false;
1248
1249         if (!(conn->remote_fixed_chan & L2CAP_FC_A2MP))
1250                 return false;
1251
1252         read_lock(&hci_dev_list_lock);
1253         list_for_each_entry(hdev, &hci_dev_list, list) {
1254                 if (hdev->amp_type != AMP_TYPE_BREDR &&
1255                     test_bit(HCI_UP, &hdev->flags)) {
1256                         amp_available = true;
1257                         break;
1258                 }
1259         }
1260         read_unlock(&hci_dev_list_lock);
1261
1262         if (chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED)
1263                 return amp_available;
1264
1265         return false;
1266 }
1267
1268 static bool l2cap_check_efs(struct l2cap_chan *chan)
1269 {
1270         /* Check EFS parameters */
1271         return true;
1272 }
1273
1274 void l2cap_send_conn_req(struct l2cap_chan *chan)
1275 {
1276         struct l2cap_conn *conn = chan->conn;
1277         struct l2cap_conn_req req;
1278
1279         req.scid = cpu_to_le16(chan->scid);
1280         req.psm  = chan->psm;
1281
1282         chan->ident = l2cap_get_ident(conn);
1283
1284         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
1285
1286         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
1287 }
1288
1289 static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id)
1290 {
1291         struct l2cap_create_chan_req req;
1292         req.scid = cpu_to_le16(chan->scid);
1293         req.psm  = chan->psm;
1294         req.amp_id = amp_id;
1295
1296         chan->ident = l2cap_get_ident(chan->conn);
1297
1298         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ,
1299                        sizeof(req), &req);
1300 }
1301
1302 static void l2cap_move_setup(struct l2cap_chan *chan)
1303 {
1304         struct sk_buff *skb;
1305
1306         BT_DBG("chan %p", chan);
1307
1308         if (chan->mode != L2CAP_MODE_ERTM)
1309                 return;
1310
1311         __clear_retrans_timer(chan);
1312         __clear_monitor_timer(chan);
1313         __clear_ack_timer(chan);
1314
1315         chan->retry_count = 0;
1316         skb_queue_walk(&chan->tx_q, skb) {
1317                 if (bt_cb(skb)->l2cap.retries)
1318                         bt_cb(skb)->l2cap.retries = 1;
1319                 else
1320                         break;
1321         }
1322
1323         chan->expected_tx_seq = chan->buffer_seq;
1324
1325         clear_bit(CONN_REJ_ACT, &chan->conn_state);
1326         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
1327         l2cap_seq_list_clear(&chan->retrans_list);
1328         l2cap_seq_list_clear(&chan->srej_list);
1329         skb_queue_purge(&chan->srej_q);
1330
1331         chan->tx_state = L2CAP_TX_STATE_XMIT;
1332         chan->rx_state = L2CAP_RX_STATE_MOVE;
1333
1334         set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
1335 }
1336
1337 static void l2cap_move_done(struct l2cap_chan *chan)
1338 {
1339         u8 move_role = chan->move_role;
1340         BT_DBG("chan %p", chan);
1341
1342         chan->move_state = L2CAP_MOVE_STABLE;
1343         chan->move_role = L2CAP_MOVE_ROLE_NONE;
1344
1345         if (chan->mode != L2CAP_MODE_ERTM)
1346                 return;
1347
1348         switch (move_role) {
1349         case L2CAP_MOVE_ROLE_INITIATOR:
1350                 l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL);
1351                 chan->rx_state = L2CAP_RX_STATE_WAIT_F;
1352                 break;
1353         case L2CAP_MOVE_ROLE_RESPONDER:
1354                 chan->rx_state = L2CAP_RX_STATE_WAIT_P;
1355                 break;
1356         }
1357 }
1358
1359 static void l2cap_chan_ready(struct l2cap_chan *chan)
1360 {
1361         /* The channel may have already been flagged as connected in
1362          * case of receiving data before the L2CAP info req/rsp
1363          * procedure is complete.
1364          */
1365         if (chan->state == BT_CONNECTED)
1366                 return;
1367
1368         /* This clears all conf flags, including CONF_NOT_COMPLETE */
1369         chan->conf_state = 0;
1370         __clear_chan_timer(chan);
1371
1372         switch (chan->mode) {
1373         case L2CAP_MODE_LE_FLOWCTL:
1374         case L2CAP_MODE_EXT_FLOWCTL:
1375                 if (!chan->tx_credits)
1376                         chan->ops->suspend(chan);
1377                 break;
1378         }
1379
1380         chan->state = BT_CONNECTED;
1381
1382         chan->ops->ready(chan);
1383 }
1384
1385 static void l2cap_le_connect(struct l2cap_chan *chan)
1386 {
1387         struct l2cap_conn *conn = chan->conn;
1388         struct l2cap_le_conn_req req;
1389
1390         if (test_and_set_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags))
1391                 return;
1392
1393         if (!chan->imtu)
1394                 chan->imtu = chan->conn->mtu;
1395
1396         l2cap_le_flowctl_init(chan, 0);
1397
1398         memset(&req, 0, sizeof(req));
1399         req.psm     = chan->psm;
1400         req.scid    = cpu_to_le16(chan->scid);
1401         req.mtu     = cpu_to_le16(chan->imtu);
1402         req.mps     = cpu_to_le16(chan->mps);
1403         req.credits = cpu_to_le16(chan->rx_credits);
1404
1405         chan->ident = l2cap_get_ident(conn);
1406
1407         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_REQ,
1408                        sizeof(req), &req);
1409 }
1410
1411 struct l2cap_ecred_conn_data {
1412         struct {
1413                 struct l2cap_ecred_conn_req req;
1414                 __le16 scid[5];
1415         } __packed pdu;
1416         struct l2cap_chan *chan;
1417         struct pid *pid;
1418         int count;
1419 };
1420
1421 static void l2cap_ecred_defer_connect(struct l2cap_chan *chan, void *data)
1422 {
1423         struct l2cap_ecred_conn_data *conn = data;
1424         struct pid *pid;
1425
1426         if (chan == conn->chan)
1427                 return;
1428
1429         if (!test_and_clear_bit(FLAG_DEFER_SETUP, &chan->flags))
1430                 return;
1431
1432         pid = chan->ops->get_peer_pid(chan);
1433
1434         /* Only add deferred channels with the same PID/PSM */
1435         if (conn->pid != pid || chan->psm != conn->chan->psm || chan->ident ||
1436             chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
1437                 return;
1438
1439         if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1440                 return;
1441
1442         l2cap_ecred_init(chan, 0);
1443
1444         /* Set the same ident so we can match on the rsp */
1445         chan->ident = conn->chan->ident;
1446
1447         /* Include all channels deferred */
1448         conn->pdu.scid[conn->count] = cpu_to_le16(chan->scid);
1449
1450         conn->count++;
1451 }
1452
1453 static void l2cap_ecred_connect(struct l2cap_chan *chan)
1454 {
1455         struct l2cap_conn *conn = chan->conn;
1456         struct l2cap_ecred_conn_data data;
1457
1458         if (test_bit(FLAG_DEFER_SETUP, &chan->flags))
1459                 return;
1460
1461         if (test_and_set_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
1462                 return;
1463
1464         l2cap_ecred_init(chan, 0);
1465
1466         memset(&data, 0, sizeof(data));
1467         data.pdu.req.psm     = chan->psm;
1468         data.pdu.req.mtu     = cpu_to_le16(chan->imtu);
1469         data.pdu.req.mps     = cpu_to_le16(chan->mps);
1470         data.pdu.req.credits = cpu_to_le16(chan->rx_credits);
1471         data.pdu.scid[0]     = cpu_to_le16(chan->scid);
1472
1473         chan->ident = l2cap_get_ident(conn);
1474
1475         data.count = 1;
1476         data.chan = chan;
1477         data.pid = chan->ops->get_peer_pid(chan);
1478
1479         __l2cap_chan_list(conn, l2cap_ecred_defer_connect, &data);
1480
1481         l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_CONN_REQ,
1482                        sizeof(data.pdu.req) + data.count * sizeof(__le16),
1483                        &data.pdu);
1484 }
1485
1486 static void l2cap_le_start(struct l2cap_chan *chan)
1487 {
1488         struct l2cap_conn *conn = chan->conn;
1489
1490         if (!smp_conn_security(conn->hcon, chan->sec_level))
1491                 return;
1492
1493         if (!chan->psm) {
1494                 l2cap_chan_ready(chan);
1495                 return;
1496         }
1497
1498         if (chan->state == BT_CONNECT) {
1499                 if (chan->mode == L2CAP_MODE_EXT_FLOWCTL)
1500                         l2cap_ecred_connect(chan);
1501                 else
1502                         l2cap_le_connect(chan);
1503         }
1504 }
1505
1506 static void l2cap_start_connection(struct l2cap_chan *chan)
1507 {
1508         if (__amp_capable(chan)) {
1509                 BT_DBG("chan %p AMP capable: discover AMPs", chan);
1510                 a2mp_discover_amp(chan);
1511         } else if (chan->conn->hcon->type == LE_LINK) {
1512                 l2cap_le_start(chan);
1513         } else {
1514                 l2cap_send_conn_req(chan);
1515         }
1516 }
1517
1518 static void l2cap_request_info(struct l2cap_conn *conn)
1519 {
1520         struct l2cap_info_req req;
1521
1522         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1523                 return;
1524
1525         req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
1526
1527         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
1528         conn->info_ident = l2cap_get_ident(conn);
1529
1530         schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
1531
1532         l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
1533                        sizeof(req), &req);
1534 }
1535
1536 static bool l2cap_check_enc_key_size(struct hci_conn *hcon)
1537 {
1538         /* The minimum encryption key size needs to be enforced by the
1539          * host stack before establishing any L2CAP connections. The
1540          * specification in theory allows a minimum of 1, but to align
1541          * BR/EDR and LE transports, a minimum of 7 is chosen.
1542          *
1543          * This check might also be called for unencrypted connections
1544          * that have no key size requirements. Ensure that the link is
1545          * actually encrypted before enforcing a key size.
1546          */
1547         int min_key_size = hcon->hdev->min_enc_key_size;
1548
1549         /* On FIPS security level, key size must be 16 bytes */
1550         if (hcon->sec_level == BT_SECURITY_FIPS)
1551                 min_key_size = 16;
1552
1553         return (!test_bit(HCI_CONN_ENCRYPT, &hcon->flags) ||
1554                 hcon->enc_key_size >= min_key_size);
1555 }
1556
1557 static void l2cap_do_start(struct l2cap_chan *chan)
1558 {
1559         struct l2cap_conn *conn = chan->conn;
1560
1561         if (conn->hcon->type == LE_LINK) {
1562                 l2cap_le_start(chan);
1563                 return;
1564         }
1565
1566         if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)) {
1567                 l2cap_request_info(conn);
1568                 return;
1569         }
1570
1571         if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1572                 return;
1573
1574         if (!l2cap_chan_check_security(chan, true) ||
1575             !__l2cap_no_conn_pending(chan))
1576                 return;
1577
1578         if (l2cap_check_enc_key_size(conn->hcon))
1579                 l2cap_start_connection(chan);
1580         else
1581                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
1582 }
1583
1584 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1585 {
1586         u32 local_feat_mask = l2cap_feat_mask;
1587         if (!disable_ertm)
1588                 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
1589
1590         switch (mode) {
1591         case L2CAP_MODE_ERTM:
1592                 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
1593         case L2CAP_MODE_STREAMING:
1594                 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
1595         default:
1596                 return 0x00;
1597         }
1598 }
1599
1600 static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1601 {
1602         struct l2cap_conn *conn = chan->conn;
1603         struct l2cap_disconn_req req;
1604
1605         if (!conn)
1606                 return;
1607
1608         if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
1609                 __clear_retrans_timer(chan);
1610                 __clear_monitor_timer(chan);
1611                 __clear_ack_timer(chan);
1612         }
1613
1614         if (chan->scid == L2CAP_CID_A2MP) {
1615                 l2cap_state_change(chan, BT_DISCONN);
1616                 return;
1617         }
1618
1619         req.dcid = cpu_to_le16(chan->dcid);
1620         req.scid = cpu_to_le16(chan->scid);
1621         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ,
1622                        sizeof(req), &req);
1623
1624         l2cap_state_change_and_error(chan, BT_DISCONN, err);
1625 }
1626
1627 /* ---- L2CAP connections ---- */
1628 static void l2cap_conn_start(struct l2cap_conn *conn)
1629 {
1630         struct l2cap_chan *chan, *tmp;
1631
1632         BT_DBG("conn %p", conn);
1633
1634         mutex_lock(&conn->chan_lock);
1635
1636         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1637                 l2cap_chan_lock(chan);
1638
1639                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1640                         l2cap_chan_ready(chan);
1641                         l2cap_chan_unlock(chan);
1642                         continue;
1643                 }
1644
1645                 if (chan->state == BT_CONNECT) {
1646                         if (!l2cap_chan_check_security(chan, true) ||
1647                             !__l2cap_no_conn_pending(chan)) {
1648                                 l2cap_chan_unlock(chan);
1649                                 continue;
1650                         }
1651
1652                         if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1653                             && test_bit(CONF_STATE2_DEVICE,
1654                                         &chan->conf_state)) {
1655                                 l2cap_chan_close(chan, ECONNRESET);
1656                                 l2cap_chan_unlock(chan);
1657                                 continue;
1658                         }
1659
1660                         if (l2cap_check_enc_key_size(conn->hcon))
1661                                 l2cap_start_connection(chan);
1662                         else
1663                                 l2cap_chan_close(chan, ECONNREFUSED);
1664
1665                 } else if (chan->state == BT_CONNECT2) {
1666                         struct l2cap_conn_rsp rsp;
1667                         char buf[128];
1668                         rsp.scid = cpu_to_le16(chan->dcid);
1669                         rsp.dcid = cpu_to_le16(chan->scid);
1670
1671                         if (l2cap_chan_check_security(chan, false)) {
1672                                 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
1673                                         rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1674                                         rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1675                                         chan->ops->defer(chan);
1676
1677                                 } else {
1678                                         l2cap_state_change(chan, BT_CONFIG);
1679                                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
1680                                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
1681                                 }
1682                         } else {
1683                                 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
1684                                 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1685                         }
1686
1687                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1688                                        sizeof(rsp), &rsp);
1689
1690                         if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1691                             rsp.result != L2CAP_CR_SUCCESS) {
1692                                 l2cap_chan_unlock(chan);
1693                                 continue;
1694                         }
1695
1696                         set_bit(CONF_REQ_SENT, &chan->conf_state);
1697                         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1698                                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
1699                         chan->num_conf_req++;
1700                 }
1701
1702                 l2cap_chan_unlock(chan);
1703         }
1704
1705         mutex_unlock(&conn->chan_lock);
1706 }
1707
1708 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1709 {
1710         struct hci_conn *hcon = conn->hcon;
1711         struct hci_dev *hdev = hcon->hdev;
1712
1713         BT_DBG("%s conn %p", hdev->name, conn);
1714
1715         /* For outgoing pairing which doesn't necessarily have an
1716          * associated socket (e.g. mgmt_pair_device).
1717          */
1718         if (hcon->out)
1719                 smp_conn_security(hcon, hcon->pending_sec_level);
1720
1721         /* For LE peripheral connections, make sure the connection interval
1722          * is in the range of the minimum and maximum interval that has
1723          * been configured for this connection. If not, then trigger
1724          * the connection update procedure.
1725          */
1726         if (hcon->role == HCI_ROLE_SLAVE &&
1727             (hcon->le_conn_interval < hcon->le_conn_min_interval ||
1728              hcon->le_conn_interval > hcon->le_conn_max_interval)) {
1729                 struct l2cap_conn_param_update_req req;
1730
1731                 req.min = cpu_to_le16(hcon->le_conn_min_interval);
1732                 req.max = cpu_to_le16(hcon->le_conn_max_interval);
1733                 req.latency = cpu_to_le16(hcon->le_conn_latency);
1734                 req.to_multiplier = cpu_to_le16(hcon->le_supv_timeout);
1735
1736                 l2cap_send_cmd(conn, l2cap_get_ident(conn),
1737                                L2CAP_CONN_PARAM_UPDATE_REQ, sizeof(req), &req);
1738         }
1739 }
1740
1741 static void l2cap_conn_ready(struct l2cap_conn *conn)
1742 {
1743         struct l2cap_chan *chan;
1744         struct hci_conn *hcon = conn->hcon;
1745
1746         BT_DBG("conn %p", conn);
1747
1748         if (hcon->type == ACL_LINK)
1749                 l2cap_request_info(conn);
1750
1751         mutex_lock(&conn->chan_lock);
1752
1753         list_for_each_entry(chan, &conn->chan_l, list) {
1754
1755                 l2cap_chan_lock(chan);
1756
1757                 if (chan->scid == L2CAP_CID_A2MP) {
1758                         l2cap_chan_unlock(chan);
1759                         continue;
1760                 }
1761
1762                 if (hcon->type == LE_LINK) {
1763                         l2cap_le_start(chan);
1764                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1765                         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
1766                                 l2cap_chan_ready(chan);
1767                 } else if (chan->state == BT_CONNECT) {
1768                         l2cap_do_start(chan);
1769                 }
1770
1771                 l2cap_chan_unlock(chan);
1772         }
1773
1774         mutex_unlock(&conn->chan_lock);
1775
1776         if (hcon->type == LE_LINK)
1777                 l2cap_le_conn_ready(conn);
1778
1779         queue_work(hcon->hdev->workqueue, &conn->pending_rx_work);
1780 }
1781
1782 /* Notify sockets that we cannot guaranty reliability anymore */
1783 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1784 {
1785         struct l2cap_chan *chan;
1786
1787         BT_DBG("conn %p", conn);
1788
1789         mutex_lock(&conn->chan_lock);
1790
1791         list_for_each_entry(chan, &conn->chan_l, list) {
1792                 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1793                         l2cap_chan_set_err(chan, err);
1794         }
1795
1796         mutex_unlock(&conn->chan_lock);
1797 }
1798
1799 static void l2cap_info_timeout(struct work_struct *work)
1800 {
1801         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1802                                                info_timer.work);
1803
1804         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1805         conn->info_ident = 0;
1806
1807         l2cap_conn_start(conn);
1808 }
1809
1810 /*
1811  * l2cap_user
1812  * External modules can register l2cap_user objects on l2cap_conn. The ->probe
1813  * callback is called during registration. The ->remove callback is called
1814  * during unregistration.
1815  * An l2cap_user object can either be explicitly unregistered or when the
1816  * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon,
1817  * l2cap->hchan, .. are valid as long as the remove callback hasn't been called.
1818  * External modules must own a reference to the l2cap_conn object if they intend
1819  * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at
1820  * any time if they don't.
1821  */
1822
1823 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user)
1824 {
1825         struct hci_dev *hdev = conn->hcon->hdev;
1826         int ret;
1827
1828         /* We need to check whether l2cap_conn is registered. If it is not, we
1829          * must not register the l2cap_user. l2cap_conn_del() is unregisters
1830          * l2cap_conn objects, but doesn't provide its own locking. Instead, it
1831          * relies on the parent hci_conn object to be locked. This itself relies
1832          * on the hci_dev object to be locked. So we must lock the hci device
1833          * here, too. */
1834
1835         hci_dev_lock(hdev);
1836
1837         if (!list_empty(&user->list)) {
1838                 ret = -EINVAL;
1839                 goto out_unlock;
1840         }
1841
1842         /* conn->hchan is NULL after l2cap_conn_del() was called */
1843         if (!conn->hchan) {
1844                 ret = -ENODEV;
1845                 goto out_unlock;
1846         }
1847
1848         ret = user->probe(conn, user);
1849         if (ret)
1850                 goto out_unlock;
1851
1852         list_add(&user->list, &conn->users);
1853         ret = 0;
1854
1855 out_unlock:
1856         hci_dev_unlock(hdev);
1857         return ret;
1858 }
1859 EXPORT_SYMBOL(l2cap_register_user);
1860
1861 void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
1862 {
1863         struct hci_dev *hdev = conn->hcon->hdev;
1864
1865         hci_dev_lock(hdev);
1866
1867         if (list_empty(&user->list))
1868                 goto out_unlock;
1869
1870         list_del_init(&user->list);
1871         user->remove(conn, user);
1872
1873 out_unlock:
1874         hci_dev_unlock(hdev);
1875 }
1876 EXPORT_SYMBOL(l2cap_unregister_user);
1877
1878 static void l2cap_unregister_all_users(struct l2cap_conn *conn)
1879 {
1880         struct l2cap_user *user;
1881
1882         while (!list_empty(&conn->users)) {
1883                 user = list_first_entry(&conn->users, struct l2cap_user, list);
1884                 list_del_init(&user->list);
1885                 user->remove(conn, user);
1886         }
1887 }
1888
1889 static void l2cap_conn_del(struct hci_conn *hcon, int err)
1890 {
1891         struct l2cap_conn *conn = hcon->l2cap_data;
1892         struct l2cap_chan *chan, *l;
1893
1894         if (!conn)
1895                 return;
1896
1897         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1898
1899         kfree_skb(conn->rx_skb);
1900
1901         skb_queue_purge(&conn->pending_rx);
1902
1903         /* We can not call flush_work(&conn->pending_rx_work) here since we
1904          * might block if we are running on a worker from the same workqueue
1905          * pending_rx_work is waiting on.
1906          */
1907         if (work_pending(&conn->pending_rx_work))
1908                 cancel_work_sync(&conn->pending_rx_work);
1909
1910         cancel_delayed_work_sync(&conn->id_addr_timer);
1911
1912         l2cap_unregister_all_users(conn);
1913
1914         /* Force the connection to be immediately dropped */
1915         hcon->disc_timeout = 0;
1916
1917         mutex_lock(&conn->chan_lock);
1918
1919         /* Kill channels */
1920         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1921                 l2cap_chan_hold(chan);
1922                 l2cap_chan_lock(chan);
1923
1924                 l2cap_chan_del(chan, err);
1925
1926                 chan->ops->close(chan);
1927
1928                 l2cap_chan_unlock(chan);
1929                 l2cap_chan_put(chan);
1930         }
1931
1932         mutex_unlock(&conn->chan_lock);
1933
1934         hci_chan_del(conn->hchan);
1935
1936         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1937                 cancel_delayed_work_sync(&conn->info_timer);
1938
1939         hcon->l2cap_data = NULL;
1940         conn->hchan = NULL;
1941         l2cap_conn_put(conn);
1942 }
1943
1944 static void l2cap_conn_free(struct kref *ref)
1945 {
1946         struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
1947
1948         hci_conn_put(conn->hcon);
1949         kfree(conn);
1950 }
1951
1952 struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn)
1953 {
1954         kref_get(&conn->ref);
1955         return conn;
1956 }
1957 EXPORT_SYMBOL(l2cap_conn_get);
1958
1959 void l2cap_conn_put(struct l2cap_conn *conn)
1960 {
1961         kref_put(&conn->ref, l2cap_conn_free);
1962 }
1963 EXPORT_SYMBOL(l2cap_conn_put);
1964
1965 /* ---- Socket interface ---- */
1966
1967 /* Find socket with psm and source / destination bdaddr.
1968  * Returns closest match.
1969  */
1970 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1971                                                    bdaddr_t *src,
1972                                                    bdaddr_t *dst,
1973                                                    u8 link_type)
1974 {
1975         struct l2cap_chan *c, *tmp, *c1 = NULL;
1976
1977         read_lock(&chan_list_lock);
1978
1979         list_for_each_entry_safe(c, tmp, &chan_list, global_l) {
1980                 if (state && c->state != state)
1981                         continue;
1982
1983                 if (link_type == ACL_LINK && c->src_type != BDADDR_BREDR)
1984                         continue;
1985
1986                 if (link_type == LE_LINK && c->src_type == BDADDR_BREDR)
1987                         continue;
1988
1989                 if (c->chan_type != L2CAP_CHAN_FIXED && c->psm == psm) {
1990                         int src_match, dst_match;
1991                         int src_any, dst_any;
1992
1993                         /* Exact match. */
1994                         src_match = !bacmp(&c->src, src);
1995                         dst_match = !bacmp(&c->dst, dst);
1996                         if (src_match && dst_match) {
1997                                 if (!l2cap_chan_hold_unless_zero(c))
1998                                         continue;
1999
2000                                 read_unlock(&chan_list_lock);
2001                                 return c;
2002                         }
2003
2004                         /* Closest match */
2005                         src_any = !bacmp(&c->src, BDADDR_ANY);
2006                         dst_any = !bacmp(&c->dst, BDADDR_ANY);
2007                         if ((src_match && dst_any) || (src_any && dst_match) ||
2008                             (src_any && dst_any))
2009                                 c1 = c;
2010                 }
2011         }
2012
2013         if (c1)
2014                 c1 = l2cap_chan_hold_unless_zero(c1);
2015
2016         read_unlock(&chan_list_lock);
2017
2018         return c1;
2019 }
2020
2021 static void l2cap_monitor_timeout(struct work_struct *work)
2022 {
2023         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2024                                                monitor_timer.work);
2025
2026         BT_DBG("chan %p", chan);
2027
2028         l2cap_chan_lock(chan);
2029
2030         if (!chan->conn) {
2031                 l2cap_chan_unlock(chan);
2032                 l2cap_chan_put(chan);
2033                 return;
2034         }
2035
2036         l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
2037
2038         l2cap_chan_unlock(chan);
2039         l2cap_chan_put(chan);
2040 }
2041
2042 static void l2cap_retrans_timeout(struct work_struct *work)
2043 {
2044         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2045                                                retrans_timer.work);
2046
2047         BT_DBG("chan %p", chan);
2048
2049         l2cap_chan_lock(chan);
2050
2051         if (!chan->conn) {
2052                 l2cap_chan_unlock(chan);
2053                 l2cap_chan_put(chan);
2054                 return;
2055         }
2056
2057         l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
2058         l2cap_chan_unlock(chan);
2059         l2cap_chan_put(chan);
2060 }
2061
2062 static void l2cap_streaming_send(struct l2cap_chan *chan,
2063                                  struct sk_buff_head *skbs)
2064 {
2065         struct sk_buff *skb;
2066         struct l2cap_ctrl *control;
2067
2068         BT_DBG("chan %p, skbs %p", chan, skbs);
2069
2070         if (__chan_is_moving(chan))
2071                 return;
2072
2073         skb_queue_splice_tail_init(skbs, &chan->tx_q);
2074
2075         while (!skb_queue_empty(&chan->tx_q)) {
2076
2077                 skb = skb_dequeue(&chan->tx_q);
2078
2079                 bt_cb(skb)->l2cap.retries = 1;
2080                 control = &bt_cb(skb)->l2cap;
2081
2082                 control->reqseq = 0;
2083                 control->txseq = chan->next_tx_seq;
2084
2085                 __pack_control(chan, control, skb);
2086
2087                 if (chan->fcs == L2CAP_FCS_CRC16) {
2088                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2089                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2090                 }
2091
2092                 l2cap_do_send(chan, skb);
2093
2094                 BT_DBG("Sent txseq %u", control->txseq);
2095
2096                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2097                 chan->frames_sent++;
2098         }
2099 }
2100
2101 static int l2cap_ertm_send(struct l2cap_chan *chan)
2102 {
2103         struct sk_buff *skb, *tx_skb;
2104         struct l2cap_ctrl *control;
2105         int sent = 0;
2106
2107         BT_DBG("chan %p", chan);
2108
2109         if (chan->state != BT_CONNECTED)
2110                 return -ENOTCONN;
2111
2112         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2113                 return 0;
2114
2115         if (__chan_is_moving(chan))
2116                 return 0;
2117
2118         while (chan->tx_send_head &&
2119                chan->unacked_frames < chan->remote_tx_win &&
2120                chan->tx_state == L2CAP_TX_STATE_XMIT) {
2121
2122                 skb = chan->tx_send_head;
2123
2124                 bt_cb(skb)->l2cap.retries = 1;
2125                 control = &bt_cb(skb)->l2cap;
2126
2127                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2128                         control->final = 1;
2129
2130                 control->reqseq = chan->buffer_seq;
2131                 chan->last_acked_seq = chan->buffer_seq;
2132                 control->txseq = chan->next_tx_seq;
2133
2134                 __pack_control(chan, control, skb);
2135
2136                 if (chan->fcs == L2CAP_FCS_CRC16) {
2137                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2138                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2139                 }
2140
2141                 /* Clone after data has been modified. Data is assumed to be
2142                    read-only (for locking purposes) on cloned sk_buffs.
2143                  */
2144                 tx_skb = skb_clone(skb, GFP_KERNEL);
2145
2146                 if (!tx_skb)
2147                         break;
2148
2149                 __set_retrans_timer(chan);
2150
2151                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2152                 chan->unacked_frames++;
2153                 chan->frames_sent++;
2154                 sent++;
2155
2156                 if (skb_queue_is_last(&chan->tx_q, skb))
2157                         chan->tx_send_head = NULL;
2158                 else
2159                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
2160
2161                 l2cap_do_send(chan, tx_skb);
2162                 BT_DBG("Sent txseq %u", control->txseq);
2163         }
2164
2165         BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
2166                chan->unacked_frames, skb_queue_len(&chan->tx_q));
2167
2168         return sent;
2169 }
2170
2171 static void l2cap_ertm_resend(struct l2cap_chan *chan)
2172 {
2173         struct l2cap_ctrl control;
2174         struct sk_buff *skb;
2175         struct sk_buff *tx_skb;
2176         u16 seq;
2177
2178         BT_DBG("chan %p", chan);
2179
2180         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2181                 return;
2182
2183         if (__chan_is_moving(chan))
2184                 return;
2185
2186         while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
2187                 seq = l2cap_seq_list_pop(&chan->retrans_list);
2188
2189                 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
2190                 if (!skb) {
2191                         BT_DBG("Error: Can't retransmit seq %d, frame missing",
2192                                seq);
2193                         continue;
2194                 }
2195
2196                 bt_cb(skb)->l2cap.retries++;
2197                 control = bt_cb(skb)->l2cap;
2198
2199                 if (chan->max_tx != 0 &&
2200                     bt_cb(skb)->l2cap.retries > chan->max_tx) {
2201                         BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
2202                         l2cap_send_disconn_req(chan, ECONNRESET);
2203                         l2cap_seq_list_clear(&chan->retrans_list);
2204                         break;
2205                 }
2206
2207                 control.reqseq = chan->buffer_seq;
2208                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2209                         control.final = 1;
2210                 else
2211                         control.final = 0;
2212
2213                 if (skb_cloned(skb)) {
2214                         /* Cloned sk_buffs are read-only, so we need a
2215                          * writeable copy
2216                          */
2217                         tx_skb = skb_copy(skb, GFP_KERNEL);
2218                 } else {
2219                         tx_skb = skb_clone(skb, GFP_KERNEL);
2220                 }
2221
2222                 if (!tx_skb) {
2223                         l2cap_seq_list_clear(&chan->retrans_list);
2224                         break;
2225                 }
2226
2227                 /* Update skb contents */
2228                 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
2229                         put_unaligned_le32(__pack_extended_control(&control),
2230                                            tx_skb->data + L2CAP_HDR_SIZE);
2231                 } else {
2232                         put_unaligned_le16(__pack_enhanced_control(&control),
2233                                            tx_skb->data + L2CAP_HDR_SIZE);
2234                 }
2235
2236                 /* Update FCS */
2237                 if (chan->fcs == L2CAP_FCS_CRC16) {
2238                         u16 fcs = crc16(0, (u8 *) tx_skb->data,
2239                                         tx_skb->len - L2CAP_FCS_SIZE);
2240                         put_unaligned_le16(fcs, skb_tail_pointer(tx_skb) -
2241                                                 L2CAP_FCS_SIZE);
2242                 }
2243
2244                 l2cap_do_send(chan, tx_skb);
2245
2246                 BT_DBG("Resent txseq %d", control.txseq);
2247
2248                 chan->last_acked_seq = chan->buffer_seq;
2249         }
2250 }
2251
2252 static void l2cap_retransmit(struct l2cap_chan *chan,
2253                              struct l2cap_ctrl *control)
2254 {
2255         BT_DBG("chan %p, control %p", chan, control);
2256
2257         l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
2258         l2cap_ertm_resend(chan);
2259 }
2260
2261 static void l2cap_retransmit_all(struct l2cap_chan *chan,
2262                                  struct l2cap_ctrl *control)
2263 {
2264         struct sk_buff *skb;
2265
2266         BT_DBG("chan %p, control %p", chan, control);
2267
2268         if (control->poll)
2269                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
2270
2271         l2cap_seq_list_clear(&chan->retrans_list);
2272
2273         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2274                 return;
2275
2276         if (chan->unacked_frames) {
2277                 skb_queue_walk(&chan->tx_q, skb) {
2278                         if (bt_cb(skb)->l2cap.txseq == control->reqseq ||
2279                             skb == chan->tx_send_head)
2280                                 break;
2281                 }
2282
2283                 skb_queue_walk_from(&chan->tx_q, skb) {
2284                         if (skb == chan->tx_send_head)
2285                                 break;
2286
2287                         l2cap_seq_list_append(&chan->retrans_list,
2288                                               bt_cb(skb)->l2cap.txseq);
2289                 }
2290
2291                 l2cap_ertm_resend(chan);
2292         }
2293 }
2294
2295 static void l2cap_send_ack(struct l2cap_chan *chan)
2296 {
2297         struct l2cap_ctrl control;
2298         u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2299                                          chan->last_acked_seq);
2300         int threshold;
2301
2302         BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2303                chan, chan->last_acked_seq, chan->buffer_seq);
2304
2305         memset(&control, 0, sizeof(control));
2306         control.sframe = 1;
2307
2308         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
2309             chan->rx_state == L2CAP_RX_STATE_RECV) {
2310                 __clear_ack_timer(chan);
2311                 control.super = L2CAP_SUPER_RNR;
2312                 control.reqseq = chan->buffer_seq;
2313                 l2cap_send_sframe(chan, &control);
2314         } else {
2315                 if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
2316                         l2cap_ertm_send(chan);
2317                         /* If any i-frames were sent, they included an ack */
2318                         if (chan->buffer_seq == chan->last_acked_seq)
2319                                 frames_to_ack = 0;
2320                 }
2321
2322                 /* Ack now if the window is 3/4ths full.
2323                  * Calculate without mul or div
2324                  */
2325                 threshold = chan->ack_win;
2326                 threshold += threshold << 1;
2327                 threshold >>= 2;
2328
2329                 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
2330                        threshold);
2331
2332                 if (frames_to_ack >= threshold) {
2333                         __clear_ack_timer(chan);
2334                         control.super = L2CAP_SUPER_RR;
2335                         control.reqseq = chan->buffer_seq;
2336                         l2cap_send_sframe(chan, &control);
2337                         frames_to_ack = 0;
2338                 }
2339
2340                 if (frames_to_ack)
2341                         __set_ack_timer(chan);
2342         }
2343 }
2344
2345 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
2346                                          struct msghdr *msg, int len,
2347                                          int count, struct sk_buff *skb)
2348 {
2349         struct l2cap_conn *conn = chan->conn;
2350         struct sk_buff **frag;
2351         int sent = 0;
2352
2353         if (!copy_from_iter_full(skb_put(skb, count), count, &msg->msg_iter))
2354                 return -EFAULT;
2355
2356         sent += count;
2357         len  -= count;
2358
2359         /* Continuation fragments (no L2CAP header) */
2360         frag = &skb_shinfo(skb)->frag_list;
2361         while (len) {
2362                 struct sk_buff *tmp;
2363
2364                 count = min_t(unsigned int, conn->mtu, len);
2365
2366                 tmp = chan->ops->alloc_skb(chan, 0, count,
2367                                            msg->msg_flags & MSG_DONTWAIT);
2368                 if (IS_ERR(tmp))
2369                         return PTR_ERR(tmp);
2370
2371                 *frag = tmp;
2372
2373                 if (!copy_from_iter_full(skb_put(*frag, count), count,
2374                                    &msg->msg_iter))
2375                         return -EFAULT;
2376
2377                 sent += count;
2378                 len  -= count;
2379
2380                 skb->len += (*frag)->len;
2381                 skb->data_len += (*frag)->len;
2382
2383                 frag = &(*frag)->next;
2384         }
2385
2386         return sent;
2387 }
2388
2389 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
2390                                                  struct msghdr *msg, size_t len)
2391 {
2392         struct l2cap_conn *conn = chan->conn;
2393         struct sk_buff *skb;
2394         int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
2395         struct l2cap_hdr *lh;
2396
2397         BT_DBG("chan %p psm 0x%2.2x len %zu", chan,
2398                __le16_to_cpu(chan->psm), len);
2399
2400         count = min_t(unsigned int, (conn->mtu - hlen), len);
2401
2402         skb = chan->ops->alloc_skb(chan, hlen, count,
2403                                    msg->msg_flags & MSG_DONTWAIT);
2404         if (IS_ERR(skb))
2405                 return skb;
2406
2407         /* Create L2CAP header */
2408         lh = skb_put(skb, L2CAP_HDR_SIZE);
2409         lh->cid = cpu_to_le16(chan->dcid);
2410         lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
2411         put_unaligned(chan->psm, (__le16 *) skb_put(skb, L2CAP_PSMLEN_SIZE));
2412
2413         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2414         if (unlikely(err < 0)) {
2415                 kfree_skb(skb);
2416                 return ERR_PTR(err);
2417         }
2418         return skb;
2419 }
2420
2421 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
2422                                               struct msghdr *msg, size_t len)
2423 {
2424         struct l2cap_conn *conn = chan->conn;
2425         struct sk_buff *skb;
2426         int err, count;
2427         struct l2cap_hdr *lh;
2428
2429         BT_DBG("chan %p len %zu", chan, len);
2430
2431         count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
2432
2433         skb = chan->ops->alloc_skb(chan, L2CAP_HDR_SIZE, count,
2434                                    msg->msg_flags & MSG_DONTWAIT);
2435         if (IS_ERR(skb))
2436                 return skb;
2437
2438         /* Create L2CAP header */
2439         lh = skb_put(skb, L2CAP_HDR_SIZE);
2440         lh->cid = cpu_to_le16(chan->dcid);
2441         lh->len = cpu_to_le16(len);
2442
2443         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2444         if (unlikely(err < 0)) {
2445                 kfree_skb(skb);
2446                 return ERR_PTR(err);
2447         }
2448         return skb;
2449 }
2450
2451 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2452                                                struct msghdr *msg, size_t len,
2453                                                u16 sdulen)
2454 {
2455         struct l2cap_conn *conn = chan->conn;
2456         struct sk_buff *skb;
2457         int err, count, hlen;
2458         struct l2cap_hdr *lh;
2459
2460         BT_DBG("chan %p len %zu", chan, len);
2461
2462         if (!conn)
2463                 return ERR_PTR(-ENOTCONN);
2464
2465         hlen = __ertm_hdr_size(chan);
2466
2467         if (sdulen)
2468                 hlen += L2CAP_SDULEN_SIZE;
2469
2470         if (chan->fcs == L2CAP_FCS_CRC16)
2471                 hlen += L2CAP_FCS_SIZE;
2472
2473         count = min_t(unsigned int, (conn->mtu - hlen), len);
2474
2475         skb = chan->ops->alloc_skb(chan, hlen, count,
2476                                    msg->msg_flags & MSG_DONTWAIT);
2477         if (IS_ERR(skb))
2478                 return skb;
2479
2480         /* Create L2CAP header */
2481         lh = skb_put(skb, L2CAP_HDR_SIZE);
2482         lh->cid = cpu_to_le16(chan->dcid);
2483         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2484
2485         /* Control header is populated later */
2486         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2487                 put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2488         else
2489                 put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2490
2491         if (sdulen)
2492                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2493
2494         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2495         if (unlikely(err < 0)) {
2496                 kfree_skb(skb);
2497                 return ERR_PTR(err);
2498         }
2499
2500         bt_cb(skb)->l2cap.fcs = chan->fcs;
2501         bt_cb(skb)->l2cap.retries = 0;
2502         return skb;
2503 }
2504
2505 static int l2cap_segment_sdu(struct l2cap_chan *chan,
2506                              struct sk_buff_head *seg_queue,
2507                              struct msghdr *msg, size_t len)
2508 {
2509         struct sk_buff *skb;
2510         u16 sdu_len;
2511         size_t pdu_len;
2512         u8 sar;
2513
2514         BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2515
2516         /* It is critical that ERTM PDUs fit in a single HCI fragment,
2517          * so fragmented skbs are not used.  The HCI layer's handling
2518          * of fragmented skbs is not compatible with ERTM's queueing.
2519          */
2520
2521         /* PDU size is derived from the HCI MTU */
2522         pdu_len = chan->conn->mtu;
2523
2524         /* Constrain PDU size for BR/EDR connections */
2525         if (!chan->hs_hcon)
2526                 pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2527
2528         /* Adjust for largest possible L2CAP overhead. */
2529         if (chan->fcs)
2530                 pdu_len -= L2CAP_FCS_SIZE;
2531
2532         pdu_len -= __ertm_hdr_size(chan);
2533
2534         /* Remote device may have requested smaller PDUs */
2535         pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2536
2537         if (len <= pdu_len) {
2538                 sar = L2CAP_SAR_UNSEGMENTED;
2539                 sdu_len = 0;
2540                 pdu_len = len;
2541         } else {
2542                 sar = L2CAP_SAR_START;
2543                 sdu_len = len;
2544         }
2545
2546         while (len > 0) {
2547                 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2548
2549                 if (IS_ERR(skb)) {
2550                         __skb_queue_purge(seg_queue);
2551                         return PTR_ERR(skb);
2552                 }
2553
2554                 bt_cb(skb)->l2cap.sar = sar;
2555                 __skb_queue_tail(seg_queue, skb);
2556
2557                 len -= pdu_len;
2558                 if (sdu_len)
2559                         sdu_len = 0;
2560
2561                 if (len <= pdu_len) {
2562                         sar = L2CAP_SAR_END;
2563                         pdu_len = len;
2564                 } else {
2565                         sar = L2CAP_SAR_CONTINUE;
2566                 }
2567         }
2568
2569         return 0;
2570 }
2571
2572 static struct sk_buff *l2cap_create_le_flowctl_pdu(struct l2cap_chan *chan,
2573                                                    struct msghdr *msg,
2574                                                    size_t len, u16 sdulen)
2575 {
2576         struct l2cap_conn *conn = chan->conn;
2577         struct sk_buff *skb;
2578         int err, count, hlen;
2579         struct l2cap_hdr *lh;
2580
2581         BT_DBG("chan %p len %zu", chan, len);
2582
2583         if (!conn)
2584                 return ERR_PTR(-ENOTCONN);
2585
2586         hlen = L2CAP_HDR_SIZE;
2587
2588         if (sdulen)
2589                 hlen += L2CAP_SDULEN_SIZE;
2590
2591         count = min_t(unsigned int, (conn->mtu - hlen), len);
2592
2593         skb = chan->ops->alloc_skb(chan, hlen, count,
2594                                    msg->msg_flags & MSG_DONTWAIT);
2595         if (IS_ERR(skb))
2596                 return skb;
2597
2598         /* Create L2CAP header */
2599         lh = skb_put(skb, L2CAP_HDR_SIZE);
2600         lh->cid = cpu_to_le16(chan->dcid);
2601         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2602
2603         if (sdulen)
2604                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2605
2606         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2607         if (unlikely(err < 0)) {
2608                 kfree_skb(skb);
2609                 return ERR_PTR(err);
2610         }
2611
2612         return skb;
2613 }
2614
2615 static int l2cap_segment_le_sdu(struct l2cap_chan *chan,
2616                                 struct sk_buff_head *seg_queue,
2617                                 struct msghdr *msg, size_t len)
2618 {
2619         struct sk_buff *skb;
2620         size_t pdu_len;
2621         u16 sdu_len;
2622
2623         BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2624
2625         sdu_len = len;
2626         pdu_len = chan->remote_mps - L2CAP_SDULEN_SIZE;
2627
2628         while (len > 0) {
2629                 if (len <= pdu_len)
2630                         pdu_len = len;
2631
2632                 skb = l2cap_create_le_flowctl_pdu(chan, msg, pdu_len, sdu_len);
2633                 if (IS_ERR(skb)) {
2634                         __skb_queue_purge(seg_queue);
2635                         return PTR_ERR(skb);
2636                 }
2637
2638                 __skb_queue_tail(seg_queue, skb);
2639
2640                 len -= pdu_len;
2641
2642                 if (sdu_len) {
2643                         sdu_len = 0;
2644                         pdu_len += L2CAP_SDULEN_SIZE;
2645                 }
2646         }
2647
2648         return 0;
2649 }
2650
2651 static void l2cap_le_flowctl_send(struct l2cap_chan *chan)
2652 {
2653         int sent = 0;
2654
2655         BT_DBG("chan %p", chan);
2656
2657         while (chan->tx_credits && !skb_queue_empty(&chan->tx_q)) {
2658                 l2cap_do_send(chan, skb_dequeue(&chan->tx_q));
2659                 chan->tx_credits--;
2660                 sent++;
2661         }
2662
2663         BT_DBG("Sent %d credits %u queued %u", sent, chan->tx_credits,
2664                skb_queue_len(&chan->tx_q));
2665 }
2666
2667 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
2668 {
2669         struct sk_buff *skb;
2670         int err;
2671         struct sk_buff_head seg_queue;
2672
2673         if (!chan->conn)
2674                 return -ENOTCONN;
2675
2676         /* Connectionless channel */
2677         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2678                 skb = l2cap_create_connless_pdu(chan, msg, len);
2679                 if (IS_ERR(skb))
2680                         return PTR_ERR(skb);
2681
2682                 l2cap_do_send(chan, skb);
2683                 return len;
2684         }
2685
2686         switch (chan->mode) {
2687         case L2CAP_MODE_LE_FLOWCTL:
2688         case L2CAP_MODE_EXT_FLOWCTL:
2689                 /* Check outgoing MTU */
2690                 if (len > chan->omtu)
2691                         return -EMSGSIZE;
2692
2693                 __skb_queue_head_init(&seg_queue);
2694
2695                 err = l2cap_segment_le_sdu(chan, &seg_queue, msg, len);
2696
2697                 if (chan->state != BT_CONNECTED) {
2698                         __skb_queue_purge(&seg_queue);
2699                         err = -ENOTCONN;
2700                 }
2701
2702                 if (err)
2703                         return err;
2704
2705                 skb_queue_splice_tail_init(&seg_queue, &chan->tx_q);
2706
2707                 l2cap_le_flowctl_send(chan);
2708
2709                 if (!chan->tx_credits)
2710                         chan->ops->suspend(chan);
2711
2712                 err = len;
2713
2714                 break;
2715
2716         case L2CAP_MODE_BASIC:
2717                 /* Check outgoing MTU */
2718                 if (len > chan->omtu)
2719                         return -EMSGSIZE;
2720
2721                 /* Create a basic PDU */
2722                 skb = l2cap_create_basic_pdu(chan, msg, len);
2723                 if (IS_ERR(skb))
2724                         return PTR_ERR(skb);
2725
2726                 l2cap_do_send(chan, skb);
2727                 err = len;
2728                 break;
2729
2730         case L2CAP_MODE_ERTM:
2731         case L2CAP_MODE_STREAMING:
2732                 /* Check outgoing MTU */
2733                 if (len > chan->omtu) {
2734                         err = -EMSGSIZE;
2735                         break;
2736                 }
2737
2738                 __skb_queue_head_init(&seg_queue);
2739
2740                 /* Do segmentation before calling in to the state machine,
2741                  * since it's possible to block while waiting for memory
2742                  * allocation.
2743                  */
2744                 err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2745
2746                 if (err)
2747                         break;
2748
2749                 if (chan->mode == L2CAP_MODE_ERTM)
2750                         l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2751                 else
2752                         l2cap_streaming_send(chan, &seg_queue);
2753
2754                 err = len;
2755
2756                 /* If the skbs were not queued for sending, they'll still be in
2757                  * seg_queue and need to be purged.
2758                  */
2759                 __skb_queue_purge(&seg_queue);
2760                 break;
2761
2762         default:
2763                 BT_DBG("bad state %1.1x", chan->mode);
2764                 err = -EBADFD;
2765         }
2766
2767         return err;
2768 }
2769 EXPORT_SYMBOL_GPL(l2cap_chan_send);
2770
2771 static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2772 {
2773         struct l2cap_ctrl control;
2774         u16 seq;
2775
2776         BT_DBG("chan %p, txseq %u", chan, txseq);
2777
2778         memset(&control, 0, sizeof(control));
2779         control.sframe = 1;
2780         control.super = L2CAP_SUPER_SREJ;
2781
2782         for (seq = chan->expected_tx_seq; seq != txseq;
2783              seq = __next_seq(chan, seq)) {
2784                 if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2785                         control.reqseq = seq;
2786                         l2cap_send_sframe(chan, &control);
2787                         l2cap_seq_list_append(&chan->srej_list, seq);
2788                 }
2789         }
2790
2791         chan->expected_tx_seq = __next_seq(chan, txseq);
2792 }
2793
2794 static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2795 {
2796         struct l2cap_ctrl control;
2797
2798         BT_DBG("chan %p", chan);
2799
2800         if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2801                 return;
2802
2803         memset(&control, 0, sizeof(control));
2804         control.sframe = 1;
2805         control.super = L2CAP_SUPER_SREJ;
2806         control.reqseq = chan->srej_list.tail;
2807         l2cap_send_sframe(chan, &control);
2808 }
2809
2810 static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2811 {
2812         struct l2cap_ctrl control;
2813         u16 initial_head;
2814         u16 seq;
2815
2816         BT_DBG("chan %p, txseq %u", chan, txseq);
2817
2818         memset(&control, 0, sizeof(control));
2819         control.sframe = 1;
2820         control.super = L2CAP_SUPER_SREJ;
2821
2822         /* Capture initial list head to allow only one pass through the list. */
2823         initial_head = chan->srej_list.head;
2824
2825         do {
2826                 seq = l2cap_seq_list_pop(&chan->srej_list);
2827                 if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2828                         break;
2829
2830                 control.reqseq = seq;
2831                 l2cap_send_sframe(chan, &control);
2832                 l2cap_seq_list_append(&chan->srej_list, seq);
2833         } while (chan->srej_list.head != initial_head);
2834 }
2835
2836 static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2837 {
2838         struct sk_buff *acked_skb;
2839         u16 ackseq;
2840
2841         BT_DBG("chan %p, reqseq %u", chan, reqseq);
2842
2843         if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2844                 return;
2845
2846         BT_DBG("expected_ack_seq %u, unacked_frames %u",
2847                chan->expected_ack_seq, chan->unacked_frames);
2848
2849         for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2850              ackseq = __next_seq(chan, ackseq)) {
2851
2852                 acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2853                 if (acked_skb) {
2854                         skb_unlink(acked_skb, &chan->tx_q);
2855                         kfree_skb(acked_skb);
2856                         chan->unacked_frames--;
2857                 }
2858         }
2859
2860         chan->expected_ack_seq = reqseq;
2861
2862         if (chan->unacked_frames == 0)
2863                 __clear_retrans_timer(chan);
2864
2865         BT_DBG("unacked_frames %u", chan->unacked_frames);
2866 }
2867
2868 static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2869 {
2870         BT_DBG("chan %p", chan);
2871
2872         chan->expected_tx_seq = chan->buffer_seq;
2873         l2cap_seq_list_clear(&chan->srej_list);
2874         skb_queue_purge(&chan->srej_q);
2875         chan->rx_state = L2CAP_RX_STATE_RECV;
2876 }
2877
2878 static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2879                                 struct l2cap_ctrl *control,
2880                                 struct sk_buff_head *skbs, u8 event)
2881 {
2882         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2883                event);
2884
2885         switch (event) {
2886         case L2CAP_EV_DATA_REQUEST:
2887                 if (chan->tx_send_head == NULL)
2888                         chan->tx_send_head = skb_peek(skbs);
2889
2890                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2891                 l2cap_ertm_send(chan);
2892                 break;
2893         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2894                 BT_DBG("Enter LOCAL_BUSY");
2895                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2896
2897                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2898                         /* The SREJ_SENT state must be aborted if we are to
2899                          * enter the LOCAL_BUSY state.
2900                          */
2901                         l2cap_abort_rx_srej_sent(chan);
2902                 }
2903
2904                 l2cap_send_ack(chan);
2905
2906                 break;
2907         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2908                 BT_DBG("Exit LOCAL_BUSY");
2909                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2910
2911                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2912                         struct l2cap_ctrl local_control;
2913
2914                         memset(&local_control, 0, sizeof(local_control));
2915                         local_control.sframe = 1;
2916                         local_control.super = L2CAP_SUPER_RR;
2917                         local_control.poll = 1;
2918                         local_control.reqseq = chan->buffer_seq;
2919                         l2cap_send_sframe(chan, &local_control);
2920
2921                         chan->retry_count = 1;
2922                         __set_monitor_timer(chan);
2923                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2924                 }
2925                 break;
2926         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2927                 l2cap_process_reqseq(chan, control->reqseq);
2928                 break;
2929         case L2CAP_EV_EXPLICIT_POLL:
2930                 l2cap_send_rr_or_rnr(chan, 1);
2931                 chan->retry_count = 1;
2932                 __set_monitor_timer(chan);
2933                 __clear_ack_timer(chan);
2934                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2935                 break;
2936         case L2CAP_EV_RETRANS_TO:
2937                 l2cap_send_rr_or_rnr(chan, 1);
2938                 chan->retry_count = 1;
2939                 __set_monitor_timer(chan);
2940                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2941                 break;
2942         case L2CAP_EV_RECV_FBIT:
2943                 /* Nothing to process */
2944                 break;
2945         default:
2946                 break;
2947         }
2948 }
2949
2950 static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2951                                   struct l2cap_ctrl *control,
2952                                   struct sk_buff_head *skbs, u8 event)
2953 {
2954         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2955                event);
2956
2957         switch (event) {
2958         case L2CAP_EV_DATA_REQUEST:
2959                 if (chan->tx_send_head == NULL)
2960                         chan->tx_send_head = skb_peek(skbs);
2961                 /* Queue data, but don't send. */
2962                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2963                 break;
2964         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2965                 BT_DBG("Enter LOCAL_BUSY");
2966                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2967
2968                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2969                         /* The SREJ_SENT state must be aborted if we are to
2970                          * enter the LOCAL_BUSY state.
2971                          */
2972                         l2cap_abort_rx_srej_sent(chan);
2973                 }
2974
2975                 l2cap_send_ack(chan);
2976
2977                 break;
2978         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2979                 BT_DBG("Exit LOCAL_BUSY");
2980                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2981
2982                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2983                         struct l2cap_ctrl local_control;
2984                         memset(&local_control, 0, sizeof(local_control));
2985                         local_control.sframe = 1;
2986                         local_control.super = L2CAP_SUPER_RR;
2987                         local_control.poll = 1;
2988                         local_control.reqseq = chan->buffer_seq;
2989                         l2cap_send_sframe(chan, &local_control);
2990
2991                         chan->retry_count = 1;
2992                         __set_monitor_timer(chan);
2993                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2994                 }
2995                 break;
2996         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2997                 l2cap_process_reqseq(chan, control->reqseq);
2998                 fallthrough;
2999
3000         case L2CAP_EV_RECV_FBIT:
3001                 if (control && control->final) {
3002                         __clear_monitor_timer(chan);
3003                         if (chan->unacked_frames > 0)
3004                                 __set_retrans_timer(chan);
3005                         chan->retry_count = 0;
3006                         chan->tx_state = L2CAP_TX_STATE_XMIT;
3007                         BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
3008                 }
3009                 break;
3010         case L2CAP_EV_EXPLICIT_POLL:
3011                 /* Ignore */
3012                 break;
3013         case L2CAP_EV_MONITOR_TO:
3014                 if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
3015                         l2cap_send_rr_or_rnr(chan, 1);
3016                         __set_monitor_timer(chan);
3017                         chan->retry_count++;
3018                 } else {
3019                         l2cap_send_disconn_req(chan, ECONNABORTED);
3020                 }
3021                 break;
3022         default:
3023                 break;
3024         }
3025 }
3026
3027 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
3028                      struct sk_buff_head *skbs, u8 event)
3029 {
3030         BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
3031                chan, control, skbs, event, chan->tx_state);
3032
3033         switch (chan->tx_state) {
3034         case L2CAP_TX_STATE_XMIT:
3035                 l2cap_tx_state_xmit(chan, control, skbs, event);
3036                 break;
3037         case L2CAP_TX_STATE_WAIT_F:
3038                 l2cap_tx_state_wait_f(chan, control, skbs, event);
3039                 break;
3040         default:
3041                 /* Ignore event */
3042                 break;
3043         }
3044 }
3045
3046 static void l2cap_pass_to_tx(struct l2cap_chan *chan,
3047                              struct l2cap_ctrl *control)
3048 {
3049         BT_DBG("chan %p, control %p", chan, control);
3050         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
3051 }
3052
3053 static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
3054                                   struct l2cap_ctrl *control)
3055 {
3056         BT_DBG("chan %p, control %p", chan, control);
3057         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
3058 }
3059
3060 /* Copy frame to all raw sockets on that connection */
3061 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
3062 {
3063         struct sk_buff *nskb;
3064         struct l2cap_chan *chan;
3065
3066         BT_DBG("conn %p", conn);
3067
3068         mutex_lock(&conn->chan_lock);
3069
3070         list_for_each_entry(chan, &conn->chan_l, list) {
3071                 if (chan->chan_type != L2CAP_CHAN_RAW)
3072                         continue;
3073
3074                 /* Don't send frame to the channel it came from */
3075                 if (bt_cb(skb)->l2cap.chan == chan)
3076                         continue;
3077
3078                 nskb = skb_clone(skb, GFP_KERNEL);
3079                 if (!nskb)
3080                         continue;
3081                 if (chan->ops->recv(chan, nskb))
3082                         kfree_skb(nskb);
3083         }
3084
3085         mutex_unlock(&conn->chan_lock);
3086 }
3087
3088 /* ---- L2CAP signalling commands ---- */
3089 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
3090                                        u8 ident, u16 dlen, void *data)
3091 {
3092         struct sk_buff *skb, **frag;
3093         struct l2cap_cmd_hdr *cmd;
3094         struct l2cap_hdr *lh;
3095         int len, count;
3096
3097         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
3098                conn, code, ident, dlen);
3099
3100         if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
3101                 return NULL;
3102
3103         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
3104         count = min_t(unsigned int, conn->mtu, len);
3105
3106         skb = bt_skb_alloc(count, GFP_KERNEL);
3107         if (!skb)
3108                 return NULL;
3109
3110         lh = skb_put(skb, L2CAP_HDR_SIZE);
3111         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
3112
3113         if (conn->hcon->type == LE_LINK)
3114                 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
3115         else
3116                 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
3117
3118         cmd = skb_put(skb, L2CAP_CMD_HDR_SIZE);
3119         cmd->code  = code;
3120         cmd->ident = ident;
3121         cmd->len   = cpu_to_le16(dlen);
3122
3123         if (dlen) {
3124                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
3125                 skb_put_data(skb, data, count);
3126                 data += count;
3127         }
3128
3129         len -= skb->len;
3130
3131         /* Continuation fragments (no L2CAP header) */
3132         frag = &skb_shinfo(skb)->frag_list;
3133         while (len) {
3134                 count = min_t(unsigned int, conn->mtu, len);
3135
3136                 *frag = bt_skb_alloc(count, GFP_KERNEL);
3137                 if (!*frag)
3138                         goto fail;
3139
3140                 skb_put_data(*frag, data, count);
3141
3142                 len  -= count;
3143                 data += count;
3144
3145                 frag = &(*frag)->next;
3146         }
3147
3148         return skb;
3149
3150 fail:
3151         kfree_skb(skb);
3152         return NULL;
3153 }
3154
3155 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
3156                                      unsigned long *val)
3157 {
3158         struct l2cap_conf_opt *opt = *ptr;
3159         int len;
3160
3161         len = L2CAP_CONF_OPT_SIZE + opt->len;
3162         *ptr += len;
3163
3164         *type = opt->type;
3165         *olen = opt->len;
3166
3167         switch (opt->len) {
3168         case 1:
3169                 *val = *((u8 *) opt->val);
3170                 break;
3171
3172         case 2:
3173                 *val = get_unaligned_le16(opt->val);
3174                 break;
3175
3176         case 4:
3177                 *val = get_unaligned_le32(opt->val);
3178                 break;
3179
3180         default:
3181                 *val = (unsigned long) opt->val;
3182                 break;
3183         }
3184
3185         BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
3186         return len;
3187 }
3188
3189 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val, size_t size)
3190 {
3191         struct l2cap_conf_opt *opt = *ptr;
3192
3193         BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
3194
3195         if (size < L2CAP_CONF_OPT_SIZE + len)
3196                 return;
3197
3198         opt->type = type;
3199         opt->len  = len;
3200
3201         switch (len) {
3202         case 1:
3203                 *((u8 *) opt->val)  = val;
3204                 break;
3205
3206         case 2:
3207                 put_unaligned_le16(val, opt->val);
3208                 break;
3209
3210         case 4:
3211                 put_unaligned_le32(val, opt->val);
3212                 break;
3213
3214         default:
3215                 memcpy(opt->val, (void *) val, len);
3216                 break;
3217         }
3218
3219         *ptr += L2CAP_CONF_OPT_SIZE + len;
3220 }
3221
3222 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan, size_t size)
3223 {
3224         struct l2cap_conf_efs efs;
3225
3226         switch (chan->mode) {
3227         case L2CAP_MODE_ERTM:
3228                 efs.id          = chan->local_id;
3229                 efs.stype       = chan->local_stype;
3230                 efs.msdu        = cpu_to_le16(chan->local_msdu);
3231                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3232                 efs.acc_lat     = cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
3233                 efs.flush_to    = cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO);
3234                 break;
3235
3236         case L2CAP_MODE_STREAMING:
3237                 efs.id          = 1;
3238                 efs.stype       = L2CAP_SERV_BESTEFFORT;
3239                 efs.msdu        = cpu_to_le16(chan->local_msdu);
3240                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
3241                 efs.acc_lat     = 0;
3242                 efs.flush_to    = 0;
3243                 break;
3244
3245         default:
3246                 return;
3247         }
3248
3249         l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
3250                            (unsigned long) &efs, size);
3251 }
3252
3253 static void l2cap_ack_timeout(struct work_struct *work)
3254 {
3255         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
3256                                                ack_timer.work);
3257         u16 frames_to_ack;
3258
3259         BT_DBG("chan %p", chan);
3260
3261         l2cap_chan_lock(chan);
3262
3263         frames_to_ack = __seq_offset(chan, chan->buffer_seq,
3264                                      chan->last_acked_seq);
3265
3266         if (frames_to_ack)
3267                 l2cap_send_rr_or_rnr(chan, 0);
3268
3269         l2cap_chan_unlock(chan);
3270         l2cap_chan_put(chan);
3271 }
3272
3273 int l2cap_ertm_init(struct l2cap_chan *chan)
3274 {
3275         int err;
3276
3277         chan->next_tx_seq = 0;
3278         chan->expected_tx_seq = 0;
3279         chan->expected_ack_seq = 0;
3280         chan->unacked_frames = 0;
3281         chan->buffer_seq = 0;
3282         chan->frames_sent = 0;
3283         chan->last_acked_seq = 0;
3284         chan->sdu = NULL;
3285         chan->sdu_last_frag = NULL;
3286         chan->sdu_len = 0;
3287
3288         skb_queue_head_init(&chan->tx_q);
3289
3290         chan->local_amp_id = AMP_ID_BREDR;
3291         chan->move_id = AMP_ID_BREDR;
3292         chan->move_state = L2CAP_MOVE_STABLE;
3293         chan->move_role = L2CAP_MOVE_ROLE_NONE;
3294
3295         if (chan->mode != L2CAP_MODE_ERTM)
3296                 return 0;
3297
3298         chan->rx_state = L2CAP_RX_STATE_RECV;
3299         chan->tx_state = L2CAP_TX_STATE_XMIT;
3300
3301         skb_queue_head_init(&chan->srej_q);
3302
3303         err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
3304         if (err < 0)
3305                 return err;
3306
3307         err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
3308         if (err < 0)
3309                 l2cap_seq_list_free(&chan->srej_list);
3310
3311         return err;
3312 }
3313
3314 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
3315 {
3316         switch (mode) {
3317         case L2CAP_MODE_STREAMING:
3318         case L2CAP_MODE_ERTM:
3319                 if (l2cap_mode_supported(mode, remote_feat_mask))
3320                         return mode;
3321                 fallthrough;
3322         default:
3323                 return L2CAP_MODE_BASIC;
3324         }
3325 }
3326
3327 static inline bool __l2cap_ews_supported(struct l2cap_conn *conn)
3328 {
3329         return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3330                 (conn->feat_mask & L2CAP_FEAT_EXT_WINDOW));
3331 }
3332
3333 static inline bool __l2cap_efs_supported(struct l2cap_conn *conn)
3334 {
3335         return ((conn->local_fixed_chan & L2CAP_FC_A2MP) &&
3336                 (conn->feat_mask & L2CAP_FEAT_EXT_FLOW));
3337 }
3338
3339 static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan,
3340                                       struct l2cap_conf_rfc *rfc)
3341 {
3342         if (chan->local_amp_id != AMP_ID_BREDR && chan->hs_hcon) {
3343                 u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to;
3344
3345                 /* Class 1 devices have must have ERTM timeouts
3346                  * exceeding the Link Supervision Timeout.  The
3347                  * default Link Supervision Timeout for AMP
3348                  * controllers is 10 seconds.
3349                  *
3350                  * Class 1 devices use 0xffffffff for their
3351                  * best-effort flush timeout, so the clamping logic
3352                  * will result in a timeout that meets the above
3353                  * requirement.  ERTM timeouts are 16-bit values, so
3354                  * the maximum timeout is 65.535 seconds.
3355                  */
3356
3357                 /* Convert timeout to milliseconds and round */
3358                 ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000);
3359
3360                 /* This is the recommended formula for class 2 devices
3361                  * that start ERTM timers when packets are sent to the
3362                  * controller.
3363                  */
3364                 ertm_to = 3 * ertm_to + 500;
3365
3366                 if (ertm_to > 0xffff)
3367                         ertm_to = 0xffff;
3368
3369                 rfc->retrans_timeout = cpu_to_le16((u16) ertm_to);
3370                 rfc->monitor_timeout = rfc->retrans_timeout;
3371         } else {
3372                 rfc->retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3373                 rfc->monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3374         }
3375 }
3376
3377 static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
3378 {
3379         if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
3380             __l2cap_ews_supported(chan->conn)) {
3381                 /* use extended control field */
3382                 set_bit(FLAG_EXT_CTRL, &chan->flags);
3383                 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3384         } else {
3385                 chan->tx_win = min_t(u16, chan->tx_win,
3386                                      L2CAP_DEFAULT_TX_WINDOW);
3387                 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
3388         }
3389         chan->ack_win = chan->tx_win;
3390 }
3391
3392 static void l2cap_mtu_auto(struct l2cap_chan *chan)
3393 {
3394         struct hci_conn *conn = chan->conn->hcon;
3395
3396         chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3397
3398         /* The 2-DH1 packet has between 2 and 56 information bytes
3399          * (including the 2-byte payload header)
3400          */
3401         if (!(conn->pkt_type & HCI_2DH1))
3402                 chan->imtu = 54;
3403
3404         /* The 3-DH1 packet has between 2 and 85 information bytes
3405          * (including the 2-byte payload header)
3406          */
3407         if (!(conn->pkt_type & HCI_3DH1))
3408                 chan->imtu = 83;
3409
3410         /* The 2-DH3 packet has between 2 and 369 information bytes
3411          * (including the 2-byte payload header)
3412          */
3413         if (!(conn->pkt_type & HCI_2DH3))
3414                 chan->imtu = 367;
3415
3416         /* The 3-DH3 packet has between 2 and 554 information bytes
3417          * (including the 2-byte payload header)
3418          */
3419         if (!(conn->pkt_type & HCI_3DH3))
3420                 chan->imtu = 552;
3421
3422         /* The 2-DH5 packet has between 2 and 681 information bytes
3423          * (including the 2-byte payload header)
3424          */
3425         if (!(conn->pkt_type & HCI_2DH5))
3426                 chan->imtu = 679;
3427
3428         /* The 3-DH5 packet has between 2 and 1023 information bytes
3429          * (including the 2-byte payload header)
3430          */
3431         if (!(conn->pkt_type & HCI_3DH5))
3432                 chan->imtu = 1021;
3433 }
3434
3435 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3436 {
3437         struct l2cap_conf_req *req = data;
3438         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
3439         void *ptr = req->data;
3440         void *endptr = data + data_size;
3441         u16 size;
3442
3443         BT_DBG("chan %p", chan);
3444
3445         if (chan->num_conf_req || chan->num_conf_rsp)
3446                 goto done;
3447
3448         switch (chan->mode) {
3449         case L2CAP_MODE_STREAMING:
3450         case L2CAP_MODE_ERTM:
3451                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
3452                         break;
3453
3454                 if (__l2cap_efs_supported(chan->conn))
3455                         set_bit(FLAG_EFS_ENABLE, &chan->flags);
3456
3457                 fallthrough;
3458         default:
3459                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
3460                 break;
3461         }
3462
3463 done:
3464         if (chan->imtu != L2CAP_DEFAULT_MTU) {
3465                 if (!chan->imtu)
3466                         l2cap_mtu_auto(chan);
3467                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3468                                    endptr - ptr);
3469         }
3470
3471         switch (chan->mode) {
3472         case L2CAP_MODE_BASIC:
3473                 if (disable_ertm)
3474                         break;
3475
3476                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
3477                     !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
3478                         break;
3479
3480                 rfc.mode            = L2CAP_MODE_BASIC;
3481                 rfc.txwin_size      = 0;
3482                 rfc.max_transmit    = 0;
3483                 rfc.retrans_timeout = 0;
3484                 rfc.monitor_timeout = 0;
3485                 rfc.max_pdu_size    = 0;
3486
3487                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3488                                    (unsigned long) &rfc, endptr - ptr);
3489                 break;
3490
3491         case L2CAP_MODE_ERTM:
3492                 rfc.mode            = L2CAP_MODE_ERTM;
3493                 rfc.max_transmit    = chan->max_tx;
3494
3495                 __l2cap_set_ertm_timeouts(chan, &rfc);
3496
3497                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3498                              L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3499                              L2CAP_FCS_SIZE);
3500                 rfc.max_pdu_size = cpu_to_le16(size);
3501
3502                 l2cap_txwin_setup(chan);
3503
3504                 rfc.txwin_size = min_t(u16, chan->tx_win,
3505                                        L2CAP_DEFAULT_TX_WINDOW);
3506
3507                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3508                                    (unsigned long) &rfc, endptr - ptr);
3509
3510                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3511                         l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3512
3513                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3514                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3515                                            chan->tx_win, endptr - ptr);
3516
3517                 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3518                         if (chan->fcs == L2CAP_FCS_NONE ||
3519                             test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3520                                 chan->fcs = L2CAP_FCS_NONE;
3521                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3522                                                    chan->fcs, endptr - ptr);
3523                         }
3524                 break;
3525
3526         case L2CAP_MODE_STREAMING:
3527                 l2cap_txwin_setup(chan);
3528                 rfc.mode            = L2CAP_MODE_STREAMING;
3529                 rfc.txwin_size      = 0;
3530                 rfc.max_transmit    = 0;
3531                 rfc.retrans_timeout = 0;
3532                 rfc.monitor_timeout = 0;
3533
3534                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3535                              L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3536                              L2CAP_FCS_SIZE);
3537                 rfc.max_pdu_size = cpu_to_le16(size);
3538
3539                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3540                                    (unsigned long) &rfc, endptr - ptr);
3541
3542                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3543                         l2cap_add_opt_efs(&ptr, chan, endptr - ptr);
3544
3545                 if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3546                         if (chan->fcs == L2CAP_FCS_NONE ||
3547                             test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3548                                 chan->fcs = L2CAP_FCS_NONE;
3549                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3550                                                    chan->fcs, endptr - ptr);
3551                         }
3552                 break;
3553         }
3554
3555         req->dcid  = cpu_to_le16(chan->dcid);
3556         req->flags = cpu_to_le16(0);
3557
3558         return ptr - data;
3559 }
3560
3561 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data, size_t data_size)
3562 {
3563         struct l2cap_conf_rsp *rsp = data;
3564         void *ptr = rsp->data;
3565         void *endptr = data + data_size;
3566         void *req = chan->conf_req;
3567         int len = chan->conf_len;
3568         int type, hint, olen;
3569         unsigned long val;
3570         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3571         struct l2cap_conf_efs efs;
3572         u8 remote_efs = 0;
3573         u16 mtu = L2CAP_DEFAULT_MTU;
3574         u16 result = L2CAP_CONF_SUCCESS;
3575         u16 size;
3576
3577         BT_DBG("chan %p", chan);
3578
3579         while (len >= L2CAP_CONF_OPT_SIZE) {
3580                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
3581                 if (len < 0)
3582                         break;
3583
3584                 hint  = type & L2CAP_CONF_HINT;
3585                 type &= L2CAP_CONF_MASK;
3586
3587                 switch (type) {
3588                 case L2CAP_CONF_MTU:
3589                         if (olen != 2)
3590                                 break;
3591                         mtu = val;
3592                         break;
3593
3594                 case L2CAP_CONF_FLUSH_TO:
3595                         if (olen != 2)
3596                                 break;
3597                         chan->flush_to = val;
3598                         break;
3599
3600                 case L2CAP_CONF_QOS:
3601                         break;
3602
3603                 case L2CAP_CONF_RFC:
3604                         if (olen != sizeof(rfc))
3605                                 break;
3606                         memcpy(&rfc, (void *) val, olen);
3607                         break;
3608
3609                 case L2CAP_CONF_FCS:
3610                         if (olen != 1)
3611                                 break;
3612                         if (val == L2CAP_FCS_NONE)
3613                                 set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3614                         break;
3615
3616                 case L2CAP_CONF_EFS:
3617                         if (olen != sizeof(efs))
3618                                 break;
3619                         remote_efs = 1;
3620                         memcpy(&efs, (void *) val, olen);
3621                         break;
3622
3623                 case L2CAP_CONF_EWS:
3624                         if (olen != 2)
3625                                 break;
3626                         if (!(chan->conn->local_fixed_chan & L2CAP_FC_A2MP))
3627                                 return -ECONNREFUSED;
3628                         set_bit(FLAG_EXT_CTRL, &chan->flags);
3629                         set_bit(CONF_EWS_RECV, &chan->conf_state);
3630                         chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3631                         chan->remote_tx_win = val;
3632                         break;
3633
3634                 default:
3635                         if (hint)
3636                                 break;
3637                         result = L2CAP_CONF_UNKNOWN;
3638                         l2cap_add_conf_opt(&ptr, (u8)type, sizeof(u8), type, endptr - ptr);
3639                         break;
3640                 }
3641         }
3642
3643         if (chan->num_conf_rsp || chan->num_conf_req > 1)
3644                 goto done;
3645
3646         switch (chan->mode) {
3647         case L2CAP_MODE_STREAMING:
3648         case L2CAP_MODE_ERTM:
3649                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3650                         chan->mode = l2cap_select_mode(rfc.mode,
3651                                                        chan->conn->feat_mask);
3652                         break;
3653                 }
3654
3655                 if (remote_efs) {
3656                         if (__l2cap_efs_supported(chan->conn))
3657                                 set_bit(FLAG_EFS_ENABLE, &chan->flags);
3658                         else
3659                                 return -ECONNREFUSED;
3660                 }
3661
3662                 if (chan->mode != rfc.mode)
3663                         return -ECONNREFUSED;
3664
3665                 break;
3666         }
3667
3668 done:
3669         if (chan->mode != rfc.mode) {
3670                 result = L2CAP_CONF_UNACCEPT;
3671                 rfc.mode = chan->mode;
3672
3673                 if (chan->num_conf_rsp == 1)
3674                         return -ECONNREFUSED;
3675
3676                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3677                                    (unsigned long) &rfc, endptr - ptr);
3678         }
3679
3680         if (result == L2CAP_CONF_SUCCESS) {
3681                 /* Configure output options and let the other side know
3682                  * which ones we don't like. */
3683
3684                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
3685                         result = L2CAP_CONF_UNACCEPT;
3686                 else {
3687                         chan->omtu = mtu;
3688                         set_bit(CONF_MTU_DONE, &chan->conf_state);
3689                 }
3690                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu, endptr - ptr);
3691
3692                 if (remote_efs) {
3693                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3694                             efs.stype != L2CAP_SERV_NOTRAFIC &&
3695                             efs.stype != chan->local_stype) {
3696
3697                                 result = L2CAP_CONF_UNACCEPT;
3698
3699                                 if (chan->num_conf_req >= 1)
3700                                         return -ECONNREFUSED;
3701
3702                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3703                                                    sizeof(efs),
3704                                                    (unsigned long) &efs, endptr - ptr);
3705                         } else {
3706                                 /* Send PENDING Conf Rsp */
3707                                 result = L2CAP_CONF_PENDING;
3708                                 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3709                         }
3710                 }
3711
3712                 switch (rfc.mode) {
3713                 case L2CAP_MODE_BASIC:
3714                         chan->fcs = L2CAP_FCS_NONE;
3715                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3716                         break;
3717
3718                 case L2CAP_MODE_ERTM:
3719                         if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3720                                 chan->remote_tx_win = rfc.txwin_size;
3721                         else
3722                                 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3723
3724                         chan->remote_max_tx = rfc.max_transmit;
3725
3726                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3727                                      chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3728                                      L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3729                         rfc.max_pdu_size = cpu_to_le16(size);
3730                         chan->remote_mps = size;
3731
3732                         __l2cap_set_ertm_timeouts(chan, &rfc);
3733
3734                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3735
3736                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3737                                            sizeof(rfc), (unsigned long) &rfc, endptr - ptr);
3738
3739                         if (remote_efs &&
3740                             test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3741                                 chan->remote_id = efs.id;
3742                                 chan->remote_stype = efs.stype;
3743                                 chan->remote_msdu = le16_to_cpu(efs.msdu);
3744                                 chan->remote_flush_to =
3745                                         le32_to_cpu(efs.flush_to);
3746                                 chan->remote_acc_lat =
3747                                         le32_to_cpu(efs.acc_lat);
3748                                 chan->remote_sdu_itime =
3749                                         le32_to_cpu(efs.sdu_itime);
3750                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3751                                                    sizeof(efs),
3752                                                    (unsigned long) &efs, endptr - ptr);
3753                         }
3754                         break;
3755
3756                 case L2CAP_MODE_STREAMING:
3757                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3758                                      chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3759                                      L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3760                         rfc.max_pdu_size = cpu_to_le16(size);
3761                         chan->remote_mps = size;
3762
3763                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3764
3765                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3766                                            (unsigned long) &rfc, endptr - ptr);
3767
3768                         break;
3769
3770                 default:
3771                         result = L2CAP_CONF_UNACCEPT;
3772
3773                         memset(&rfc, 0, sizeof(rfc));
3774                         rfc.mode = chan->mode;
3775                 }
3776
3777                 if (result == L2CAP_CONF_SUCCESS)
3778                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3779         }
3780         rsp->scid   = cpu_to_le16(chan->dcid);
3781         rsp->result = cpu_to_le16(result);
3782         rsp->flags  = cpu_to_le16(0);
3783
3784         return ptr - data;
3785 }
3786
3787 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3788                                 void *data, size_t size, u16 *result)
3789 {
3790         struct l2cap_conf_req *req = data;
3791         void *ptr = req->data;
3792         void *endptr = data + size;
3793         int type, olen;
3794         unsigned long val;
3795         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3796         struct l2cap_conf_efs efs;
3797
3798         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3799
3800         while (len >= L2CAP_CONF_OPT_SIZE) {
3801                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3802                 if (len < 0)
3803                         break;
3804
3805                 switch (type) {
3806                 case L2CAP_CONF_MTU:
3807                         if (olen != 2)
3808                                 break;
3809                         if (val < L2CAP_DEFAULT_MIN_MTU) {
3810                                 *result = L2CAP_CONF_UNACCEPT;
3811                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3812                         } else
3813                                 chan->imtu = val;
3814                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu,
3815                                            endptr - ptr);
3816                         break;
3817
3818                 case L2CAP_CONF_FLUSH_TO:
3819                         if (olen != 2)
3820                                 break;
3821                         chan->flush_to = val;
3822                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO, 2,
3823                                            chan->flush_to, endptr - ptr);
3824                         break;
3825
3826                 case L2CAP_CONF_RFC:
3827                         if (olen != sizeof(rfc))
3828                                 break;
3829                         memcpy(&rfc, (void *)val, olen);
3830                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3831                             rfc.mode != chan->mode)
3832                                 return -ECONNREFUSED;
3833                         chan->fcs = 0;
3834                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3835                                            (unsigned long) &rfc, endptr - ptr);
3836                         break;
3837
3838                 case L2CAP_CONF_EWS:
3839                         if (olen != 2)
3840                                 break;
3841                         chan->ack_win = min_t(u16, val, chan->ack_win);
3842                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3843                                            chan->tx_win, endptr - ptr);
3844                         break;
3845
3846                 case L2CAP_CONF_EFS:
3847                         if (olen != sizeof(efs))
3848                                 break;
3849                         memcpy(&efs, (void *)val, olen);
3850                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3851                             efs.stype != L2CAP_SERV_NOTRAFIC &&
3852                             efs.stype != chan->local_stype)
3853                                 return -ECONNREFUSED;
3854                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3855                                            (unsigned long) &efs, endptr - ptr);
3856                         break;
3857
3858                 case L2CAP_CONF_FCS:
3859                         if (olen != 1)
3860                                 break;
3861                         if (*result == L2CAP_CONF_PENDING)
3862                                 if (val == L2CAP_FCS_NONE)
3863                                         set_bit(CONF_RECV_NO_FCS,
3864                                                 &chan->conf_state);
3865                         break;
3866                 }
3867         }
3868
3869         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3870                 return -ECONNREFUSED;
3871
3872         chan->mode = rfc.mode;
3873
3874         if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3875                 switch (rfc.mode) {
3876                 case L2CAP_MODE_ERTM:
3877                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3878                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3879                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3880                         if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3881                                 chan->ack_win = min_t(u16, chan->ack_win,
3882                                                       rfc.txwin_size);
3883
3884                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3885                                 chan->local_msdu = le16_to_cpu(efs.msdu);
3886                                 chan->local_sdu_itime =
3887                                         le32_to_cpu(efs.sdu_itime);
3888                                 chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3889                                 chan->local_flush_to =
3890                                         le32_to_cpu(efs.flush_to);
3891                         }
3892                         break;
3893
3894                 case L2CAP_MODE_STREAMING:
3895                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3896                 }
3897         }
3898
3899         req->dcid   = cpu_to_le16(chan->dcid);
3900         req->flags  = cpu_to_le16(0);
3901
3902         return ptr - data;
3903 }
3904
3905 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3906                                 u16 result, u16 flags)
3907 {
3908         struct l2cap_conf_rsp *rsp = data;
3909         void *ptr = rsp->data;
3910
3911         BT_DBG("chan %p", chan);
3912
3913         rsp->scid   = cpu_to_le16(chan->dcid);
3914         rsp->result = cpu_to_le16(result);
3915         rsp->flags  = cpu_to_le16(flags);
3916
3917         return ptr - data;
3918 }
3919
3920 void __l2cap_le_connect_rsp_defer(struct l2cap_chan *chan)
3921 {
3922         struct l2cap_le_conn_rsp rsp;
3923         struct l2cap_conn *conn = chan->conn;
3924
3925         BT_DBG("chan %p", chan);
3926
3927         rsp.dcid    = cpu_to_le16(chan->scid);
3928         rsp.mtu     = cpu_to_le16(chan->imtu);
3929         rsp.mps     = cpu_to_le16(chan->mps);
3930         rsp.credits = cpu_to_le16(chan->rx_credits);
3931         rsp.result  = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
3932
3933         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CONN_RSP, sizeof(rsp),
3934                        &rsp);
3935 }
3936
3937 static void l2cap_ecred_list_defer(struct l2cap_chan *chan, void *data)
3938 {
3939         int *result = data;
3940
3941         if (*result || test_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
3942                 return;
3943
3944         switch (chan->state) {
3945         case BT_CONNECT2:
3946                 /* If channel still pending accept add to result */
3947                 (*result)++;
3948                 return;
3949         case BT_CONNECTED:
3950                 return;
3951         default:
3952                 /* If not connected or pending accept it has been refused */
3953                 *result = -ECONNREFUSED;
3954                 return;
3955         }
3956 }
3957
3958 struct l2cap_ecred_rsp_data {
3959         struct {
3960                 struct l2cap_ecred_conn_rsp rsp;
3961                 __le16 scid[L2CAP_ECRED_MAX_CID];
3962         } __packed pdu;
3963         int count;
3964 };
3965
3966 static void l2cap_ecred_rsp_defer(struct l2cap_chan *chan, void *data)
3967 {
3968         struct l2cap_ecred_rsp_data *rsp = data;
3969
3970         if (test_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags))
3971                 return;
3972
3973         /* Reset ident so only one response is sent */
3974         chan->ident = 0;
3975
3976         /* Include all channels pending with the same ident */
3977         if (!rsp->pdu.rsp.result)
3978                 rsp->pdu.rsp.dcid[rsp->count++] = cpu_to_le16(chan->scid);
3979         else
3980                 l2cap_chan_del(chan, ECONNRESET);
3981 }
3982
3983 void __l2cap_ecred_conn_rsp_defer(struct l2cap_chan *chan)
3984 {
3985         struct l2cap_conn *conn = chan->conn;
3986         struct l2cap_ecred_rsp_data data;
3987         u16 id = chan->ident;
3988         int result = 0;
3989
3990         if (!id)
3991                 return;
3992
3993         BT_DBG("chan %p id %d", chan, id);
3994
3995         memset(&data, 0, sizeof(data));
3996
3997         data.pdu.rsp.mtu     = cpu_to_le16(chan->imtu);
3998         data.pdu.rsp.mps     = cpu_to_le16(chan->mps);
3999         data.pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
4000         data.pdu.rsp.result  = cpu_to_le16(L2CAP_CR_LE_SUCCESS);
4001
4002         /* Verify that all channels are ready */
4003         __l2cap_chan_list_id(conn, id, l2cap_ecred_list_defer, &result);
4004
4005         if (result > 0)
4006                 return;
4007
4008         if (result < 0)
4009                 data.pdu.rsp.result = cpu_to_le16(L2CAP_CR_LE_AUTHORIZATION);
4010
4011         /* Build response */
4012         __l2cap_chan_list_id(conn, id, l2cap_ecred_rsp_defer, &data);
4013
4014         l2cap_send_cmd(conn, id, L2CAP_ECRED_CONN_RSP,
4015                        sizeof(data.pdu.rsp) + (data.count * sizeof(__le16)),
4016                        &data.pdu);
4017 }
4018
4019 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
4020 {
4021         struct l2cap_conn_rsp rsp;
4022         struct l2cap_conn *conn = chan->conn;
4023         u8 buf[128];
4024         u8 rsp_code;
4025
4026         rsp.scid   = cpu_to_le16(chan->dcid);
4027         rsp.dcid   = cpu_to_le16(chan->scid);
4028         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
4029         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4030
4031         if (chan->hs_hcon)
4032                 rsp_code = L2CAP_CREATE_CHAN_RSP;
4033         else
4034                 rsp_code = L2CAP_CONN_RSP;
4035
4036         BT_DBG("chan %p rsp_code %u", chan, rsp_code);
4037
4038         l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
4039
4040         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4041                 return;
4042
4043         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4044                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4045         chan->num_conf_req++;
4046 }
4047
4048 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
4049 {
4050         int type, olen;
4051         unsigned long val;
4052         /* Use sane default values in case a misbehaving remote device
4053          * did not send an RFC or extended window size option.
4054          */
4055         u16 txwin_ext = chan->ack_win;
4056         struct l2cap_conf_rfc rfc = {
4057                 .mode = chan->mode,
4058                 .retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
4059                 .monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
4060                 .max_pdu_size = cpu_to_le16(chan->imtu),
4061                 .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
4062         };
4063
4064         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
4065
4066         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
4067                 return;
4068
4069         while (len >= L2CAP_CONF_OPT_SIZE) {
4070                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
4071                 if (len < 0)
4072                         break;
4073
4074                 switch (type) {
4075                 case L2CAP_CONF_RFC:
4076                         if (olen != sizeof(rfc))
4077                                 break;
4078                         memcpy(&rfc, (void *)val, olen);
4079                         break;
4080                 case L2CAP_CONF_EWS:
4081                         if (olen != 2)
4082                                 break;
4083                         txwin_ext = val;
4084                         break;
4085                 }
4086         }
4087
4088         switch (rfc.mode) {
4089         case L2CAP_MODE_ERTM:
4090                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
4091                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
4092                 chan->mps = le16_to_cpu(rfc.max_pdu_size);
4093                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
4094                         chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
4095                 else
4096                         chan->ack_win = min_t(u16, chan->ack_win,
4097                                               rfc.txwin_size);
4098                 break;
4099         case L2CAP_MODE_STREAMING:
4100                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
4101         }
4102 }
4103
4104 static inline int l2cap_command_rej(struct l2cap_conn *conn,
4105                                     struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4106                                     u8 *data)
4107 {
4108         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
4109
4110         if (cmd_len < sizeof(*rej))
4111                 return -EPROTO;
4112
4113         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
4114                 return 0;
4115
4116         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
4117             cmd->ident == conn->info_ident) {
4118                 cancel_delayed_work(&conn->info_timer);
4119
4120                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4121                 conn->info_ident = 0;
4122
4123                 l2cap_conn_start(conn);
4124         }
4125
4126         return 0;
4127 }
4128
4129 static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
4130                                         struct l2cap_cmd_hdr *cmd,
4131                                         u8 *data, u8 rsp_code, u8 amp_id)
4132 {
4133         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
4134         struct l2cap_conn_rsp rsp;
4135         struct l2cap_chan *chan = NULL, *pchan;
4136         int result, status = L2CAP_CS_NO_INFO;
4137
4138         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
4139         __le16 psm = req->psm;
4140
4141         BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
4142
4143         /* Check if we have socket listening on psm */
4144         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
4145                                          &conn->hcon->dst, ACL_LINK);
4146         if (!pchan) {
4147                 result = L2CAP_CR_BAD_PSM;
4148                 goto sendresp;
4149         }
4150
4151         mutex_lock(&conn->chan_lock);
4152         l2cap_chan_lock(pchan);
4153
4154         /* Check if the ACL is secure enough (if not SDP) */
4155         if (psm != cpu_to_le16(L2CAP_PSM_SDP) &&
4156             !hci_conn_check_link_mode(conn->hcon)) {
4157                 conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
4158                 result = L2CAP_CR_SEC_BLOCK;
4159                 goto response;
4160         }
4161
4162         result = L2CAP_CR_NO_MEM;
4163
4164         /* Check for valid dynamic CID range (as per Erratum 3253) */
4165         if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_DYN_END) {
4166                 result = L2CAP_CR_INVALID_SCID;
4167                 goto response;
4168         }
4169
4170         /* Check if we already have channel with that dcid */
4171         if (__l2cap_get_chan_by_dcid(conn, scid)) {
4172                 result = L2CAP_CR_SCID_IN_USE;
4173                 goto response;
4174         }
4175
4176         chan = pchan->ops->new_connection(pchan);
4177         if (!chan)
4178                 goto response;
4179
4180         /* For certain devices (ex: HID mouse), support for authentication,
4181          * pairing and bonding is optional. For such devices, inorder to avoid
4182          * the ACL alive for too long after L2CAP disconnection, reset the ACL
4183          * disc_timeout back to HCI_DISCONN_TIMEOUT during L2CAP connect.
4184          */
4185         conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4186
4187         bacpy(&chan->src, &conn->hcon->src);
4188         bacpy(&chan->dst, &conn->hcon->dst);
4189         chan->src_type = bdaddr_src_type(conn->hcon);
4190         chan->dst_type = bdaddr_dst_type(conn->hcon);
4191         chan->psm  = psm;
4192         chan->dcid = scid;
4193         chan->local_amp_id = amp_id;
4194
4195         __l2cap_chan_add(conn, chan);
4196
4197         dcid = chan->scid;
4198
4199         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
4200
4201         chan->ident = cmd->ident;
4202
4203         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
4204                 if (l2cap_chan_check_security(chan, false)) {
4205                         if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
4206                                 l2cap_state_change(chan, BT_CONNECT2);
4207                                 result = L2CAP_CR_PEND;
4208                                 status = L2CAP_CS_AUTHOR_PEND;
4209                                 chan->ops->defer(chan);
4210                         } else {
4211                                 /* Force pending result for AMP controllers.
4212                                  * The connection will succeed after the
4213                                  * physical link is up.
4214                                  */
4215                                 if (amp_id == AMP_ID_BREDR) {
4216                                         l2cap_state_change(chan, BT_CONFIG);
4217                                         result = L2CAP_CR_SUCCESS;
4218                                 } else {
4219                                         l2cap_state_change(chan, BT_CONNECT2);
4220                                         result = L2CAP_CR_PEND;
4221                                 }
4222                                 status = L2CAP_CS_NO_INFO;
4223                         }
4224                 } else {
4225                         l2cap_state_change(chan, BT_CONNECT2);
4226                         result = L2CAP_CR_PEND;
4227                         status = L2CAP_CS_AUTHEN_PEND;
4228                 }
4229         } else {
4230                 l2cap_state_change(chan, BT_CONNECT2);
4231                 result = L2CAP_CR_PEND;
4232                 status = L2CAP_CS_NO_INFO;
4233         }
4234
4235 response:
4236         l2cap_chan_unlock(pchan);
4237         mutex_unlock(&conn->chan_lock);
4238         l2cap_chan_put(pchan);
4239
4240 sendresp:
4241         rsp.scid   = cpu_to_le16(scid);
4242         rsp.dcid   = cpu_to_le16(dcid);
4243         rsp.result = cpu_to_le16(result);
4244         rsp.status = cpu_to_le16(status);
4245         l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
4246
4247         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
4248                 struct l2cap_info_req info;
4249                 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4250
4251                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
4252                 conn->info_ident = l2cap_get_ident(conn);
4253
4254                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
4255
4256                 l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
4257                                sizeof(info), &info);
4258         }
4259
4260         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
4261             result == L2CAP_CR_SUCCESS) {
4262                 u8 buf[128];
4263                 set_bit(CONF_REQ_SENT, &chan->conf_state);
4264                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4265                                l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4266                 chan->num_conf_req++;
4267         }
4268
4269         return chan;
4270 }
4271
4272 static int l2cap_connect_req(struct l2cap_conn *conn,
4273                              struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
4274 {
4275         struct hci_dev *hdev = conn->hcon->hdev;
4276         struct hci_conn *hcon = conn->hcon;
4277
4278         if (cmd_len < sizeof(struct l2cap_conn_req))
4279                 return -EPROTO;
4280
4281         hci_dev_lock(hdev);
4282         if (hci_dev_test_flag(hdev, HCI_MGMT) &&
4283             !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
4284                 mgmt_device_connected(hdev, hcon, NULL, 0);
4285         hci_dev_unlock(hdev);
4286
4287         l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
4288         return 0;
4289 }
4290
4291 static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
4292                                     struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4293                                     u8 *data)
4294 {
4295         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
4296         u16 scid, dcid, result, status;
4297         struct l2cap_chan *chan;
4298         u8 req[128];
4299         int err;
4300
4301         if (cmd_len < sizeof(*rsp))
4302                 return -EPROTO;
4303
4304         scid   = __le16_to_cpu(rsp->scid);
4305         dcid   = __le16_to_cpu(rsp->dcid);
4306         result = __le16_to_cpu(rsp->result);
4307         status = __le16_to_cpu(rsp->status);
4308
4309         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
4310                dcid, scid, result, status);
4311
4312         mutex_lock(&conn->chan_lock);
4313
4314         if (scid) {
4315                 chan = __l2cap_get_chan_by_scid(conn, scid);
4316                 if (!chan) {
4317                         err = -EBADSLT;
4318                         goto unlock;
4319                 }
4320         } else {
4321                 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
4322                 if (!chan) {
4323                         err = -EBADSLT;
4324                         goto unlock;
4325                 }
4326         }
4327
4328         chan = l2cap_chan_hold_unless_zero(chan);
4329         if (!chan) {
4330                 err = -EBADSLT;
4331                 goto unlock;
4332         }
4333
4334         err = 0;
4335
4336         l2cap_chan_lock(chan);
4337
4338         switch (result) {
4339         case L2CAP_CR_SUCCESS:
4340                 l2cap_state_change(chan, BT_CONFIG);
4341                 chan->ident = 0;
4342                 chan->dcid = dcid;
4343                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
4344
4345                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
4346                         break;
4347
4348                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4349                                l2cap_build_conf_req(chan, req, sizeof(req)), req);
4350                 chan->num_conf_req++;
4351                 break;
4352
4353         case L2CAP_CR_PEND:
4354                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4355                 break;
4356
4357         default:
4358                 l2cap_chan_del(chan, ECONNREFUSED);
4359                 break;
4360         }
4361
4362         l2cap_chan_unlock(chan);
4363         l2cap_chan_put(chan);
4364
4365 unlock:
4366         mutex_unlock(&conn->chan_lock);
4367
4368         return err;
4369 }
4370
4371 static inline void set_default_fcs(struct l2cap_chan *chan)
4372 {
4373         /* FCS is enabled only in ERTM or streaming mode, if one or both
4374          * sides request it.
4375          */
4376         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
4377                 chan->fcs = L2CAP_FCS_NONE;
4378         else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
4379                 chan->fcs = L2CAP_FCS_CRC16;
4380 }
4381
4382 static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
4383                                     u8 ident, u16 flags)
4384 {
4385         struct l2cap_conn *conn = chan->conn;
4386
4387         BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
4388                flags);
4389
4390         clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
4391         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
4392
4393         l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
4394                        l2cap_build_conf_rsp(chan, data,
4395                                             L2CAP_CONF_SUCCESS, flags), data);
4396 }
4397
4398 static void cmd_reject_invalid_cid(struct l2cap_conn *conn, u8 ident,
4399                                    u16 scid, u16 dcid)
4400 {
4401         struct l2cap_cmd_rej_cid rej;
4402
4403         rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
4404         rej.scid = __cpu_to_le16(scid);
4405         rej.dcid = __cpu_to_le16(dcid);
4406
4407         l2cap_send_cmd(conn, ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4408 }
4409
4410 static inline int l2cap_config_req(struct l2cap_conn *conn,
4411                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4412                                    u8 *data)
4413 {
4414         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
4415         u16 dcid, flags;
4416         u8 rsp[64];
4417         struct l2cap_chan *chan;
4418         int len, err = 0;
4419
4420         if (cmd_len < sizeof(*req))
4421                 return -EPROTO;
4422
4423         dcid  = __le16_to_cpu(req->dcid);
4424         flags = __le16_to_cpu(req->flags);
4425
4426         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
4427
4428         chan = l2cap_get_chan_by_scid(conn, dcid);
4429         if (!chan) {
4430                 cmd_reject_invalid_cid(conn, cmd->ident, dcid, 0);
4431                 return 0;
4432         }
4433
4434         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2 &&
4435             chan->state != BT_CONNECTED) {
4436                 cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4437                                        chan->dcid);
4438                 goto unlock;
4439         }
4440
4441         /* Reject if config buffer is too small. */
4442         len = cmd_len - sizeof(*req);
4443         if (chan->conf_len + len > sizeof(chan->conf_req)) {
4444                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4445                                l2cap_build_conf_rsp(chan, rsp,
4446                                L2CAP_CONF_REJECT, flags), rsp);
4447                 goto unlock;
4448         }
4449
4450         /* Store config. */
4451         memcpy(chan->conf_req + chan->conf_len, req->data, len);
4452         chan->conf_len += len;
4453
4454         if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4455                 /* Incomplete config. Send empty response. */
4456                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4457                                l2cap_build_conf_rsp(chan, rsp,
4458                                L2CAP_CONF_SUCCESS, flags), rsp);
4459                 goto unlock;
4460         }
4461
4462         /* Complete config. */
4463         len = l2cap_parse_conf_req(chan, rsp, sizeof(rsp));
4464         if (len < 0) {
4465                 l2cap_send_disconn_req(chan, ECONNRESET);
4466                 goto unlock;
4467         }
4468
4469         chan->ident = cmd->ident;
4470         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4471         if (chan->num_conf_rsp < L2CAP_CONF_MAX_CONF_RSP)
4472                 chan->num_conf_rsp++;
4473
4474         /* Reset config buffer. */
4475         chan->conf_len = 0;
4476
4477         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4478                 goto unlock;
4479
4480         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4481                 set_default_fcs(chan);
4482
4483                 if (chan->mode == L2CAP_MODE_ERTM ||
4484                     chan->mode == L2CAP_MODE_STREAMING)
4485                         err = l2cap_ertm_init(chan);
4486
4487                 if (err < 0)
4488                         l2cap_send_disconn_req(chan, -err);
4489                 else
4490                         l2cap_chan_ready(chan);
4491
4492                 goto unlock;
4493         }
4494
4495         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4496                 u8 buf[64];
4497                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4498                                l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
4499                 chan->num_conf_req++;
4500         }
4501
4502         /* Got Conf Rsp PENDING from remote side and assume we sent
4503            Conf Rsp PENDING in the code above */
4504         if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4505             test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4506
4507                 /* check compatibility */
4508
4509                 /* Send rsp for BR/EDR channel */
4510                 if (!chan->hs_hcon)
4511                         l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4512                 else
4513                         chan->ident = cmd->ident;
4514         }
4515
4516 unlock:
4517         l2cap_chan_unlock(chan);
4518         l2cap_chan_put(chan);
4519         return err;
4520 }
4521
4522 static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4523                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4524                                    u8 *data)
4525 {
4526         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4527         u16 scid, flags, result;
4528         struct l2cap_chan *chan;
4529         int len = cmd_len - sizeof(*rsp);
4530         int err = 0;
4531
4532         if (cmd_len < sizeof(*rsp))
4533                 return -EPROTO;
4534
4535         scid   = __le16_to_cpu(rsp->scid);
4536         flags  = __le16_to_cpu(rsp->flags);
4537         result = __le16_to_cpu(rsp->result);
4538
4539         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4540                result, len);
4541
4542         chan = l2cap_get_chan_by_scid(conn, scid);
4543         if (!chan)
4544                 return 0;
4545
4546         switch (result) {
4547         case L2CAP_CONF_SUCCESS:
4548                 l2cap_conf_rfc_get(chan, rsp->data, len);
4549                 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4550                 break;
4551
4552         case L2CAP_CONF_PENDING:
4553                 set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4554
4555                 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4556                         char buf[64];
4557
4558                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4559                                                    buf, sizeof(buf), &result);
4560                         if (len < 0) {
4561                                 l2cap_send_disconn_req(chan, ECONNRESET);
4562                                 goto done;
4563                         }
4564
4565                         if (!chan->hs_hcon) {
4566                                 l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4567                                                         0);
4568                         } else {
4569                                 if (l2cap_check_efs(chan)) {
4570                                         amp_create_logical_link(chan);
4571                                         chan->ident = cmd->ident;
4572                                 }
4573                         }
4574                 }
4575                 goto done;
4576
4577         case L2CAP_CONF_UNKNOWN:
4578         case L2CAP_CONF_UNACCEPT:
4579                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4580                         char req[64];
4581
4582                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4583                                 l2cap_send_disconn_req(chan, ECONNRESET);
4584                                 goto done;
4585                         }
4586
4587                         /* throw out any old stored conf requests */
4588                         result = L2CAP_CONF_SUCCESS;
4589                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4590                                                    req, sizeof(req), &result);
4591                         if (len < 0) {
4592                                 l2cap_send_disconn_req(chan, ECONNRESET);
4593                                 goto done;
4594                         }
4595
4596                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
4597                                        L2CAP_CONF_REQ, len, req);
4598                         chan->num_conf_req++;
4599                         if (result != L2CAP_CONF_SUCCESS)
4600                                 goto done;
4601                         break;
4602                 }
4603                 fallthrough;
4604
4605         default:
4606                 l2cap_chan_set_err(chan, ECONNRESET);
4607
4608                 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4609                 l2cap_send_disconn_req(chan, ECONNRESET);
4610                 goto done;
4611         }
4612
4613         if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4614                 goto done;
4615
4616         set_bit(CONF_INPUT_DONE, &chan->conf_state);
4617
4618         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4619                 set_default_fcs(chan);
4620
4621                 if (chan->mode == L2CAP_MODE_ERTM ||
4622                     chan->mode == L2CAP_MODE_STREAMING)
4623                         err = l2cap_ertm_init(chan);
4624
4625                 if (err < 0)
4626                         l2cap_send_disconn_req(chan, -err);
4627                 else
4628                         l2cap_chan_ready(chan);
4629         }
4630
4631 done:
4632         l2cap_chan_unlock(chan);
4633         l2cap_chan_put(chan);
4634         return err;
4635 }
4636
4637 static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4638                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4639                                        u8 *data)
4640 {
4641         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4642         struct l2cap_disconn_rsp rsp;
4643         u16 dcid, scid;
4644         struct l2cap_chan *chan;
4645
4646         if (cmd_len != sizeof(*req))
4647                 return -EPROTO;
4648
4649         scid = __le16_to_cpu(req->scid);
4650         dcid = __le16_to_cpu(req->dcid);
4651
4652         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4653
4654         chan = l2cap_get_chan_by_scid(conn, dcid);
4655         if (!chan) {
4656                 cmd_reject_invalid_cid(conn, cmd->ident, dcid, scid);
4657                 return 0;
4658         }
4659
4660         rsp.dcid = cpu_to_le16(chan->scid);
4661         rsp.scid = cpu_to_le16(chan->dcid);
4662         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4663
4664         chan->ops->set_shutdown(chan);
4665
4666         mutex_lock(&conn->chan_lock);
4667         l2cap_chan_del(chan, ECONNRESET);
4668         mutex_unlock(&conn->chan_lock);
4669
4670         chan->ops->close(chan);
4671
4672         l2cap_chan_unlock(chan);
4673         l2cap_chan_put(chan);
4674
4675         return 0;
4676 }
4677
4678 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4679                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4680                                        u8 *data)
4681 {
4682         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4683         u16 dcid, scid;
4684         struct l2cap_chan *chan;
4685
4686         if (cmd_len != sizeof(*rsp))
4687                 return -EPROTO;
4688
4689         scid = __le16_to_cpu(rsp->scid);
4690         dcid = __le16_to_cpu(rsp->dcid);
4691
4692         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4693
4694         chan = l2cap_get_chan_by_scid(conn, scid);
4695         if (!chan) {
4696                 return 0;
4697         }
4698
4699         if (chan->state != BT_DISCONN) {
4700                 l2cap_chan_unlock(chan);
4701                 l2cap_chan_put(chan);
4702                 return 0;
4703         }
4704
4705         mutex_lock(&conn->chan_lock);
4706         l2cap_chan_del(chan, 0);
4707         mutex_unlock(&conn->chan_lock);
4708
4709         chan->ops->close(chan);
4710
4711         l2cap_chan_unlock(chan);
4712         l2cap_chan_put(chan);
4713
4714         return 0;
4715 }
4716
4717 static inline int l2cap_information_req(struct l2cap_conn *conn,
4718                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4719                                         u8 *data)
4720 {
4721         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4722         u16 type;
4723
4724         if (cmd_len != sizeof(*req))
4725                 return -EPROTO;
4726
4727         type = __le16_to_cpu(req->type);
4728
4729         BT_DBG("type 0x%4.4x", type);
4730
4731         if (type == L2CAP_IT_FEAT_MASK) {
4732                 u8 buf[8];
4733                 u32 feat_mask = l2cap_feat_mask;
4734                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4735                 rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
4736                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4737                 if (!disable_ertm)
4738                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4739                                 | L2CAP_FEAT_FCS;
4740                 if (conn->local_fixed_chan & L2CAP_FC_A2MP)
4741                         feat_mask |= L2CAP_FEAT_EXT_FLOW
4742                                 | L2CAP_FEAT_EXT_WINDOW;
4743
4744                 put_unaligned_le32(feat_mask, rsp->data);
4745                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4746                                buf);
4747         } else if (type == L2CAP_IT_FIXED_CHAN) {
4748                 u8 buf[12];
4749                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4750
4751                 rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4752                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
4753                 rsp->data[0] = conn->local_fixed_chan;
4754                 memset(rsp->data + 1, 0, 7);
4755                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4756                                buf);
4757         } else {
4758                 struct l2cap_info_rsp rsp;
4759                 rsp.type   = cpu_to_le16(type);
4760                 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
4761                 l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4762                                &rsp);
4763         }
4764
4765         return 0;
4766 }
4767
4768 static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4769                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4770                                         u8 *data)
4771 {
4772         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4773         u16 type, result;
4774
4775         if (cmd_len < sizeof(*rsp))
4776                 return -EPROTO;
4777
4778         type   = __le16_to_cpu(rsp->type);
4779         result = __le16_to_cpu(rsp->result);
4780
4781         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4782
4783         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
4784         if (cmd->ident != conn->info_ident ||
4785             conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4786                 return 0;
4787
4788         cancel_delayed_work(&conn->info_timer);
4789
4790         if (result != L2CAP_IR_SUCCESS) {
4791                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4792                 conn->info_ident = 0;
4793
4794                 l2cap_conn_start(conn);
4795
4796                 return 0;
4797         }
4798
4799         switch (type) {
4800         case L2CAP_IT_FEAT_MASK:
4801                 conn->feat_mask = get_unaligned_le32(rsp->data);
4802
4803                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4804                         struct l2cap_info_req req;
4805                         req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4806
4807                         conn->info_ident = l2cap_get_ident(conn);
4808
4809                         l2cap_send_cmd(conn, conn->info_ident,
4810                                        L2CAP_INFO_REQ, sizeof(req), &req);
4811                 } else {
4812                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4813                         conn->info_ident = 0;
4814
4815                         l2cap_conn_start(conn);
4816                 }
4817                 break;
4818
4819         case L2CAP_IT_FIXED_CHAN:
4820                 conn->remote_fixed_chan = rsp->data[0];
4821                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4822                 conn->info_ident = 0;
4823
4824                 l2cap_conn_start(conn);
4825                 break;
4826         }
4827
4828         return 0;
4829 }
4830
4831 static int l2cap_create_channel_req(struct l2cap_conn *conn,
4832                                     struct l2cap_cmd_hdr *cmd,
4833                                     u16 cmd_len, void *data)
4834 {
4835         struct l2cap_create_chan_req *req = data;
4836         struct l2cap_create_chan_rsp rsp;
4837         struct l2cap_chan *chan;
4838         struct hci_dev *hdev;
4839         u16 psm, scid;
4840
4841         if (cmd_len != sizeof(*req))
4842                 return -EPROTO;
4843
4844         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
4845                 return -EINVAL;
4846
4847         psm = le16_to_cpu(req->psm);
4848         scid = le16_to_cpu(req->scid);
4849
4850         BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4851
4852         /* For controller id 0 make BR/EDR connection */
4853         if (req->amp_id == AMP_ID_BREDR) {
4854                 l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4855                               req->amp_id);
4856                 return 0;
4857         }
4858
4859         /* Validate AMP controller id */
4860         hdev = hci_dev_get(req->amp_id);
4861         if (!hdev)
4862                 goto error;
4863
4864         if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4865                 hci_dev_put(hdev);
4866                 goto error;
4867         }
4868
4869         chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4870                              req->amp_id);
4871         if (chan) {
4872                 struct amp_mgr *mgr = conn->hcon->amp_mgr;
4873                 struct hci_conn *hs_hcon;
4874
4875                 hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK,
4876                                                   &conn->hcon->dst);
4877                 if (!hs_hcon) {
4878                         hci_dev_put(hdev);
4879                         cmd_reject_invalid_cid(conn, cmd->ident, chan->scid,
4880                                                chan->dcid);
4881                         return 0;
4882                 }
4883
4884                 BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4885
4886                 mgr->bredr_chan = chan;
4887                 chan->hs_hcon = hs_hcon;
4888                 chan->fcs = L2CAP_FCS_NONE;
4889                 conn->mtu = hdev->block_mtu;
4890         }
4891
4892         hci_dev_put(hdev);
4893
4894         return 0;
4895
4896 error:
4897         rsp.dcid = 0;
4898         rsp.scid = cpu_to_le16(scid);
4899         rsp.result = cpu_to_le16(L2CAP_CR_BAD_AMP);
4900         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4901
4902         l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4903                        sizeof(rsp), &rsp);
4904
4905         return 0;
4906 }
4907
4908 static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4909 {
4910         struct l2cap_move_chan_req req;
4911         u8 ident;
4912
4913         BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4914
4915         ident = l2cap_get_ident(chan->conn);
4916         chan->ident = ident;
4917
4918         req.icid = cpu_to_le16(chan->scid);
4919         req.dest_amp_id = dest_amp_id;
4920
4921         l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4922                        &req);
4923
4924         __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4925 }
4926
4927 static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4928 {
4929         struct l2cap_move_chan_rsp rsp;
4930
4931         BT_DBG("chan %p, result 0x%4.4x", chan, result);
4932
4933         rsp.icid = cpu_to_le16(chan->dcid);
4934         rsp.result = cpu_to_le16(result);
4935
4936         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4937                        sizeof(rsp), &rsp);
4938 }
4939
4940 static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4941 {
4942         struct l2cap_move_chan_cfm cfm;
4943
4944         BT_DBG("chan %p, result 0x%4.4x", chan, result);
4945
4946         chan->ident = l2cap_get_ident(chan->conn);
4947
4948         cfm.icid = cpu_to_le16(chan->scid);
4949         cfm.result = cpu_to_le16(result);
4950
4951         l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4952                        sizeof(cfm), &cfm);
4953
4954         __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4955 }
4956
4957 static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4958 {
4959         struct l2cap_move_chan_cfm cfm;
4960
4961         BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4962
4963         cfm.icid = cpu_to_le16(icid);
4964         cfm.result = cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4965
4966         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4967                        sizeof(cfm), &cfm);
4968 }
4969
4970 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4971                                          u16 icid)
4972 {
4973         struct l2cap_move_chan_cfm_rsp rsp;
4974
4975         BT_DBG("icid 0x%4.4x", icid);
4976
4977         rsp.icid = cpu_to_le16(icid);
4978         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4979 }
4980
4981 static void __release_logical_link(struct l2cap_chan *chan)
4982 {
4983         chan->hs_hchan = NULL;
4984         chan->hs_hcon = NULL;
4985
4986         /* Placeholder - release the logical link */
4987 }
4988
4989 static void l2cap_logical_fail(struct l2cap_chan *chan)
4990 {
4991         /* Logical link setup failed */
4992         if (chan->state != BT_CONNECTED) {
4993                 /* Create channel failure, disconnect */
4994                 l2cap_send_disconn_req(chan, ECONNRESET);
4995                 return;
4996         }
4997
4998         switch (chan->move_role) {
4999         case L2CAP_MOVE_ROLE_RESPONDER:
5000                 l2cap_move_done(chan);
5001                 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
5002                 break;
5003         case L2CAP_MOVE_ROLE_INITIATOR:
5004                 if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
5005                     chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
5006                         /* Remote has only sent pending or
5007                          * success responses, clean up
5008                          */
5009                         l2cap_move_done(chan);
5010                 }
5011
5012                 /* Other amp move states imply that the move
5013                  * has already aborted
5014                  */
5015                 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5016                 break;
5017         }
5018 }
5019
5020 static void l2cap_logical_finish_create(struct l2cap_chan *chan,
5021                                         struct hci_chan *hchan)
5022 {
5023         struct l2cap_conf_rsp rsp;
5024
5025         chan->hs_hchan = hchan;
5026         chan->hs_hcon->l2cap_data = chan->conn;
5027
5028         l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
5029
5030         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
5031                 int err;
5032
5033                 set_default_fcs(chan);
5034
5035                 err = l2cap_ertm_init(chan);
5036                 if (err < 0)
5037                         l2cap_send_disconn_req(chan, -err);
5038                 else
5039                         l2cap_chan_ready(chan);
5040         }
5041 }
5042
5043 static void l2cap_logical_finish_move(struct l2cap_chan *chan,
5044                                       struct hci_chan *hchan)
5045 {
5046         chan->hs_hcon = hchan->conn;
5047         chan->hs_hcon->l2cap_data = chan->conn;
5048
5049         BT_DBG("move_state %d", chan->move_state);
5050
5051         switch (chan->move_state) {
5052         case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5053                 /* Move confirm will be sent after a success
5054                  * response is received
5055                  */
5056                 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5057                 break;
5058         case L2CAP_MOVE_WAIT_LOGICAL_CFM:
5059                 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5060                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5061                 } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5062                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5063                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5064                 } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5065                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5066                         l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5067                 }
5068                 break;
5069         default:
5070                 /* Move was not in expected state, free the channel */
5071                 __release_logical_link(chan);
5072
5073                 chan->move_state = L2CAP_MOVE_STABLE;
5074         }
5075 }
5076
5077 /* Call with chan locked */
5078 void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
5079                        u8 status)
5080 {
5081         BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
5082
5083         if (status) {
5084                 l2cap_logical_fail(chan);
5085                 __release_logical_link(chan);
5086                 return;
5087         }
5088
5089         if (chan->state != BT_CONNECTED) {
5090                 /* Ignore logical link if channel is on BR/EDR */
5091                 if (chan->local_amp_id != AMP_ID_BREDR)
5092                         l2cap_logical_finish_create(chan, hchan);
5093         } else {
5094                 l2cap_logical_finish_move(chan, hchan);
5095         }
5096 }
5097
5098 void l2cap_move_start(struct l2cap_chan *chan)
5099 {
5100         BT_DBG("chan %p", chan);
5101
5102         if (chan->local_amp_id == AMP_ID_BREDR) {
5103                 if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
5104                         return;
5105                 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5106                 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5107                 /* Placeholder - start physical link setup */
5108         } else {
5109                 chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
5110                 chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5111                 chan->move_id = 0;
5112                 l2cap_move_setup(chan);
5113                 l2cap_send_move_chan_req(chan, 0);
5114         }
5115 }
5116
5117 static void l2cap_do_create(struct l2cap_chan *chan, int result,
5118                             u8 local_amp_id, u8 remote_amp_id)
5119 {
5120         BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
5121                local_amp_id, remote_amp_id);
5122
5123         chan->fcs = L2CAP_FCS_NONE;
5124
5125         /* Outgoing channel on AMP */
5126         if (chan->state == BT_CONNECT) {
5127                 if (result == L2CAP_CR_SUCCESS) {
5128                         chan->local_amp_id = local_amp_id;
5129                         l2cap_send_create_chan_req(chan, remote_amp_id);
5130                 } else {
5131                         /* Revert to BR/EDR connect */
5132                         l2cap_send_conn_req(chan);
5133                 }
5134
5135                 return;
5136         }
5137
5138         /* Incoming channel on AMP */
5139         if (__l2cap_no_conn_pending(chan)) {
5140                 struct l2cap_conn_rsp rsp;
5141                 char buf[128];
5142                 rsp.scid = cpu_to_le16(chan->dcid);
5143                 rsp.dcid = cpu_to_le16(chan->scid);
5144
5145                 if (result == L2CAP_CR_SUCCESS) {
5146                         /* Send successful response */
5147                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
5148                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5149                 } else {
5150                         /* Send negative response */
5151                         rsp.result = cpu_to_le16(L2CAP_CR_NO_MEM);
5152                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
5153                 }
5154
5155                 l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
5156                                sizeof(rsp), &rsp);
5157
5158                 if (result == L2CAP_CR_SUCCESS) {
5159                         l2cap_state_change(chan, BT_CONFIG);
5160                         set_bit(CONF_REQ_SENT, &chan->conf_state);
5161                         l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
5162                                        L2CAP_CONF_REQ,
5163                                        l2cap_build_conf_req(chan, buf, sizeof(buf)), buf);
5164                         chan->num_conf_req++;
5165                 }
5166         }
5167 }
5168
5169 static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
5170                                    u8 remote_amp_id)
5171 {
5172         l2cap_move_setup(chan);
5173         chan->move_id = local_amp_id;
5174         chan->move_state = L2CAP_MOVE_WAIT_RSP;
5175
5176         l2cap_send_move_chan_req(chan, remote_amp_id);
5177 }
5178
5179 static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
5180 {
5181         struct hci_chan *hchan = NULL;
5182
5183         /* Placeholder - get hci_chan for logical link */
5184
5185         if (hchan) {
5186                 if (hchan->state == BT_CONNECTED) {
5187                         /* Logical link is ready to go */
5188                         chan->hs_hcon = hchan->conn;
5189                         chan->hs_hcon->l2cap_data = chan->conn;
5190                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5191                         l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
5192
5193                         l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5194                 } else {
5195                         /* Wait for logical link to be ready */
5196                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5197                 }
5198         } else {
5199                 /* Logical link not available */
5200                 l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
5201         }
5202 }
5203
5204 static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
5205 {
5206         if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
5207                 u8 rsp_result;
5208                 if (result == -EINVAL)
5209                         rsp_result = L2CAP_MR_BAD_ID;
5210                 else
5211                         rsp_result = L2CAP_MR_NOT_ALLOWED;
5212
5213                 l2cap_send_move_chan_rsp(chan, rsp_result);
5214         }
5215
5216         chan->move_role = L2CAP_MOVE_ROLE_NONE;
5217         chan->move_state = L2CAP_MOVE_STABLE;
5218
5219         /* Restart data transmission */
5220         l2cap_ertm_send(chan);
5221 }
5222
5223 /* Invoke with locked chan */
5224 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
5225 {
5226         u8 local_amp_id = chan->local_amp_id;
5227         u8 remote_amp_id = chan->remote_amp_id;
5228
5229         BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
5230                chan, result, local_amp_id, remote_amp_id);
5231
5232         if (chan->state == BT_DISCONN || chan->state == BT_CLOSED)
5233                 return;
5234
5235         if (chan->state != BT_CONNECTED) {
5236                 l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
5237         } else if (result != L2CAP_MR_SUCCESS) {
5238                 l2cap_do_move_cancel(chan, result);
5239         } else {
5240                 switch (chan->move_role) {
5241                 case L2CAP_MOVE_ROLE_INITIATOR:
5242                         l2cap_do_move_initiate(chan, local_amp_id,
5243                                                remote_amp_id);
5244                         break;
5245                 case L2CAP_MOVE_ROLE_RESPONDER:
5246                         l2cap_do_move_respond(chan, result);
5247                         break;
5248                 default:
5249                         l2cap_do_move_cancel(chan, result);
5250                         break;
5251                 }
5252         }
5253 }
5254
5255 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
5256                                          struct l2cap_cmd_hdr *cmd,
5257                                          u16 cmd_len, void *data)
5258 {
5259         struct l2cap_move_chan_req *req = data;
5260         struct l2cap_move_chan_rsp rsp;
5261         struct l2cap_chan *chan;
5262         u16 icid = 0;
5263         u16 result = L2CAP_MR_NOT_ALLOWED;
5264
5265         if (cmd_len != sizeof(*req))
5266                 return -EPROTO;
5267
5268         icid = le16_to_cpu(req->icid);
5269
5270         BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
5271
5272         if (!(conn->local_fixed_chan & L2CAP_FC_A2MP))
5273                 return -EINVAL;
5274
5275         chan = l2cap_get_chan_by_dcid(conn, icid);
5276         if (!chan) {
5277                 rsp.icid = cpu_to_le16(icid);
5278                 rsp.result = cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
5279                 l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
5280                                sizeof(rsp), &rsp);
5281                 return 0;
5282         }
5283
5284         chan->ident = cmd->ident;
5285
5286         if (chan->scid < L2CAP_CID_DYN_START ||
5287             chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
5288             (chan->mode != L2CAP_MODE_ERTM &&
5289              chan->mode != L2CAP_MODE_STREAMING)) {
5290                 result = L2CAP_MR_NOT_ALLOWED;
5291                 goto send_move_response;
5292         }
5293
5294         if (chan->local_amp_id == req->dest_amp_id) {
5295                 result = L2CAP_MR_SAME_ID;
5296                 goto send_move_response;
5297         }
5298
5299         if (req->dest_amp_id != AMP_ID_BREDR) {
5300                 struct hci_dev *hdev;
5301                 hdev = hci_dev_get(req->dest_amp_id);
5302                 if (!hdev || hdev->dev_type != HCI_AMP ||
5303                     !test_bit(HCI_UP, &hdev->flags)) {
5304                         if (hdev)
5305                                 hci_dev_put(hdev);
5306
5307                         result = L2CAP_MR_BAD_ID;
5308                         goto send_move_response;
5309                 }
5310                 hci_dev_put(hdev);
5311         }
5312
5313         /* Detect a move collision.  Only send a collision response
5314          * if this side has "lost", otherwise proceed with the move.
5315          * The winner has the larger bd_addr.
5316          */
5317         if ((__chan_is_moving(chan) ||
5318              chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
5319             bacmp(&conn->hcon->src, &conn->hcon->dst) > 0) {
5320                 result = L2CAP_MR_COLLISION;
5321                 goto send_move_response;
5322         }
5323
5324         chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5325         l2cap_move_setup(chan);
5326         chan->move_id = req->dest_amp_id;
5327
5328         if (req->dest_amp_id == AMP_ID_BREDR) {
5329                 /* Moving to BR/EDR */
5330                 if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5331                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5332                         result = L2CAP_MR_PEND;
5333                 } else {
5334                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
5335                         result = L2CAP_MR_SUCCESS;
5336                 }
5337         } else {
5338                 chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
5339                 /* Placeholder - uncomment when amp functions are available */
5340                 /*amp_accept_physical(chan, req->dest_amp_id);*/
5341                 result = L2CAP_MR_PEND;
5342         }
5343
5344 send_move_response:
5345         l2cap_send_move_chan_rsp(chan, result);
5346
5347         l2cap_chan_unlock(chan);
5348         l2cap_chan_put(chan);
5349
5350         return 0;
5351 }
5352
5353 static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
5354 {
5355         struct l2cap_chan *chan;
5356         struct hci_chan *hchan = NULL;
5357
5358         chan = l2cap_get_chan_by_scid(conn, icid);
5359         if (!chan) {
5360                 l2cap_send_move_chan_cfm_icid(conn, icid);
5361                 return;
5362         }
5363
5364         __clear_chan_timer(chan);
5365         if (result == L2CAP_MR_PEND)
5366                 __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
5367
5368         switch (chan->move_state) {
5369         case L2CAP_MOVE_WAIT_LOGICAL_COMP:
5370                 /* Move confirm will be sent when logical link
5371                  * is complete.
5372                  */
5373                 chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5374                 break;
5375         case L2CAP_MOVE_WAIT_RSP_SUCCESS:
5376                 if (result == L2CAP_MR_PEND) {
5377                         break;
5378                 } else if (test_bit(CONN_LOCAL_BUSY,
5379                                     &chan->conn_state)) {
5380                         chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
5381                 } else {
5382                         /* Logical link is up or moving to BR/EDR,
5383                          * proceed with move
5384                          */
5385                         chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
5386                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5387                 }
5388                 break;
5389         case L2CAP_MOVE_WAIT_RSP:
5390                 /* Moving to AMP */
5391                 if (result == L2CAP_MR_SUCCESS) {
5392                         /* Remote is ready, send confirm immediately
5393                          * after logical link is ready
5394                          */
5395                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
5396                 } else {
5397                         /* Both logical link and move success
5398                          * are required to confirm
5399                          */
5400                         chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
5401                 }
5402
5403                 /* Placeholder - get hci_chan for logical link */
5404                 if (!hchan) {
5405                         /* Logical link not available */
5406                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5407                         break;
5408                 }
5409
5410                 /* If the logical link is not yet connected, do not
5411                  * send confirmation.
5412                  */
5413                 if (hchan->state != BT_CONNECTED)
5414                         break;
5415
5416                 /* Logical link is already ready to go */
5417
5418                 chan->hs_hcon = hchan->conn;
5419                 chan->hs_hcon->l2cap_data = chan->conn;
5420
5421                 if (result == L2CAP_MR_SUCCESS) {
5422                         /* Can confirm now */
5423                         l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
5424                 } else {
5425                         /* Now only need move success
5426                          * to confirm
5427                          */
5428                         chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
5429                 }
5430
5431                 l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
5432                 break;
5433         default:
5434                 /* Any other amp move state means the move failed. */
5435                 chan->move_id = chan->local_amp_id;
5436                 l2cap_move_done(chan);
5437                 l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5438         }
5439
5440         l2cap_chan_unlock(chan);
5441         l2cap_chan_put(chan);
5442 }
5443
5444 static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5445                             u16 result)
5446 {
5447         struct l2cap_chan *chan;
5448
5449         chan = l2cap_get_chan_by_ident(conn, ident);
5450         if (!chan) {
5451                 /* Could not locate channel, icid is best guess */
5452                 l2cap_send_move_chan_cfm_icid(conn, icid);
5453                 return;
5454         }
5455
5456         __clear_chan_timer(chan);
5457
5458         if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5459                 if (result == L2CAP_MR_COLLISION) {
5460                         chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5461                 } else {
5462                         /* Cleanup - cancel move */
5463                         chan->move_id = chan->local_amp_id;
5464                         l2cap_move_done(chan);
5465                 }
5466         }
5467
5468         l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5469
5470         l2cap_chan_unlock(chan);
5471         l2cap_chan_put(chan);
5472 }
5473
5474 static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5475                                   struct l2cap_cmd_hdr *cmd,
5476                                   u16 cmd_len, void *data)
5477 {
5478         struct l2cap_move_chan_rsp *rsp = data;
5479         u16 icid, result;
5480
5481         if (cmd_len != sizeof(*rsp))
5482                 return -EPROTO;
5483
5484         icid = le16_to_cpu(rsp->icid);
5485         result = le16_to_cpu(rsp->result);
5486
5487         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5488
5489         if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5490                 l2cap_move_continue(conn, icid, result);
5491         else
5492                 l2cap_move_fail(conn, cmd->ident, icid, result);
5493
5494         return 0;
5495 }
5496
5497 static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5498                                       struct l2cap_cmd_hdr *cmd,
5499                                       u16 cmd_len, void *data)
5500 {
5501         struct l2cap_move_chan_cfm *cfm = data;
5502         struct l2cap_chan *chan;
5503         u16 icid, result;
5504
5505         if (cmd_len != sizeof(*cfm))
5506                 return -EPROTO;
5507
5508         icid = le16_to_cpu(cfm->icid);
5509         result = le16_to_cpu(cfm->result);
5510
5511         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5512
5513         chan = l2cap_get_chan_by_dcid(conn, icid);
5514         if (!chan) {
5515                 /* Spec requires a response even if the icid was not found */
5516                 l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5517                 return 0;
5518         }
5519
5520         if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5521                 if (result == L2CAP_MC_CONFIRMED) {
5522                         chan->local_amp_id = chan->move_id;
5523                         if (chan->local_amp_id == AMP_ID_BREDR)
5524                                 __release_logical_link(chan);
5525                 } else {
5526                         chan->move_id = chan->local_amp_id;
5527                 }
5528
5529                 l2cap_move_done(chan);
5530         }
5531
5532         l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5533
5534         l2cap_chan_unlock(chan);
5535         l2cap_chan_put(chan);
5536
5537         return 0;
5538 }
5539
5540 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5541                                                  struct l2cap_cmd_hdr *cmd,
5542                                                  u16 cmd_len, void *data)
5543 {
5544         struct l2cap_move_chan_cfm_rsp *rsp = data;
5545         struct l2cap_chan *chan;
5546         u16 icid;
5547
5548         if (cmd_len != sizeof(*rsp))
5549                 return -EPROTO;
5550
5551         icid = le16_to_cpu(rsp->icid);
5552
5553         BT_DBG("icid 0x%4.4x", icid);
5554
5555         chan = l2cap_get_chan_by_scid(conn, icid);
5556         if (!chan)
5557                 return 0;
5558
5559         __clear_chan_timer(chan);
5560
5561         if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5562                 chan->local_amp_id = chan->move_id;
5563
5564                 if (chan->local_amp_id == AMP_ID_BREDR && chan->hs_hchan)
5565                         __release_logical_link(chan);
5566
5567                 l2cap_move_done(chan);
5568         }
5569
5570         l2cap_chan_unlock(chan);
5571         l2cap_chan_put(chan);
5572
5573         return 0;
5574 }
5575
5576 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5577                                               struct l2cap_cmd_hdr *cmd,
5578                                               u16 cmd_len, u8 *data)
5579 {
5580         struct hci_conn *hcon = conn->hcon;
5581         struct l2cap_conn_param_update_req *req;
5582         struct l2cap_conn_param_update_rsp rsp;
5583         u16 min, max, latency, to_multiplier;
5584         int err;
5585
5586         if (hcon->role != HCI_ROLE_MASTER)
5587                 return -EINVAL;
5588
5589         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5590                 return -EPROTO;
5591
5592         req = (struct l2cap_conn_param_update_req *) data;
5593         min             = __le16_to_cpu(req->min);
5594         max             = __le16_to_cpu(req->max);
5595         latency         = __le16_to_cpu(req->latency);
5596         to_multiplier   = __le16_to_cpu(req->to_multiplier);
5597
5598         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5599                min, max, latency, to_multiplier);
5600
5601         memset(&rsp, 0, sizeof(rsp));
5602
5603         err = hci_check_conn_params(min, max, latency, to_multiplier);
5604         if (err)
5605                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5606         else
5607                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5608
5609         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5610                        sizeof(rsp), &rsp);
5611
5612         if (!err) {
5613                 u8 store_hint;
5614
5615                 store_hint = hci_le_conn_update(hcon, min, max, latency,
5616                                                 to_multiplier);
5617                 mgmt_new_conn_param(hcon->hdev, &hcon->dst, hcon->dst_type,
5618                                     store_hint, min, max, latency,
5619                                     to_multiplier);
5620
5621         }
5622
5623         return 0;
5624 }
5625
5626 static int l2cap_le_connect_rsp(struct l2cap_conn *conn,
5627                                 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5628                                 u8 *data)
5629 {
5630         struct l2cap_le_conn_rsp *rsp = (struct l2cap_le_conn_rsp *) data;
5631         struct hci_conn *hcon = conn->hcon;
5632         u16 dcid, mtu, mps, credits, result;
5633         struct l2cap_chan *chan;
5634         int err, sec_level;
5635
5636         if (cmd_len < sizeof(*rsp))
5637                 return -EPROTO;
5638
5639         dcid    = __le16_to_cpu(rsp->dcid);
5640         mtu     = __le16_to_cpu(rsp->mtu);
5641         mps     = __le16_to_cpu(rsp->mps);
5642         credits = __le16_to_cpu(rsp->credits);
5643         result  = __le16_to_cpu(rsp->result);
5644
5645         if (result == L2CAP_CR_LE_SUCCESS && (mtu < 23 || mps < 23 ||
5646                                            dcid < L2CAP_CID_DYN_START ||
5647                                            dcid > L2CAP_CID_LE_DYN_END))
5648                 return -EPROTO;
5649
5650         BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
5651                dcid, mtu, mps, credits, result);
5652
5653         mutex_lock(&conn->chan_lock);
5654
5655         chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
5656         if (!chan) {
5657                 err = -EBADSLT;
5658                 goto unlock;
5659         }
5660
5661         err = 0;
5662
5663         l2cap_chan_lock(chan);
5664
5665         switch (result) {
5666         case L2CAP_CR_LE_SUCCESS:
5667                 if (__l2cap_get_chan_by_dcid(conn, dcid)) {
5668                         err = -EBADSLT;
5669                         break;
5670                 }
5671
5672                 chan->ident = 0;
5673                 chan->dcid = dcid;
5674                 chan->omtu = mtu;
5675                 chan->remote_mps = mps;
5676                 chan->tx_credits = credits;
5677                 l2cap_chan_ready(chan);
5678                 break;
5679
5680         case L2CAP_CR_LE_AUTHENTICATION:
5681         case L2CAP_CR_LE_ENCRYPTION:
5682                 /* If we already have MITM protection we can't do
5683                  * anything.
5684                  */
5685                 if (hcon->sec_level > BT_SECURITY_MEDIUM) {
5686                         l2cap_chan_del(chan, ECONNREFUSED);
5687                         break;
5688                 }
5689
5690                 sec_level = hcon->sec_level + 1;
5691                 if (chan->sec_level < sec_level)
5692                         chan->sec_level = sec_level;
5693
5694                 /* We'll need to send a new Connect Request */
5695                 clear_bit(FLAG_LE_CONN_REQ_SENT, &chan->flags);
5696
5697                 smp_conn_security(hcon, chan->sec_level);
5698                 break;
5699
5700         default:
5701                 l2cap_chan_del(chan, ECONNREFUSED);
5702                 break;
5703         }
5704
5705         l2cap_chan_unlock(chan);
5706
5707 unlock:
5708         mutex_unlock(&conn->chan_lock);
5709
5710         return err;
5711 }
5712
5713 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5714                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5715                                       u8 *data)
5716 {
5717         int err = 0;
5718
5719         switch (cmd->code) {
5720         case L2CAP_COMMAND_REJ:
5721                 l2cap_command_rej(conn, cmd, cmd_len, data);
5722                 break;
5723
5724         case L2CAP_CONN_REQ:
5725                 err = l2cap_connect_req(conn, cmd, cmd_len, data);
5726                 break;
5727
5728         case L2CAP_CONN_RSP:
5729         case L2CAP_CREATE_CHAN_RSP:
5730                 l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5731                 break;
5732
5733         case L2CAP_CONF_REQ:
5734                 err = l2cap_config_req(conn, cmd, cmd_len, data);
5735                 break;
5736
5737         case L2CAP_CONF_RSP:
5738                 l2cap_config_rsp(conn, cmd, cmd_len, data);
5739                 break;
5740
5741         case L2CAP_DISCONN_REQ:
5742                 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5743                 break;
5744
5745         case L2CAP_DISCONN_RSP:
5746                 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5747                 break;
5748
5749         case L2CAP_ECHO_REQ:
5750                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5751                 break;
5752
5753         case L2CAP_ECHO_RSP:
5754                 break;
5755
5756         case L2CAP_INFO_REQ:
5757                 err = l2cap_information_req(conn, cmd, cmd_len, data);
5758                 break;
5759
5760         case L2CAP_INFO_RSP:
5761                 l2cap_information_rsp(conn, cmd, cmd_len, data);
5762                 break;
5763
5764         case L2CAP_CREATE_CHAN_REQ:
5765                 err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5766                 break;
5767
5768         case L2CAP_MOVE_CHAN_REQ:
5769                 err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5770                 break;
5771
5772         case L2CAP_MOVE_CHAN_RSP:
5773                 l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5774                 break;
5775
5776         case L2CAP_MOVE_CHAN_CFM:
5777                 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5778                 break;
5779
5780         case L2CAP_MOVE_CHAN_CFM_RSP:
5781                 l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5782                 break;
5783
5784         default:
5785                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5786                 err = -EINVAL;
5787                 break;
5788         }
5789
5790         return err;
5791 }
5792
5793 static int l2cap_le_connect_req(struct l2cap_conn *conn,
5794                                 struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5795                                 u8 *data)
5796 {
5797         struct l2cap_le_conn_req *req = (struct l2cap_le_conn_req *) data;
5798         struct l2cap_le_conn_rsp rsp;
5799         struct l2cap_chan *chan, *pchan;
5800         u16 dcid, scid, credits, mtu, mps;
5801         __le16 psm;
5802         u8 result;
5803
5804         if (cmd_len != sizeof(*req))
5805                 return -EPROTO;
5806
5807         scid = __le16_to_cpu(req->scid);
5808         mtu  = __le16_to_cpu(req->mtu);
5809         mps  = __le16_to_cpu(req->mps);
5810         psm  = req->psm;
5811         dcid = 0;
5812         credits = 0;
5813
5814         if (mtu < 23 || mps < 23)
5815                 return -EPROTO;
5816
5817         BT_DBG("psm 0x%2.2x scid 0x%4.4x mtu %u mps %u", __le16_to_cpu(psm),
5818                scid, mtu, mps);
5819
5820         /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part A
5821          * page 1059:
5822          *
5823          * Valid range: 0x0001-0x00ff
5824          *
5825          * Table 4.15: L2CAP_LE_CREDIT_BASED_CONNECTION_REQ SPSM ranges
5826          */
5827         if (!psm || __le16_to_cpu(psm) > L2CAP_PSM_LE_DYN_END) {
5828                 result = L2CAP_CR_LE_BAD_PSM;
5829                 chan = NULL;
5830                 goto response;
5831         }
5832
5833         /* Check if we have socket listening on psm */
5834         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
5835                                          &conn->hcon->dst, LE_LINK);
5836         if (!pchan) {
5837                 result = L2CAP_CR_LE_BAD_PSM;
5838                 chan = NULL;
5839                 goto response;
5840         }
5841
5842         mutex_lock(&conn->chan_lock);
5843         l2cap_chan_lock(pchan);
5844
5845         if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
5846                                      SMP_ALLOW_STK)) {
5847                 result = L2CAP_CR_LE_AUTHENTICATION;
5848                 chan = NULL;
5849                 goto response_unlock;
5850         }
5851
5852         /* Check for valid dynamic CID range */
5853         if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
5854                 result = L2CAP_CR_LE_INVALID_SCID;
5855                 chan = NULL;
5856                 goto response_unlock;
5857         }
5858
5859         /* Check if we already have channel with that dcid */
5860         if (__l2cap_get_chan_by_dcid(conn, scid)) {
5861                 result = L2CAP_CR_LE_SCID_IN_USE;
5862                 chan = NULL;
5863                 goto response_unlock;
5864         }
5865
5866         chan = pchan->ops->new_connection(pchan);
5867         if (!chan) {
5868                 result = L2CAP_CR_LE_NO_MEM;
5869                 goto response_unlock;
5870         }
5871
5872         bacpy(&chan->src, &conn->hcon->src);
5873         bacpy(&chan->dst, &conn->hcon->dst);
5874         chan->src_type = bdaddr_src_type(conn->hcon);
5875         chan->dst_type = bdaddr_dst_type(conn->hcon);
5876         chan->psm  = psm;
5877         chan->dcid = scid;
5878         chan->omtu = mtu;
5879         chan->remote_mps = mps;
5880
5881         __l2cap_chan_add(conn, chan);
5882
5883         l2cap_le_flowctl_init(chan, __le16_to_cpu(req->credits));
5884
5885         dcid = chan->scid;
5886         credits = chan->rx_credits;
5887
5888         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
5889
5890         chan->ident = cmd->ident;
5891
5892         if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
5893                 l2cap_state_change(chan, BT_CONNECT2);
5894                 /* The following result value is actually not defined
5895                  * for LE CoC but we use it to let the function know
5896                  * that it should bail out after doing its cleanup
5897                  * instead of sending a response.
5898                  */
5899                 result = L2CAP_CR_PEND;
5900                 chan->ops->defer(chan);
5901         } else {
5902                 l2cap_chan_ready(chan);
5903                 result = L2CAP_CR_LE_SUCCESS;
5904         }
5905
5906 response_unlock:
5907         l2cap_chan_unlock(pchan);
5908         mutex_unlock(&conn->chan_lock);
5909         l2cap_chan_put(pchan);
5910
5911         if (result == L2CAP_CR_PEND)
5912                 return 0;
5913
5914 response:
5915         if (chan) {
5916                 rsp.mtu = cpu_to_le16(chan->imtu);
5917                 rsp.mps = cpu_to_le16(chan->mps);
5918         } else {
5919                 rsp.mtu = 0;
5920                 rsp.mps = 0;
5921         }
5922
5923         rsp.dcid    = cpu_to_le16(dcid);
5924         rsp.credits = cpu_to_le16(credits);
5925         rsp.result  = cpu_to_le16(result);
5926
5927         l2cap_send_cmd(conn, cmd->ident, L2CAP_LE_CONN_RSP, sizeof(rsp), &rsp);
5928
5929         return 0;
5930 }
5931
5932 static inline int l2cap_le_credits(struct l2cap_conn *conn,
5933                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5934                                    u8 *data)
5935 {
5936         struct l2cap_le_credits *pkt;
5937         struct l2cap_chan *chan;
5938         u16 cid, credits, max_credits;
5939
5940         if (cmd_len != sizeof(*pkt))
5941                 return -EPROTO;
5942
5943         pkt = (struct l2cap_le_credits *) data;
5944         cid     = __le16_to_cpu(pkt->cid);
5945         credits = __le16_to_cpu(pkt->credits);
5946
5947         BT_DBG("cid 0x%4.4x credits 0x%4.4x", cid, credits);
5948
5949         chan = l2cap_get_chan_by_dcid(conn, cid);
5950         if (!chan)
5951                 return -EBADSLT;
5952
5953         max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
5954         if (credits > max_credits) {
5955                 BT_ERR("LE credits overflow");
5956                 l2cap_send_disconn_req(chan, ECONNRESET);
5957
5958                 /* Return 0 so that we don't trigger an unnecessary
5959                  * command reject packet.
5960                  */
5961                 goto unlock;
5962         }
5963
5964         chan->tx_credits += credits;
5965
5966         /* Resume sending */
5967         l2cap_le_flowctl_send(chan);
5968
5969         if (chan->tx_credits)
5970                 chan->ops->resume(chan);
5971
5972 unlock:
5973         l2cap_chan_unlock(chan);
5974         l2cap_chan_put(chan);
5975
5976         return 0;
5977 }
5978
5979 static inline int l2cap_ecred_conn_req(struct l2cap_conn *conn,
5980                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5981                                        u8 *data)
5982 {
5983         struct l2cap_ecred_conn_req *req = (void *) data;
5984         struct {
5985                 struct l2cap_ecred_conn_rsp rsp;
5986                 __le16 dcid[L2CAP_ECRED_MAX_CID];
5987         } __packed pdu;
5988         struct l2cap_chan *chan, *pchan;
5989         u16 mtu, mps;
5990         __le16 psm;
5991         u8 result, len = 0;
5992         int i, num_scid;
5993         bool defer = false;
5994
5995         if (!enable_ecred)
5996                 return -EINVAL;
5997
5998         if (cmd_len < sizeof(*req) || (cmd_len - sizeof(*req)) % sizeof(u16)) {
5999                 result = L2CAP_CR_LE_INVALID_PARAMS;
6000                 goto response;
6001         }
6002
6003         cmd_len -= sizeof(*req);
6004         num_scid = cmd_len / sizeof(u16);
6005
6006         if (num_scid > ARRAY_SIZE(pdu.dcid)) {
6007                 result = L2CAP_CR_LE_INVALID_PARAMS;
6008                 goto response;
6009         }
6010
6011         mtu  = __le16_to_cpu(req->mtu);
6012         mps  = __le16_to_cpu(req->mps);
6013
6014         if (mtu < L2CAP_ECRED_MIN_MTU || mps < L2CAP_ECRED_MIN_MPS) {
6015                 result = L2CAP_CR_LE_UNACCEPT_PARAMS;
6016                 goto response;
6017         }
6018
6019         psm  = req->psm;
6020
6021         /* BLUETOOTH CORE SPECIFICATION Version 5.3 | Vol 3, Part A
6022          * page 1059:
6023          *
6024          * Valid range: 0x0001-0x00ff
6025          *
6026          * Table 4.15: L2CAP_LE_CREDIT_BASED_CONNECTION_REQ SPSM ranges
6027          */
6028         if (!psm || __le16_to_cpu(psm) > L2CAP_PSM_LE_DYN_END) {
6029                 result = L2CAP_CR_LE_BAD_PSM;
6030                 goto response;
6031         }
6032
6033         BT_DBG("psm 0x%2.2x mtu %u mps %u", __le16_to_cpu(psm), mtu, mps);
6034
6035         memset(&pdu, 0, sizeof(pdu));
6036
6037         /* Check if we have socket listening on psm */
6038         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, &conn->hcon->src,
6039                                          &conn->hcon->dst, LE_LINK);
6040         if (!pchan) {
6041                 result = L2CAP_CR_LE_BAD_PSM;
6042                 goto response;
6043         }
6044
6045         mutex_lock(&conn->chan_lock);
6046         l2cap_chan_lock(pchan);
6047
6048         if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
6049                                      SMP_ALLOW_STK)) {
6050                 result = L2CAP_CR_LE_AUTHENTICATION;
6051                 goto unlock;
6052         }
6053
6054         result = L2CAP_CR_LE_SUCCESS;
6055
6056         for (i = 0; i < num_scid; i++) {
6057                 u16 scid = __le16_to_cpu(req->scid[i]);
6058
6059                 BT_DBG("scid[%d] 0x%4.4x", i, scid);
6060
6061                 pdu.dcid[i] = 0x0000;
6062                 len += sizeof(*pdu.dcid);
6063
6064                 /* Check for valid dynamic CID range */
6065                 if (scid < L2CAP_CID_DYN_START || scid > L2CAP_CID_LE_DYN_END) {
6066                         result = L2CAP_CR_LE_INVALID_SCID;
6067                         continue;
6068                 }
6069
6070                 /* Check if we already have channel with that dcid */
6071                 if (__l2cap_get_chan_by_dcid(conn, scid)) {
6072                         result = L2CAP_CR_LE_SCID_IN_USE;
6073                         continue;
6074                 }
6075
6076                 chan = pchan->ops->new_connection(pchan);
6077                 if (!chan) {
6078                         result = L2CAP_CR_LE_NO_MEM;
6079                         continue;
6080                 }
6081
6082                 bacpy(&chan->src, &conn->hcon->src);
6083                 bacpy(&chan->dst, &conn->hcon->dst);
6084                 chan->src_type = bdaddr_src_type(conn->hcon);
6085                 chan->dst_type = bdaddr_dst_type(conn->hcon);
6086                 chan->psm  = psm;
6087                 chan->dcid = scid;
6088                 chan->omtu = mtu;
6089                 chan->remote_mps = mps;
6090
6091                 __l2cap_chan_add(conn, chan);
6092
6093                 l2cap_ecred_init(chan, __le16_to_cpu(req->credits));
6094
6095                 /* Init response */
6096                 if (!pdu.rsp.credits) {
6097                         pdu.rsp.mtu = cpu_to_le16(chan->imtu);
6098                         pdu.rsp.mps = cpu_to_le16(chan->mps);
6099                         pdu.rsp.credits = cpu_to_le16(chan->rx_credits);
6100                 }
6101
6102                 pdu.dcid[i] = cpu_to_le16(chan->scid);
6103
6104                 __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
6105
6106                 chan->ident = cmd->ident;
6107                 chan->mode = L2CAP_MODE_EXT_FLOWCTL;
6108
6109                 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
6110                         l2cap_state_change(chan, BT_CONNECT2);
6111                         defer = true;
6112                         chan->ops->defer(chan);
6113                 } else {
6114                         l2cap_chan_ready(chan);
6115                 }
6116         }
6117
6118 unlock:
6119         l2cap_chan_unlock(pchan);
6120         mutex_unlock(&conn->chan_lock);
6121         l2cap_chan_put(pchan);
6122
6123 response:
6124         pdu.rsp.result = cpu_to_le16(result);
6125
6126         if (defer)
6127                 return 0;
6128
6129         l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_CONN_RSP,
6130                        sizeof(pdu.rsp) + len, &pdu);
6131
6132         return 0;
6133 }
6134
6135 static inline int l2cap_ecred_conn_rsp(struct l2cap_conn *conn,
6136                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6137                                        u8 *data)
6138 {
6139         struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6140         struct hci_conn *hcon = conn->hcon;
6141         u16 mtu, mps, credits, result;
6142         struct l2cap_chan *chan, *tmp;
6143         int err = 0, sec_level;
6144         int i = 0;
6145
6146         if (cmd_len < sizeof(*rsp))
6147                 return -EPROTO;
6148
6149         mtu     = __le16_to_cpu(rsp->mtu);
6150         mps     = __le16_to_cpu(rsp->mps);
6151         credits = __le16_to_cpu(rsp->credits);
6152         result  = __le16_to_cpu(rsp->result);
6153
6154         BT_DBG("mtu %u mps %u credits %u result 0x%4.4x", mtu, mps, credits,
6155                result);
6156
6157         mutex_lock(&conn->chan_lock);
6158
6159         cmd_len -= sizeof(*rsp);
6160
6161         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
6162                 u16 dcid;
6163
6164                 if (chan->ident != cmd->ident ||
6165                     chan->mode != L2CAP_MODE_EXT_FLOWCTL ||
6166                     chan->state == BT_CONNECTED)
6167                         continue;
6168
6169                 l2cap_chan_lock(chan);
6170
6171                 /* Check that there is a dcid for each pending channel */
6172                 if (cmd_len < sizeof(dcid)) {
6173                         l2cap_chan_del(chan, ECONNREFUSED);
6174                         l2cap_chan_unlock(chan);
6175                         continue;
6176                 }
6177
6178                 dcid = __le16_to_cpu(rsp->dcid[i++]);
6179                 cmd_len -= sizeof(u16);
6180
6181                 BT_DBG("dcid[%d] 0x%4.4x", i, dcid);
6182
6183                 /* Check if dcid is already in use */
6184                 if (dcid && __l2cap_get_chan_by_dcid(conn, dcid)) {
6185                         /* If a device receives a
6186                          * L2CAP_CREDIT_BASED_CONNECTION_RSP packet with an
6187                          * already-assigned Destination CID, then both the
6188                          * original channel and the new channel shall be
6189                          * immediately discarded and not used.
6190                          */
6191                         l2cap_chan_del(chan, ECONNREFUSED);
6192                         l2cap_chan_unlock(chan);
6193                         chan = __l2cap_get_chan_by_dcid(conn, dcid);
6194                         l2cap_chan_lock(chan);
6195                         l2cap_chan_del(chan, ECONNRESET);
6196                         l2cap_chan_unlock(chan);
6197                         continue;
6198                 }
6199
6200                 switch (result) {
6201                 case L2CAP_CR_LE_AUTHENTICATION:
6202                 case L2CAP_CR_LE_ENCRYPTION:
6203                         /* If we already have MITM protection we can't do
6204                          * anything.
6205                          */
6206                         if (hcon->sec_level > BT_SECURITY_MEDIUM) {
6207                                 l2cap_chan_del(chan, ECONNREFUSED);
6208                                 break;
6209                         }
6210
6211                         sec_level = hcon->sec_level + 1;
6212                         if (chan->sec_level < sec_level)
6213                                 chan->sec_level = sec_level;
6214
6215                         /* We'll need to send a new Connect Request */
6216                         clear_bit(FLAG_ECRED_CONN_REQ_SENT, &chan->flags);
6217
6218                         smp_conn_security(hcon, chan->sec_level);
6219                         break;
6220
6221                 case L2CAP_CR_LE_BAD_PSM:
6222                         l2cap_chan_del(chan, ECONNREFUSED);
6223                         break;
6224
6225                 default:
6226                         /* If dcid was not set it means channels was refused */
6227                         if (!dcid) {
6228                                 l2cap_chan_del(chan, ECONNREFUSED);
6229                                 break;
6230                         }
6231
6232                         chan->ident = 0;
6233                         chan->dcid = dcid;
6234                         chan->omtu = mtu;
6235                         chan->remote_mps = mps;
6236                         chan->tx_credits = credits;
6237                         l2cap_chan_ready(chan);
6238                         break;
6239                 }
6240
6241                 l2cap_chan_unlock(chan);
6242         }
6243
6244         mutex_unlock(&conn->chan_lock);
6245
6246         return err;
6247 }
6248
6249 static inline int l2cap_ecred_reconf_req(struct l2cap_conn *conn,
6250                                          struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6251                                          u8 *data)
6252 {
6253         struct l2cap_ecred_reconf_req *req = (void *) data;
6254         struct l2cap_ecred_reconf_rsp rsp;
6255         u16 mtu, mps, result;
6256         struct l2cap_chan *chan;
6257         int i, num_scid;
6258
6259         if (!enable_ecred)
6260                 return -EINVAL;
6261
6262         if (cmd_len < sizeof(*req) || cmd_len - sizeof(*req) % sizeof(u16)) {
6263                 result = L2CAP_CR_LE_INVALID_PARAMS;
6264                 goto respond;
6265         }
6266
6267         mtu = __le16_to_cpu(req->mtu);
6268         mps = __le16_to_cpu(req->mps);
6269
6270         BT_DBG("mtu %u mps %u", mtu, mps);
6271
6272         if (mtu < L2CAP_ECRED_MIN_MTU) {
6273                 result = L2CAP_RECONF_INVALID_MTU;
6274                 goto respond;
6275         }
6276
6277         if (mps < L2CAP_ECRED_MIN_MPS) {
6278                 result = L2CAP_RECONF_INVALID_MPS;
6279                 goto respond;
6280         }
6281
6282         cmd_len -= sizeof(*req);
6283         num_scid = cmd_len / sizeof(u16);
6284         result = L2CAP_RECONF_SUCCESS;
6285
6286         for (i = 0; i < num_scid; i++) {
6287                 u16 scid;
6288
6289                 scid = __le16_to_cpu(req->scid[i]);
6290                 if (!scid)
6291                         return -EPROTO;
6292
6293                 chan = __l2cap_get_chan_by_dcid(conn, scid);
6294                 if (!chan)
6295                         continue;
6296
6297                 /* If the MTU value is decreased for any of the included
6298                  * channels, then the receiver shall disconnect all
6299                  * included channels.
6300                  */
6301                 if (chan->omtu > mtu) {
6302                         BT_ERR("chan %p decreased MTU %u -> %u", chan,
6303                                chan->omtu, mtu);
6304                         result = L2CAP_RECONF_INVALID_MTU;
6305                 }
6306
6307                 chan->omtu = mtu;
6308                 chan->remote_mps = mps;
6309         }
6310
6311 respond:
6312         rsp.result = cpu_to_le16(result);
6313
6314         l2cap_send_cmd(conn, cmd->ident, L2CAP_ECRED_RECONF_RSP, sizeof(rsp),
6315                        &rsp);
6316
6317         return 0;
6318 }
6319
6320 static inline int l2cap_ecred_reconf_rsp(struct l2cap_conn *conn,
6321                                          struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6322                                          u8 *data)
6323 {
6324         struct l2cap_chan *chan, *tmp;
6325         struct l2cap_ecred_conn_rsp *rsp = (void *) data;
6326         u16 result;
6327
6328         if (cmd_len < sizeof(*rsp))
6329                 return -EPROTO;
6330
6331         result = __le16_to_cpu(rsp->result);
6332
6333         BT_DBG("result 0x%4.4x", rsp->result);
6334
6335         if (!result)
6336                 return 0;
6337
6338         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
6339                 if (chan->ident != cmd->ident)
6340                         continue;
6341
6342                 l2cap_chan_del(chan, ECONNRESET);
6343         }
6344
6345         return 0;
6346 }
6347
6348 static inline int l2cap_le_command_rej(struct l2cap_conn *conn,
6349                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6350                                        u8 *data)
6351 {
6352         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
6353         struct l2cap_chan *chan;
6354
6355         if (cmd_len < sizeof(*rej))
6356                 return -EPROTO;
6357
6358         mutex_lock(&conn->chan_lock);
6359
6360         chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
6361         if (!chan)
6362                 goto done;
6363
6364         l2cap_chan_lock(chan);
6365         l2cap_chan_del(chan, ECONNREFUSED);
6366         l2cap_chan_unlock(chan);
6367
6368 done:
6369         mutex_unlock(&conn->chan_lock);
6370         return 0;
6371 }
6372
6373 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
6374                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
6375                                    u8 *data)
6376 {
6377         int err = 0;
6378
6379         switch (cmd->code) {
6380         case L2CAP_COMMAND_REJ:
6381                 l2cap_le_command_rej(conn, cmd, cmd_len, data);
6382                 break;
6383
6384         case L2CAP_CONN_PARAM_UPDATE_REQ:
6385                 err = l2cap_conn_param_update_req(conn, cmd, cmd_len, data);
6386                 break;
6387
6388         case L2CAP_CONN_PARAM_UPDATE_RSP:
6389                 break;
6390
6391         case L2CAP_LE_CONN_RSP:
6392                 l2cap_le_connect_rsp(conn, cmd, cmd_len, data);
6393                 break;
6394
6395         case L2CAP_LE_CONN_REQ:
6396                 err = l2cap_le_connect_req(conn, cmd, cmd_len, data);
6397                 break;
6398
6399         case L2CAP_LE_CREDITS:
6400                 err = l2cap_le_credits(conn, cmd, cmd_len, data);
6401                 break;
6402
6403         case L2CAP_ECRED_CONN_REQ:
6404                 err = l2cap_ecred_conn_req(conn, cmd, cmd_len, data);
6405                 break;
6406
6407         case L2CAP_ECRED_CONN_RSP:
6408                 err = l2cap_ecred_conn_rsp(conn, cmd, cmd_len, data);
6409                 break;
6410
6411         case L2CAP_ECRED_RECONF_REQ:
6412                 err = l2cap_ecred_reconf_req(conn, cmd, cmd_len, data);
6413                 break;
6414
6415         case L2CAP_ECRED_RECONF_RSP:
6416                 err = l2cap_ecred_reconf_rsp(conn, cmd, cmd_len, data);
6417                 break;
6418
6419         case L2CAP_DISCONN_REQ:
6420                 err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
6421                 break;
6422
6423         case L2CAP_DISCONN_RSP:
6424                 l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
6425                 break;
6426
6427         default:
6428                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
6429                 err = -EINVAL;
6430                 break;
6431         }
6432
6433         return err;
6434 }
6435
6436 static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
6437                                         struct sk_buff *skb)
6438 {
6439         struct hci_conn *hcon = conn->hcon;
6440         struct l2cap_cmd_hdr *cmd;
6441         u16 len;
6442         int err;
6443
6444         if (hcon->type != LE_LINK)
6445                 goto drop;
6446
6447         if (skb->len < L2CAP_CMD_HDR_SIZE)
6448                 goto drop;
6449
6450         cmd = (void *) skb->data;
6451         skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6452
6453         len = le16_to_cpu(cmd->len);
6454
6455         BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
6456
6457         if (len != skb->len || !cmd->ident) {
6458                 BT_DBG("corrupted command");
6459                 goto drop;
6460         }
6461
6462         err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
6463         if (err) {
6464                 struct l2cap_cmd_rej_unk rej;
6465
6466                 BT_ERR("Wrong link type (%d)", err);
6467
6468                 rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6469                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6470                                sizeof(rej), &rej);
6471         }
6472
6473 drop:
6474         kfree_skb(skb);
6475 }
6476
6477 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
6478                                      struct sk_buff *skb)
6479 {
6480         struct hci_conn *hcon = conn->hcon;
6481         struct l2cap_cmd_hdr *cmd;
6482         int err;
6483
6484         l2cap_raw_recv(conn, skb);
6485
6486         if (hcon->type != ACL_LINK)
6487                 goto drop;
6488
6489         while (skb->len >= L2CAP_CMD_HDR_SIZE) {
6490                 u16 len;
6491
6492                 cmd = (void *) skb->data;
6493                 skb_pull(skb, L2CAP_CMD_HDR_SIZE);
6494
6495                 len = le16_to_cpu(cmd->len);
6496
6497                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len,
6498                        cmd->ident);
6499
6500                 if (len > skb->len || !cmd->ident) {
6501                         BT_DBG("corrupted command");
6502                         break;
6503                 }
6504
6505                 err = l2cap_bredr_sig_cmd(conn, cmd, len, skb->data);
6506                 if (err) {
6507                         struct l2cap_cmd_rej_unk rej;
6508
6509                         BT_ERR("Wrong link type (%d)", err);
6510
6511                         rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
6512                         l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
6513                                        sizeof(rej), &rej);
6514                 }
6515
6516                 skb_pull(skb, len);
6517         }
6518
6519 drop:
6520         kfree_skb(skb);
6521 }
6522
6523 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
6524 {
6525         u16 our_fcs, rcv_fcs;
6526         int hdr_size;
6527
6528         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
6529                 hdr_size = L2CAP_EXT_HDR_SIZE;
6530         else
6531                 hdr_size = L2CAP_ENH_HDR_SIZE;
6532
6533         if (chan->fcs == L2CAP_FCS_CRC16) {
6534                 skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
6535                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
6536                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
6537
6538                 if (our_fcs != rcv_fcs)
6539                         return -EBADMSG;
6540         }
6541         return 0;
6542 }
6543
6544 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
6545 {
6546         struct l2cap_ctrl control;
6547
6548         BT_DBG("chan %p", chan);
6549
6550         memset(&control, 0, sizeof(control));
6551         control.sframe = 1;
6552         control.final = 1;
6553         control.reqseq = chan->buffer_seq;
6554         set_bit(CONN_SEND_FBIT, &chan->conn_state);
6555
6556         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6557                 control.super = L2CAP_SUPER_RNR;
6558                 l2cap_send_sframe(chan, &control);
6559         }
6560
6561         if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
6562             chan->unacked_frames > 0)
6563                 __set_retrans_timer(chan);
6564
6565         /* Send pending iframes */
6566         l2cap_ertm_send(chan);
6567
6568         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
6569             test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
6570                 /* F-bit wasn't sent in an s-frame or i-frame yet, so
6571                  * send it now.
6572                  */
6573                 control.super = L2CAP_SUPER_RR;
6574                 l2cap_send_sframe(chan, &control);
6575         }
6576 }
6577
6578 static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
6579                             struct sk_buff **last_frag)
6580 {
6581         /* skb->len reflects data in skb as well as all fragments
6582          * skb->data_len reflects only data in fragments
6583          */
6584         if (!skb_has_frag_list(skb))
6585                 skb_shinfo(skb)->frag_list = new_frag;
6586
6587         new_frag->next = NULL;
6588
6589         (*last_frag)->next = new_frag;
6590         *last_frag = new_frag;
6591
6592         skb->len += new_frag->len;
6593         skb->data_len += new_frag->len;
6594         skb->truesize += new_frag->truesize;
6595 }
6596
6597 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
6598                                 struct l2cap_ctrl *control)
6599 {
6600         int err = -EINVAL;
6601
6602         switch (control->sar) {
6603         case L2CAP_SAR_UNSEGMENTED:
6604                 if (chan->sdu)
6605                         break;
6606
6607                 err = chan->ops->recv(chan, skb);
6608                 break;
6609
6610         case L2CAP_SAR_START:
6611                 if (chan->sdu)
6612                         break;
6613
6614                 if (!pskb_may_pull(skb, L2CAP_SDULEN_SIZE))
6615                         break;
6616
6617                 chan->sdu_len = get_unaligned_le16(skb->data);
6618                 skb_pull(skb, L2CAP_SDULEN_SIZE);
6619
6620                 if (chan->sdu_len > chan->imtu) {
6621                         err = -EMSGSIZE;
6622                         break;
6623                 }
6624
6625                 if (skb->len >= chan->sdu_len)
6626                         break;
6627
6628                 chan->sdu = skb;
6629                 chan->sdu_last_frag = skb;
6630
6631                 skb = NULL;
6632                 err = 0;
6633                 break;
6634
6635         case L2CAP_SAR_CONTINUE:
6636                 if (!chan->sdu)
6637                         break;
6638
6639                 append_skb_frag(chan->sdu, skb,
6640                                 &chan->sdu_last_frag);
6641                 skb = NULL;
6642
6643                 if (chan->sdu->len >= chan->sdu_len)
6644                         break;
6645
6646                 err = 0;
6647                 break;
6648
6649         case L2CAP_SAR_END:
6650                 if (!chan->sdu)
6651                         break;
6652
6653                 append_skb_frag(chan->sdu, skb,
6654                                 &chan->sdu_last_frag);
6655                 skb = NULL;
6656
6657                 if (chan->sdu->len != chan->sdu_len)
6658                         break;
6659
6660                 err = chan->ops->recv(chan, chan->sdu);
6661
6662                 if (!err) {
6663                         /* Reassembly complete */
6664                         chan->sdu = NULL;
6665                         chan->sdu_last_frag = NULL;
6666                         chan->sdu_len = 0;
6667                 }
6668                 break;
6669         }
6670
6671         if (err) {
6672                 kfree_skb(skb);
6673                 kfree_skb(chan->sdu);
6674                 chan->sdu = NULL;
6675                 chan->sdu_last_frag = NULL;
6676                 chan->sdu_len = 0;
6677         }
6678
6679         return err;
6680 }
6681
6682 static int l2cap_resegment(struct l2cap_chan *chan)
6683 {
6684         /* Placeholder */
6685         return 0;
6686 }
6687
6688 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
6689 {
6690         u8 event;
6691
6692         if (chan->mode != L2CAP_MODE_ERTM)
6693                 return;
6694
6695         event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
6696         l2cap_tx(chan, NULL, NULL, event);
6697 }
6698
6699 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
6700 {
6701         int err = 0;
6702         /* Pass sequential frames to l2cap_reassemble_sdu()
6703          * until a gap is encountered.
6704          */
6705
6706         BT_DBG("chan %p", chan);
6707
6708         while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6709                 struct sk_buff *skb;
6710                 BT_DBG("Searching for skb with txseq %d (queue len %d)",
6711                        chan->buffer_seq, skb_queue_len(&chan->srej_q));
6712
6713                 skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
6714
6715                 if (!skb)
6716                         break;
6717
6718                 skb_unlink(skb, &chan->srej_q);
6719                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6720                 err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->l2cap);
6721                 if (err)
6722                         break;
6723         }
6724
6725         if (skb_queue_empty(&chan->srej_q)) {
6726                 chan->rx_state = L2CAP_RX_STATE_RECV;
6727                 l2cap_send_ack(chan);
6728         }
6729
6730         return err;
6731 }
6732
6733 static void l2cap_handle_srej(struct l2cap_chan *chan,
6734                               struct l2cap_ctrl *control)
6735 {
6736         struct sk_buff *skb;
6737
6738         BT_DBG("chan %p, control %p", chan, control);
6739
6740         if (control->reqseq == chan->next_tx_seq) {
6741                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6742                 l2cap_send_disconn_req(chan, ECONNRESET);
6743                 return;
6744         }
6745
6746         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6747
6748         if (skb == NULL) {
6749                 BT_DBG("Seq %d not available for retransmission",
6750                        control->reqseq);
6751                 return;
6752         }
6753
6754         if (chan->max_tx != 0 && bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6755                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6756                 l2cap_send_disconn_req(chan, ECONNRESET);
6757                 return;
6758         }
6759
6760         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6761
6762         if (control->poll) {
6763                 l2cap_pass_to_tx(chan, control);
6764
6765                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
6766                 l2cap_retransmit(chan, control);
6767                 l2cap_ertm_send(chan);
6768
6769                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6770                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
6771                         chan->srej_save_reqseq = control->reqseq;
6772                 }
6773         } else {
6774                 l2cap_pass_to_tx_fbit(chan, control);
6775
6776                 if (control->final) {
6777                         if (chan->srej_save_reqseq != control->reqseq ||
6778                             !test_and_clear_bit(CONN_SREJ_ACT,
6779                                                 &chan->conn_state))
6780                                 l2cap_retransmit(chan, control);
6781                 } else {
6782                         l2cap_retransmit(chan, control);
6783                         if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
6784                                 set_bit(CONN_SREJ_ACT, &chan->conn_state);
6785                                 chan->srej_save_reqseq = control->reqseq;
6786                         }
6787                 }
6788         }
6789 }
6790
6791 static void l2cap_handle_rej(struct l2cap_chan *chan,
6792                              struct l2cap_ctrl *control)
6793 {
6794         struct sk_buff *skb;
6795
6796         BT_DBG("chan %p, control %p", chan, control);
6797
6798         if (control->reqseq == chan->next_tx_seq) {
6799                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
6800                 l2cap_send_disconn_req(chan, ECONNRESET);
6801                 return;
6802         }
6803
6804         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
6805
6806         if (chan->max_tx && skb &&
6807             bt_cb(skb)->l2cap.retries >= chan->max_tx) {
6808                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
6809                 l2cap_send_disconn_req(chan, ECONNRESET);
6810                 return;
6811         }
6812
6813         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6814
6815         l2cap_pass_to_tx(chan, control);
6816
6817         if (control->final) {
6818                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
6819                         l2cap_retransmit_all(chan, control);
6820         } else {
6821                 l2cap_retransmit_all(chan, control);
6822                 l2cap_ertm_send(chan);
6823                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
6824                         set_bit(CONN_REJ_ACT, &chan->conn_state);
6825         }
6826 }
6827
6828 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
6829 {
6830         BT_DBG("chan %p, txseq %d", chan, txseq);
6831
6832         BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
6833                chan->expected_tx_seq);
6834
6835         if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
6836                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6837                     chan->tx_win) {
6838                         /* See notes below regarding "double poll" and
6839                          * invalid packets.
6840                          */
6841                         if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6842                                 BT_DBG("Invalid/Ignore - after SREJ");
6843                                 return L2CAP_TXSEQ_INVALID_IGNORE;
6844                         } else {
6845                                 BT_DBG("Invalid - in window after SREJ sent");
6846                                 return L2CAP_TXSEQ_INVALID;
6847                         }
6848                 }
6849
6850                 if (chan->srej_list.head == txseq) {
6851                         BT_DBG("Expected SREJ");
6852                         return L2CAP_TXSEQ_EXPECTED_SREJ;
6853                 }
6854
6855                 if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
6856                         BT_DBG("Duplicate SREJ - txseq already stored");
6857                         return L2CAP_TXSEQ_DUPLICATE_SREJ;
6858                 }
6859
6860                 if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
6861                         BT_DBG("Unexpected SREJ - not requested");
6862                         return L2CAP_TXSEQ_UNEXPECTED_SREJ;
6863                 }
6864         }
6865
6866         if (chan->expected_tx_seq == txseq) {
6867                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
6868                     chan->tx_win) {
6869                         BT_DBG("Invalid - txseq outside tx window");
6870                         return L2CAP_TXSEQ_INVALID;
6871                 } else {
6872                         BT_DBG("Expected");
6873                         return L2CAP_TXSEQ_EXPECTED;
6874                 }
6875         }
6876
6877         if (__seq_offset(chan, txseq, chan->last_acked_seq) <
6878             __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
6879                 BT_DBG("Duplicate - expected_tx_seq later than txseq");
6880                 return L2CAP_TXSEQ_DUPLICATE;
6881         }
6882
6883         if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
6884                 /* A source of invalid packets is a "double poll" condition,
6885                  * where delays cause us to send multiple poll packets.  If
6886                  * the remote stack receives and processes both polls,
6887                  * sequence numbers can wrap around in such a way that a
6888                  * resent frame has a sequence number that looks like new data
6889                  * with a sequence gap.  This would trigger an erroneous SREJ
6890                  * request.
6891                  *
6892                  * Fortunately, this is impossible with a tx window that's
6893                  * less than half of the maximum sequence number, which allows
6894                  * invalid frames to be safely ignored.
6895                  *
6896                  * With tx window sizes greater than half of the tx window
6897                  * maximum, the frame is invalid and cannot be ignored.  This
6898                  * causes a disconnect.
6899                  */
6900
6901                 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
6902                         BT_DBG("Invalid/Ignore - txseq outside tx window");
6903                         return L2CAP_TXSEQ_INVALID_IGNORE;
6904                 } else {
6905                         BT_DBG("Invalid - txseq outside tx window");
6906                         return L2CAP_TXSEQ_INVALID;
6907                 }
6908         } else {
6909                 BT_DBG("Unexpected - txseq indicates missing frames");
6910                 return L2CAP_TXSEQ_UNEXPECTED;
6911         }
6912 }
6913
6914 static int l2cap_rx_state_recv(struct l2cap_chan *chan,
6915                                struct l2cap_ctrl *control,
6916                                struct sk_buff *skb, u8 event)
6917 {
6918         struct l2cap_ctrl local_control;
6919         int err = 0;
6920         bool skb_in_use = false;
6921
6922         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6923                event);
6924
6925         switch (event) {
6926         case L2CAP_EV_RECV_IFRAME:
6927                 switch (l2cap_classify_txseq(chan, control->txseq)) {
6928                 case L2CAP_TXSEQ_EXPECTED:
6929                         l2cap_pass_to_tx(chan, control);
6930
6931                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6932                                 BT_DBG("Busy, discarding expected seq %d",
6933                                        control->txseq);
6934                                 break;
6935                         }
6936
6937                         chan->expected_tx_seq = __next_seq(chan,
6938                                                            control->txseq);
6939
6940                         chan->buffer_seq = chan->expected_tx_seq;
6941                         skb_in_use = true;
6942
6943                         /* l2cap_reassemble_sdu may free skb, hence invalidate
6944                          * control, so make a copy in advance to use it after
6945                          * l2cap_reassemble_sdu returns and to avoid the race
6946                          * condition, for example:
6947                          *
6948                          * The current thread calls:
6949                          *   l2cap_reassemble_sdu
6950                          *     chan->ops->recv == l2cap_sock_recv_cb
6951                          *       __sock_queue_rcv_skb
6952                          * Another thread calls:
6953                          *   bt_sock_recvmsg
6954                          *     skb_recv_datagram
6955                          *     skb_free_datagram
6956                          * Then the current thread tries to access control, but
6957                          * it was freed by skb_free_datagram.
6958                          */
6959                         local_control = *control;
6960                         err = l2cap_reassemble_sdu(chan, skb, control);
6961                         if (err)
6962                                 break;
6963
6964                         if (local_control.final) {
6965                                 if (!test_and_clear_bit(CONN_REJ_ACT,
6966                                                         &chan->conn_state)) {
6967                                         local_control.final = 0;
6968                                         l2cap_retransmit_all(chan, &local_control);
6969                                         l2cap_ertm_send(chan);
6970                                 }
6971                         }
6972
6973                         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
6974                                 l2cap_send_ack(chan);
6975                         break;
6976                 case L2CAP_TXSEQ_UNEXPECTED:
6977                         l2cap_pass_to_tx(chan, control);
6978
6979                         /* Can't issue SREJ frames in the local busy state.
6980                          * Drop this frame, it will be seen as missing
6981                          * when local busy is exited.
6982                          */
6983                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
6984                                 BT_DBG("Busy, discarding unexpected seq %d",
6985                                        control->txseq);
6986                                 break;
6987                         }
6988
6989                         /* There was a gap in the sequence, so an SREJ
6990                          * must be sent for each missing frame.  The
6991                          * current frame is stored for later use.
6992                          */
6993                         skb_queue_tail(&chan->srej_q, skb);
6994                         skb_in_use = true;
6995                         BT_DBG("Queued %p (queue len %d)", skb,
6996                                skb_queue_len(&chan->srej_q));
6997
6998                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
6999                         l2cap_seq_list_clear(&chan->srej_list);
7000                         l2cap_send_srej(chan, control->txseq);
7001
7002                         chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
7003                         break;
7004                 case L2CAP_TXSEQ_DUPLICATE:
7005                         l2cap_pass_to_tx(chan, control);
7006                         break;
7007                 case L2CAP_TXSEQ_INVALID_IGNORE:
7008                         break;
7009                 case L2CAP_TXSEQ_INVALID:
7010                 default:
7011                         l2cap_send_disconn_req(chan, ECONNRESET);
7012                         break;
7013                 }
7014                 break;
7015         case L2CAP_EV_RECV_RR:
7016                 l2cap_pass_to_tx(chan, control);
7017                 if (control->final) {
7018                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7019
7020                         if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
7021                             !__chan_is_moving(chan)) {
7022                                 control->final = 0;
7023                                 l2cap_retransmit_all(chan, control);
7024                         }
7025
7026                         l2cap_ertm_send(chan);
7027                 } else if (control->poll) {
7028                         l2cap_send_i_or_rr_or_rnr(chan);
7029                 } else {
7030                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
7031                                                &chan->conn_state) &&
7032                             chan->unacked_frames)
7033                                 __set_retrans_timer(chan);
7034
7035                         l2cap_ertm_send(chan);
7036                 }
7037                 break;
7038         case L2CAP_EV_RECV_RNR:
7039                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7040                 l2cap_pass_to_tx(chan, control);
7041                 if (control && control->poll) {
7042                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
7043                         l2cap_send_rr_or_rnr(chan, 0);
7044                 }
7045                 __clear_retrans_timer(chan);
7046                 l2cap_seq_list_clear(&chan->retrans_list);
7047                 break;
7048         case L2CAP_EV_RECV_REJ:
7049                 l2cap_handle_rej(chan, control);
7050                 break;
7051         case L2CAP_EV_RECV_SREJ:
7052                 l2cap_handle_srej(chan, control);
7053                 break;
7054         default:
7055                 break;
7056         }
7057
7058         if (skb && !skb_in_use) {
7059                 BT_DBG("Freeing %p", skb);
7060                 kfree_skb(skb);
7061         }
7062
7063         return err;
7064 }
7065
7066 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
7067                                     struct l2cap_ctrl *control,
7068                                     struct sk_buff *skb, u8 event)
7069 {
7070         int err = 0;
7071         u16 txseq = control->txseq;
7072         bool skb_in_use = false;
7073
7074         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
7075                event);
7076
7077         switch (event) {
7078         case L2CAP_EV_RECV_IFRAME:
7079                 switch (l2cap_classify_txseq(chan, txseq)) {
7080                 case L2CAP_TXSEQ_EXPECTED:
7081                         /* Keep frame for reassembly later */
7082                         l2cap_pass_to_tx(chan, control);
7083                         skb_queue_tail(&chan->srej_q, skb);
7084                         skb_in_use = true;
7085                         BT_DBG("Queued %p (queue len %d)", skb,
7086                                skb_queue_len(&chan->srej_q));
7087
7088                         chan->expected_tx_seq = __next_seq(chan, txseq);
7089                         break;
7090                 case L2CAP_TXSEQ_EXPECTED_SREJ:
7091                         l2cap_seq_list_pop(&chan->srej_list);
7092
7093                         l2cap_pass_to_tx(chan, control);
7094                         skb_queue_tail(&chan->srej_q, skb);
7095                         skb_in_use = true;
7096                         BT_DBG("Queued %p (queue len %d)", skb,
7097                                skb_queue_len(&chan->srej_q));
7098
7099                         err = l2cap_rx_queued_iframes(chan);
7100                         if (err)
7101                                 break;
7102
7103                         break;
7104                 case L2CAP_TXSEQ_UNEXPECTED:
7105                         /* Got a frame that can't be reassembled yet.
7106                          * Save it for later, and send SREJs to cover
7107                          * the missing frames.
7108                          */
7109                         skb_queue_tail(&chan->srej_q, skb);
7110                         skb_in_use = true;
7111                         BT_DBG("Queued %p (queue len %d)", skb,
7112                                skb_queue_len(&chan->srej_q));
7113
7114                         l2cap_pass_to_tx(chan, control);
7115                         l2cap_send_srej(chan, control->txseq);
7116                         break;
7117                 case L2CAP_TXSEQ_UNEXPECTED_SREJ:
7118                         /* This frame was requested with an SREJ, but
7119                          * some expected retransmitted frames are
7120                          * missing.  Request retransmission of missing
7121                          * SREJ'd frames.
7122                          */
7123                         skb_queue_tail(&chan->srej_q, skb);
7124                         skb_in_use = true;
7125                         BT_DBG("Queued %p (queue len %d)", skb,
7126                                skb_queue_len(&chan->srej_q));
7127
7128                         l2cap_pass_to_tx(chan, control);
7129                         l2cap_send_srej_list(chan, control->txseq);
7130                         break;
7131                 case L2CAP_TXSEQ_DUPLICATE_SREJ:
7132                         /* We've already queued this frame.  Drop this copy. */
7133                         l2cap_pass_to_tx(chan, control);
7134                         break;
7135                 case L2CAP_TXSEQ_DUPLICATE:
7136                         /* Expecting a later sequence number, so this frame
7137                          * was already received.  Ignore it completely.
7138                          */
7139                         break;
7140                 case L2CAP_TXSEQ_INVALID_IGNORE:
7141                         break;
7142                 case L2CAP_TXSEQ_INVALID:
7143                 default:
7144                         l2cap_send_disconn_req(chan, ECONNRESET);
7145                         break;
7146                 }
7147                 break;
7148         case L2CAP_EV_RECV_RR:
7149                 l2cap_pass_to_tx(chan, control);
7150                 if (control->final) {
7151                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7152
7153                         if (!test_and_clear_bit(CONN_REJ_ACT,
7154                                                 &chan->conn_state)) {
7155                                 control->final = 0;
7156                                 l2cap_retransmit_all(chan, control);
7157                         }
7158
7159                         l2cap_ertm_send(chan);
7160                 } else if (control->poll) {
7161                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
7162                                                &chan->conn_state) &&
7163                             chan->unacked_frames) {
7164                                 __set_retrans_timer(chan);
7165                         }
7166
7167                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
7168                         l2cap_send_srej_tail(chan);
7169                 } else {
7170                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
7171                                                &chan->conn_state) &&
7172                             chan->unacked_frames)
7173                                 __set_retrans_timer(chan);
7174
7175                         l2cap_send_ack(chan);
7176                 }
7177                 break;
7178         case L2CAP_EV_RECV_RNR:
7179                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7180                 l2cap_pass_to_tx(chan, control);
7181                 if (control->poll) {
7182                         l2cap_send_srej_tail(chan);
7183                 } else {
7184                         struct l2cap_ctrl rr_control;
7185                         memset(&rr_control, 0, sizeof(rr_control));
7186                         rr_control.sframe = 1;
7187                         rr_control.super = L2CAP_SUPER_RR;
7188                         rr_control.reqseq = chan->buffer_seq;
7189                         l2cap_send_sframe(chan, &rr_control);
7190                 }
7191
7192                 break;
7193         case L2CAP_EV_RECV_REJ:
7194                 l2cap_handle_rej(chan, control);
7195                 break;
7196         case L2CAP_EV_RECV_SREJ:
7197                 l2cap_handle_srej(chan, control);
7198                 break;
7199         }
7200
7201         if (skb && !skb_in_use) {
7202                 BT_DBG("Freeing %p", skb);
7203                 kfree_skb(skb);
7204         }
7205
7206         return err;
7207 }
7208
7209 static int l2cap_finish_move(struct l2cap_chan *chan)
7210 {
7211         BT_DBG("chan %p", chan);
7212
7213         chan->rx_state = L2CAP_RX_STATE_RECV;
7214
7215         if (chan->hs_hcon)
7216                 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7217         else
7218                 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7219
7220         return l2cap_resegment(chan);
7221 }
7222
7223 static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
7224                                  struct l2cap_ctrl *control,
7225                                  struct sk_buff *skb, u8 event)
7226 {
7227         int err;
7228
7229         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
7230                event);
7231
7232         if (!control->poll)
7233                 return -EPROTO;
7234
7235         l2cap_process_reqseq(chan, control->reqseq);
7236
7237         if (!skb_queue_empty(&chan->tx_q))
7238                 chan->tx_send_head = skb_peek(&chan->tx_q);
7239         else
7240                 chan->tx_send_head = NULL;
7241
7242         /* Rewind next_tx_seq to the point expected
7243          * by the receiver.
7244          */
7245         chan->next_tx_seq = control->reqseq;
7246         chan->unacked_frames = 0;
7247
7248         err = l2cap_finish_move(chan);
7249         if (err)
7250                 return err;
7251
7252         set_bit(CONN_SEND_FBIT, &chan->conn_state);
7253         l2cap_send_i_or_rr_or_rnr(chan);
7254
7255         if (event == L2CAP_EV_RECV_IFRAME)
7256                 return -EPROTO;
7257
7258         return l2cap_rx_state_recv(chan, control, NULL, event);
7259 }
7260
7261 static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
7262                                  struct l2cap_ctrl *control,
7263                                  struct sk_buff *skb, u8 event)
7264 {
7265         int err;
7266
7267         if (!control->final)
7268                 return -EPROTO;
7269
7270         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
7271
7272         chan->rx_state = L2CAP_RX_STATE_RECV;
7273         l2cap_process_reqseq(chan, control->reqseq);
7274
7275         if (!skb_queue_empty(&chan->tx_q))
7276                 chan->tx_send_head = skb_peek(&chan->tx_q);
7277         else
7278                 chan->tx_send_head = NULL;
7279
7280         /* Rewind next_tx_seq to the point expected
7281          * by the receiver.
7282          */
7283         chan->next_tx_seq = control->reqseq;
7284         chan->unacked_frames = 0;
7285
7286         if (chan->hs_hcon)
7287                 chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
7288         else
7289                 chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
7290
7291         err = l2cap_resegment(chan);
7292
7293         if (!err)
7294                 err = l2cap_rx_state_recv(chan, control, skb, event);
7295
7296         return err;
7297 }
7298
7299 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
7300 {
7301         /* Make sure reqseq is for a packet that has been sent but not acked */
7302         u16 unacked;
7303
7304         unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
7305         return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
7306 }
7307
7308 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7309                     struct sk_buff *skb, u8 event)
7310 {
7311         int err = 0;
7312
7313         BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
7314                control, skb, event, chan->rx_state);
7315
7316         if (__valid_reqseq(chan, control->reqseq)) {
7317                 switch (chan->rx_state) {
7318                 case L2CAP_RX_STATE_RECV:
7319                         err = l2cap_rx_state_recv(chan, control, skb, event);
7320                         break;
7321                 case L2CAP_RX_STATE_SREJ_SENT:
7322                         err = l2cap_rx_state_srej_sent(chan, control, skb,
7323                                                        event);
7324                         break;
7325                 case L2CAP_RX_STATE_WAIT_P:
7326                         err = l2cap_rx_state_wait_p(chan, control, skb, event);
7327                         break;
7328                 case L2CAP_RX_STATE_WAIT_F:
7329                         err = l2cap_rx_state_wait_f(chan, control, skb, event);
7330                         break;
7331                 default:
7332                         /* shut it down */
7333                         break;
7334                 }
7335         } else {
7336                 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
7337                        control->reqseq, chan->next_tx_seq,
7338                        chan->expected_ack_seq);
7339                 l2cap_send_disconn_req(chan, ECONNRESET);
7340         }
7341
7342         return err;
7343 }
7344
7345 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
7346                            struct sk_buff *skb)
7347 {
7348         /* l2cap_reassemble_sdu may free skb, hence invalidate control, so store
7349          * the txseq field in advance to use it after l2cap_reassemble_sdu
7350          * returns and to avoid the race condition, for example:
7351          *
7352          * The current thread calls:
7353          *   l2cap_reassemble_sdu
7354          *     chan->ops->recv == l2cap_sock_recv_cb
7355          *       __sock_queue_rcv_skb
7356          * Another thread calls:
7357          *   bt_sock_recvmsg
7358          *     skb_recv_datagram
7359          *     skb_free_datagram
7360          * Then the current thread tries to access control, but it was freed by
7361          * skb_free_datagram.
7362          */
7363         u16 txseq = control->txseq;
7364
7365         BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
7366                chan->rx_state);
7367
7368         if (l2cap_classify_txseq(chan, txseq) == L2CAP_TXSEQ_EXPECTED) {
7369                 l2cap_pass_to_tx(chan, control);
7370
7371                 BT_DBG("buffer_seq %u->%u", chan->buffer_seq,
7372                        __next_seq(chan, chan->buffer_seq));
7373
7374                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
7375
7376                 l2cap_reassemble_sdu(chan, skb, control);
7377         } else {
7378                 if (chan->sdu) {
7379                         kfree_skb(chan->sdu);
7380                         chan->sdu = NULL;
7381                 }
7382                 chan->sdu_last_frag = NULL;
7383                 chan->sdu_len = 0;
7384
7385                 if (skb) {
7386                         BT_DBG("Freeing %p", skb);
7387                         kfree_skb(skb);
7388                 }
7389         }
7390
7391         chan->last_acked_seq = txseq;
7392         chan->expected_tx_seq = __next_seq(chan, txseq);
7393
7394         return 0;
7395 }
7396
7397 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7398 {
7399         struct l2cap_ctrl *control = &bt_cb(skb)->l2cap;
7400         u16 len;
7401         u8 event;
7402
7403         __unpack_control(chan, skb);
7404
7405         len = skb->len;
7406
7407         /*
7408          * We can just drop the corrupted I-frame here.
7409          * Receiver will miss it and start proper recovery
7410          * procedures and ask for retransmission.
7411          */
7412         if (l2cap_check_fcs(chan, skb))
7413                 goto drop;
7414
7415         if (!control->sframe && control->sar == L2CAP_SAR_START)
7416                 len -= L2CAP_SDULEN_SIZE;
7417
7418         if (chan->fcs == L2CAP_FCS_CRC16)
7419                 len -= L2CAP_FCS_SIZE;
7420
7421         if (len > chan->mps) {
7422                 l2cap_send_disconn_req(chan, ECONNRESET);
7423                 goto drop;
7424         }
7425
7426         if (chan->ops->filter) {
7427                 if (chan->ops->filter(chan, skb))
7428                         goto drop;
7429         }
7430
7431         if (!control->sframe) {
7432                 int err;
7433
7434                 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
7435                        control->sar, control->reqseq, control->final,
7436                        control->txseq);
7437
7438                 /* Validate F-bit - F=0 always valid, F=1 only
7439                  * valid in TX WAIT_F
7440                  */
7441                 if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
7442                         goto drop;
7443
7444                 if (chan->mode != L2CAP_MODE_STREAMING) {
7445                         event = L2CAP_EV_RECV_IFRAME;
7446                         err = l2cap_rx(chan, control, skb, event);
7447                 } else {
7448                         err = l2cap_stream_rx(chan, control, skb);
7449                 }
7450
7451                 if (err)
7452                         l2cap_send_disconn_req(chan, ECONNRESET);
7453         } else {
7454                 const u8 rx_func_to_event[4] = {
7455                         L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
7456                         L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
7457                 };
7458
7459                 /* Only I-frames are expected in streaming mode */
7460                 if (chan->mode == L2CAP_MODE_STREAMING)
7461                         goto drop;
7462
7463                 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
7464                        control->reqseq, control->final, control->poll,
7465                        control->super);
7466
7467                 if (len != 0) {
7468                         BT_ERR("Trailing bytes: %d in sframe", len);
7469                         l2cap_send_disconn_req(chan, ECONNRESET);
7470                         goto drop;
7471                 }
7472
7473                 /* Validate F and P bits */
7474                 if (control->final && (control->poll ||
7475                                        chan->tx_state != L2CAP_TX_STATE_WAIT_F))
7476                         goto drop;
7477
7478                 event = rx_func_to_event[control->super];
7479                 if (l2cap_rx(chan, control, skb, event))
7480                         l2cap_send_disconn_req(chan, ECONNRESET);
7481         }
7482
7483         return 0;
7484
7485 drop:
7486         kfree_skb(skb);
7487         return 0;
7488 }
7489
7490 static void l2cap_chan_le_send_credits(struct l2cap_chan *chan)
7491 {
7492         struct l2cap_conn *conn = chan->conn;
7493         struct l2cap_le_credits pkt;
7494         u16 return_credits;
7495
7496         return_credits = (chan->imtu / chan->mps) + 1;
7497
7498         if (chan->rx_credits >= return_credits)
7499                 return;
7500
7501         return_credits -= chan->rx_credits;
7502
7503         BT_DBG("chan %p returning %u credits to sender", chan, return_credits);
7504
7505         chan->rx_credits += return_credits;
7506
7507         pkt.cid     = cpu_to_le16(chan->scid);
7508         pkt.credits = cpu_to_le16(return_credits);
7509
7510         chan->ident = l2cap_get_ident(conn);
7511
7512         l2cap_send_cmd(conn, chan->ident, L2CAP_LE_CREDITS, sizeof(pkt), &pkt);
7513 }
7514
7515 static int l2cap_ecred_recv(struct l2cap_chan *chan, struct sk_buff *skb)
7516 {
7517         int err;
7518
7519         BT_DBG("SDU reassemble complete: chan %p skb->len %u", chan, skb->len);
7520
7521         /* Wait recv to confirm reception before updating the credits */
7522         err = chan->ops->recv(chan, skb);
7523
7524         /* Update credits whenever an SDU is received */
7525         l2cap_chan_le_send_credits(chan);
7526
7527         return err;
7528 }
7529
7530 static int l2cap_ecred_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
7531 {
7532         int err;
7533
7534         if (!chan->rx_credits) {
7535                 BT_ERR("No credits to receive LE L2CAP data");
7536                 l2cap_send_disconn_req(chan, ECONNRESET);
7537                 return -ENOBUFS;
7538         }
7539
7540         if (chan->imtu < skb->len) {
7541                 BT_ERR("Too big LE L2CAP PDU");
7542                 return -ENOBUFS;
7543         }
7544
7545         chan->rx_credits--;
7546         BT_DBG("rx_credits %u -> %u", chan->rx_credits + 1, chan->rx_credits);
7547
7548         /* Update if remote had run out of credits, this should only happens
7549          * if the remote is not using the entire MPS.
7550          */
7551         if (!chan->rx_credits)
7552                 l2cap_chan_le_send_credits(chan);
7553
7554         err = 0;
7555
7556         if (!chan->sdu) {
7557                 u16 sdu_len;
7558
7559                 sdu_len = get_unaligned_le16(skb->data);
7560                 skb_pull(skb, L2CAP_SDULEN_SIZE);
7561
7562                 BT_DBG("Start of new SDU. sdu_len %u skb->len %u imtu %u",
7563                        sdu_len, skb->len, chan->imtu);
7564
7565                 if (sdu_len > chan->imtu) {
7566                         BT_ERR("Too big LE L2CAP SDU length received");
7567                         err = -EMSGSIZE;
7568                         goto failed;
7569                 }
7570
7571                 if (skb->len > sdu_len) {
7572                         BT_ERR("Too much LE L2CAP data received");
7573                         err = -EINVAL;
7574                         goto failed;
7575                 }
7576
7577                 if (skb->len == sdu_len)
7578                         return l2cap_ecred_recv(chan, skb);
7579
7580                 chan->sdu = skb;
7581                 chan->sdu_len = sdu_len;
7582                 chan->sdu_last_frag = skb;
7583
7584                 /* Detect if remote is not able to use the selected MPS */
7585                 if (skb->len + L2CAP_SDULEN_SIZE < chan->mps) {
7586                         u16 mps_len = skb->len + L2CAP_SDULEN_SIZE;
7587
7588                         /* Adjust the number of credits */
7589                         BT_DBG("chan->mps %u -> %u", chan->mps, mps_len);
7590                         chan->mps = mps_len;
7591                         l2cap_chan_le_send_credits(chan);
7592                 }
7593
7594                 return 0;
7595         }
7596
7597         BT_DBG("SDU fragment. chan->sdu->len %u skb->len %u chan->sdu_len %u",
7598                chan->sdu->len, skb->len, chan->sdu_len);
7599
7600         if (chan->sdu->len + skb->len > chan->sdu_len) {
7601                 BT_ERR("Too much LE L2CAP data received");
7602                 err = -EINVAL;
7603                 goto failed;
7604         }
7605
7606         append_skb_frag(chan->sdu, skb, &chan->sdu_last_frag);
7607         skb = NULL;
7608
7609         if (chan->sdu->len == chan->sdu_len) {
7610                 err = l2cap_ecred_recv(chan, chan->sdu);
7611                 if (!err) {
7612                         chan->sdu = NULL;
7613                         chan->sdu_last_frag = NULL;
7614                         chan->sdu_len = 0;
7615                 }
7616         }
7617
7618 failed:
7619         if (err) {
7620                 kfree_skb(skb);
7621                 kfree_skb(chan->sdu);
7622                 chan->sdu = NULL;
7623                 chan->sdu_last_frag = NULL;
7624                 chan->sdu_len = 0;
7625         }
7626
7627         /* We can't return an error here since we took care of the skb
7628          * freeing internally. An error return would cause the caller to
7629          * do a double-free of the skb.
7630          */
7631         return 0;
7632 }
7633
7634 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
7635                                struct sk_buff *skb)
7636 {
7637         struct l2cap_chan *chan;
7638
7639         chan = l2cap_get_chan_by_scid(conn, cid);
7640         if (!chan) {
7641                 if (cid == L2CAP_CID_A2MP) {
7642                         chan = a2mp_channel_create(conn, skb);
7643                         if (!chan) {
7644                                 kfree_skb(skb);
7645                                 return;
7646                         }
7647
7648                         l2cap_chan_hold(chan);
7649                         l2cap_chan_lock(chan);
7650                 } else {
7651                         BT_DBG("unknown cid 0x%4.4x", cid);
7652                         /* Drop packet and return */
7653                         kfree_skb(skb);
7654                         return;
7655                 }
7656         }
7657
7658         BT_DBG("chan %p, len %d", chan, skb->len);
7659
7660         /* If we receive data on a fixed channel before the info req/rsp
7661          * procedure is done simply assume that the channel is supported
7662          * and mark it as ready.
7663          */
7664         if (chan->chan_type == L2CAP_CHAN_FIXED)
7665                 l2cap_chan_ready(chan);
7666
7667         if (chan->state != BT_CONNECTED)
7668                 goto drop;
7669
7670         switch (chan->mode) {
7671         case L2CAP_MODE_LE_FLOWCTL:
7672         case L2CAP_MODE_EXT_FLOWCTL:
7673                 if (l2cap_ecred_data_rcv(chan, skb) < 0)
7674                         goto drop;
7675
7676                 goto done;
7677
7678         case L2CAP_MODE_BASIC:
7679                 /* If socket recv buffers overflows we drop data here
7680                  * which is *bad* because L2CAP has to be reliable.
7681                  * But we don't have any other choice. L2CAP doesn't
7682                  * provide flow control mechanism. */
7683
7684                 if (chan->imtu < skb->len) {
7685                         BT_ERR("Dropping L2CAP data: receive buffer overflow");
7686                         goto drop;
7687                 }
7688
7689                 if (!chan->ops->recv(chan, skb))
7690                         goto done;
7691                 break;
7692
7693         case L2CAP_MODE_ERTM:
7694         case L2CAP_MODE_STREAMING:
7695                 l2cap_data_rcv(chan, skb);
7696                 goto done;
7697
7698         default:
7699                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
7700                 break;
7701         }
7702
7703 drop:
7704         kfree_skb(skb);
7705
7706 done:
7707         l2cap_chan_unlock(chan);
7708         l2cap_chan_put(chan);
7709 }
7710
7711 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
7712                                   struct sk_buff *skb)
7713 {
7714         struct hci_conn *hcon = conn->hcon;
7715         struct l2cap_chan *chan;
7716
7717         if (hcon->type != ACL_LINK)
7718                 goto free_skb;
7719
7720         chan = l2cap_global_chan_by_psm(0, psm, &hcon->src, &hcon->dst,
7721                                         ACL_LINK);
7722         if (!chan)
7723                 goto free_skb;
7724
7725         BT_DBG("chan %p, len %d", chan, skb->len);
7726
7727         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
7728                 goto drop;
7729
7730         if (chan->imtu < skb->len)
7731                 goto drop;
7732
7733         /* Store remote BD_ADDR and PSM for msg_name */
7734         bacpy(&bt_cb(skb)->l2cap.bdaddr, &hcon->dst);
7735         bt_cb(skb)->l2cap.psm = psm;
7736
7737         if (!chan->ops->recv(chan, skb)) {
7738                 l2cap_chan_put(chan);
7739                 return;
7740         }
7741
7742 drop:
7743         l2cap_chan_put(chan);
7744 free_skb:
7745         kfree_skb(skb);
7746 }
7747
7748 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
7749 {
7750         struct l2cap_hdr *lh = (void *) skb->data;
7751         struct hci_conn *hcon = conn->hcon;
7752         u16 cid, len;
7753         __le16 psm;
7754
7755         if (hcon->state != BT_CONNECTED) {
7756                 BT_DBG("queueing pending rx skb");
7757                 skb_queue_tail(&conn->pending_rx, skb);
7758                 return;
7759         }
7760
7761         skb_pull(skb, L2CAP_HDR_SIZE);
7762         cid = __le16_to_cpu(lh->cid);
7763         len = __le16_to_cpu(lh->len);
7764
7765         if (len != skb->len) {
7766                 kfree_skb(skb);
7767                 return;
7768         }
7769
7770         /* Since we can't actively block incoming LE connections we must
7771          * at least ensure that we ignore incoming data from them.
7772          */
7773         if (hcon->type == LE_LINK &&
7774             hci_bdaddr_list_lookup(&hcon->hdev->reject_list, &hcon->dst,
7775                                    bdaddr_dst_type(hcon))) {
7776                 kfree_skb(skb);
7777                 return;
7778         }
7779
7780         BT_DBG("len %d, cid 0x%4.4x", len, cid);
7781
7782         switch (cid) {
7783         case L2CAP_CID_SIGNALING:
7784                 l2cap_sig_channel(conn, skb);
7785                 break;
7786
7787         case L2CAP_CID_CONN_LESS:
7788                 psm = get_unaligned((__le16 *) skb->data);
7789                 skb_pull(skb, L2CAP_PSMLEN_SIZE);
7790                 l2cap_conless_channel(conn, psm, skb);
7791                 break;
7792
7793         case L2CAP_CID_LE_SIGNALING:
7794                 l2cap_le_sig_channel(conn, skb);
7795                 break;
7796
7797         default:
7798                 l2cap_data_channel(conn, cid, skb);
7799                 break;
7800         }
7801 }
7802
7803 static void process_pending_rx(struct work_struct *work)
7804 {
7805         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
7806                                                pending_rx_work);
7807         struct sk_buff *skb;
7808
7809         BT_DBG("");
7810
7811         while ((skb = skb_dequeue(&conn->pending_rx)))
7812                 l2cap_recv_frame(conn, skb);
7813 }
7814
7815 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
7816 {
7817         struct l2cap_conn *conn = hcon->l2cap_data;
7818         struct hci_chan *hchan;
7819
7820         if (conn)
7821                 return conn;
7822
7823         hchan = hci_chan_create(hcon);
7824         if (!hchan)
7825                 return NULL;
7826
7827         conn = kzalloc(sizeof(*conn), GFP_KERNEL);
7828         if (!conn) {
7829                 hci_chan_del(hchan);
7830                 return NULL;
7831         }
7832
7833         kref_init(&conn->ref);
7834         hcon->l2cap_data = conn;
7835         conn->hcon = hci_conn_get(hcon);
7836         conn->hchan = hchan;
7837
7838         BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
7839
7840         switch (hcon->type) {
7841         case LE_LINK:
7842                 if (hcon->hdev->le_mtu) {
7843                         conn->mtu = hcon->hdev->le_mtu;
7844                         break;
7845                 }
7846                 fallthrough;
7847         default:
7848                 conn->mtu = hcon->hdev->acl_mtu;
7849                 break;
7850         }
7851
7852         conn->feat_mask = 0;
7853
7854         conn->local_fixed_chan = L2CAP_FC_SIG_BREDR | L2CAP_FC_CONNLESS;
7855
7856         if (hcon->type == ACL_LINK &&
7857             hci_dev_test_flag(hcon->hdev, HCI_HS_ENABLED))
7858                 conn->local_fixed_chan |= L2CAP_FC_A2MP;
7859
7860         if (hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED) &&
7861             (bredr_sc_enabled(hcon->hdev) ||
7862              hci_dev_test_flag(hcon->hdev, HCI_FORCE_BREDR_SMP)))
7863                 conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
7864
7865         mutex_init(&conn->ident_lock);
7866         mutex_init(&conn->chan_lock);
7867
7868         INIT_LIST_HEAD(&conn->chan_l);
7869         INIT_LIST_HEAD(&conn->users);
7870
7871         INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
7872
7873         skb_queue_head_init(&conn->pending_rx);
7874         INIT_WORK(&conn->pending_rx_work, process_pending_rx);
7875         INIT_DELAYED_WORK(&conn->id_addr_timer, l2cap_conn_update_id_addr);
7876
7877         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
7878
7879         return conn;
7880 }
7881
7882 static bool is_valid_psm(u16 psm, u8 dst_type)
7883 {
7884         if (!psm)
7885                 return false;
7886
7887         if (bdaddr_type_is_le(dst_type))
7888                 return (psm <= 0x00ff);
7889
7890         /* PSM must be odd and lsb of upper byte must be 0 */
7891         return ((psm & 0x0101) == 0x0001);
7892 }
7893
7894 struct l2cap_chan_data {
7895         struct l2cap_chan *chan;
7896         struct pid *pid;
7897         int count;
7898 };
7899
7900 static void l2cap_chan_by_pid(struct l2cap_chan *chan, void *data)
7901 {
7902         struct l2cap_chan_data *d = data;
7903         struct pid *pid;
7904
7905         if (chan == d->chan)
7906                 return;
7907
7908         if (!test_bit(FLAG_DEFER_SETUP, &chan->flags))
7909                 return;
7910
7911         pid = chan->ops->get_peer_pid(chan);
7912
7913         /* Only count deferred channels with the same PID/PSM */
7914         if (d->pid != pid || chan->psm != d->chan->psm || chan->ident ||
7915             chan->mode != L2CAP_MODE_EXT_FLOWCTL || chan->state != BT_CONNECT)
7916                 return;
7917
7918         d->count++;
7919 }
7920
7921 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
7922                        bdaddr_t *dst, u8 dst_type)
7923 {
7924         struct l2cap_conn *conn;
7925         struct hci_conn *hcon;
7926         struct hci_dev *hdev;
7927         int err;
7928
7929         BT_DBG("%pMR -> %pMR (type %u) psm 0x%4.4x mode 0x%2.2x", &chan->src,
7930                dst, dst_type, __le16_to_cpu(psm), chan->mode);
7931
7932         hdev = hci_get_route(dst, &chan->src, chan->src_type);
7933         if (!hdev)
7934                 return -EHOSTUNREACH;
7935
7936         hci_dev_lock(hdev);
7937
7938         if (!is_valid_psm(__le16_to_cpu(psm), dst_type) && !cid &&
7939             chan->chan_type != L2CAP_CHAN_RAW) {
7940                 err = -EINVAL;
7941                 goto done;
7942         }
7943
7944         if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !psm) {
7945                 err = -EINVAL;
7946                 goto done;
7947         }
7948
7949         if (chan->chan_type == L2CAP_CHAN_FIXED && !cid) {
7950                 err = -EINVAL;
7951                 goto done;
7952         }
7953
7954         switch (chan->mode) {
7955         case L2CAP_MODE_BASIC:
7956                 break;
7957         case L2CAP_MODE_LE_FLOWCTL:
7958                 break;
7959         case L2CAP_MODE_EXT_FLOWCTL:
7960                 if (!enable_ecred) {
7961                         err = -EOPNOTSUPP;
7962                         goto done;
7963                 }
7964                 break;
7965         case L2CAP_MODE_ERTM:
7966         case L2CAP_MODE_STREAMING:
7967                 if (!disable_ertm)
7968                         break;
7969                 fallthrough;
7970         default:
7971                 err = -EOPNOTSUPP;
7972                 goto done;
7973         }
7974
7975         switch (chan->state) {
7976         case BT_CONNECT:
7977         case BT_CONNECT2:
7978         case BT_CONFIG:
7979                 /* Already connecting */
7980                 err = 0;
7981                 goto done;
7982
7983         case BT_CONNECTED:
7984                 /* Already connected */
7985                 err = -EISCONN;
7986                 goto done;
7987
7988         case BT_OPEN:
7989         case BT_BOUND:
7990                 /* Can connect */
7991                 break;
7992
7993         default:
7994                 err = -EBADFD;
7995                 goto done;
7996         }
7997
7998         /* Set destination address and psm */
7999         bacpy(&chan->dst, dst);
8000         chan->dst_type = dst_type;
8001
8002         chan->psm = psm;
8003         chan->dcid = cid;
8004
8005         if (bdaddr_type_is_le(dst_type)) {
8006                 /* Convert from L2CAP channel address type to HCI address type
8007                  */
8008                 if (dst_type == BDADDR_LE_PUBLIC)
8009                         dst_type = ADDR_LE_DEV_PUBLIC;
8010                 else
8011                         dst_type = ADDR_LE_DEV_RANDOM;
8012
8013                 if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
8014                         hcon = hci_connect_le(hdev, dst, dst_type, false,
8015                                               chan->sec_level,
8016                                               HCI_LE_CONN_TIMEOUT,
8017                                               HCI_ROLE_SLAVE);
8018                 else
8019                         hcon = hci_connect_le_scan(hdev, dst, dst_type,
8020                                                    chan->sec_level,
8021                                                    HCI_LE_CONN_TIMEOUT,
8022                                                    CONN_REASON_L2CAP_CHAN);
8023
8024         } else {
8025                 u8 auth_type = l2cap_get_auth_type(chan);
8026                 hcon = hci_connect_acl(hdev, dst, chan->sec_level, auth_type,
8027                                        CONN_REASON_L2CAP_CHAN);
8028         }
8029
8030         if (IS_ERR(hcon)) {
8031                 err = PTR_ERR(hcon);
8032                 goto done;
8033         }
8034
8035         conn = l2cap_conn_add(hcon);
8036         if (!conn) {
8037                 hci_conn_drop(hcon);
8038                 err = -ENOMEM;
8039                 goto done;
8040         }
8041
8042         if (chan->mode == L2CAP_MODE_EXT_FLOWCTL) {
8043                 struct l2cap_chan_data data;
8044
8045                 data.chan = chan;
8046                 data.pid = chan->ops->get_peer_pid(chan);
8047                 data.count = 1;
8048
8049                 l2cap_chan_list(conn, l2cap_chan_by_pid, &data);
8050
8051                 /* Check if there isn't too many channels being connected */
8052                 if (data.count > L2CAP_ECRED_CONN_SCID_MAX) {
8053                         hci_conn_drop(hcon);
8054                         err = -EPROTO;
8055                         goto done;
8056                 }
8057         }
8058
8059         mutex_lock(&conn->chan_lock);
8060         l2cap_chan_lock(chan);
8061
8062         if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
8063                 hci_conn_drop(hcon);
8064                 err = -EBUSY;
8065                 goto chan_unlock;
8066         }
8067
8068         /* Update source addr of the socket */
8069         bacpy(&chan->src, &hcon->src);
8070         chan->src_type = bdaddr_src_type(hcon);
8071
8072         __l2cap_chan_add(conn, chan);
8073
8074         /* l2cap_chan_add takes its own ref so we can drop this one */
8075         hci_conn_drop(hcon);
8076
8077         l2cap_state_change(chan, BT_CONNECT);
8078         __set_chan_timer(chan, chan->ops->get_sndtimeo(chan));
8079
8080         /* Release chan->sport so that it can be reused by other
8081          * sockets (as it's only used for listening sockets).
8082          */
8083         write_lock(&chan_list_lock);
8084         chan->sport = 0;
8085         write_unlock(&chan_list_lock);
8086
8087         if (hcon->state == BT_CONNECTED) {
8088                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
8089                         __clear_chan_timer(chan);
8090                         if (l2cap_chan_check_security(chan, true))
8091                                 l2cap_state_change(chan, BT_CONNECTED);
8092                 } else
8093                         l2cap_do_start(chan);
8094         }
8095
8096         err = 0;
8097
8098 chan_unlock:
8099         l2cap_chan_unlock(chan);
8100         mutex_unlock(&conn->chan_lock);
8101 done:
8102         hci_dev_unlock(hdev);
8103         hci_dev_put(hdev);
8104         return err;
8105 }
8106 EXPORT_SYMBOL_GPL(l2cap_chan_connect);
8107
8108 static void l2cap_ecred_reconfigure(struct l2cap_chan *chan)
8109 {
8110         struct l2cap_conn *conn = chan->conn;
8111         struct {
8112                 struct l2cap_ecred_reconf_req req;
8113                 __le16 scid;
8114         } pdu;
8115
8116         pdu.req.mtu = cpu_to_le16(chan->imtu);
8117         pdu.req.mps = cpu_to_le16(chan->mps);
8118         pdu.scid    = cpu_to_le16(chan->scid);
8119
8120         chan->ident = l2cap_get_ident(conn);
8121
8122         l2cap_send_cmd(conn, chan->ident, L2CAP_ECRED_RECONF_REQ,
8123                        sizeof(pdu), &pdu);
8124 }
8125
8126 int l2cap_chan_reconfigure(struct l2cap_chan *chan, __u16 mtu)
8127 {
8128         if (chan->imtu > mtu)
8129                 return -EINVAL;
8130
8131         BT_DBG("chan %p mtu 0x%4.4x", chan, mtu);
8132
8133         chan->imtu = mtu;
8134
8135         l2cap_ecred_reconfigure(chan);
8136
8137         return 0;
8138 }
8139
8140 /* ---- L2CAP interface with lower layer (HCI) ---- */
8141
8142 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
8143 {
8144         int exact = 0, lm1 = 0, lm2 = 0;
8145         struct l2cap_chan *c;
8146
8147         BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
8148
8149         /* Find listening sockets and check their link_mode */
8150         read_lock(&chan_list_lock);
8151         list_for_each_entry(c, &chan_list, global_l) {
8152                 if (c->state != BT_LISTEN)
8153                         continue;
8154
8155                 if (!bacmp(&c->src, &hdev->bdaddr)) {
8156                         lm1 |= HCI_LM_ACCEPT;
8157                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8158                                 lm1 |= HCI_LM_MASTER;
8159                         exact++;
8160                 } else if (!bacmp(&c->src, BDADDR_ANY)) {
8161                         lm2 |= HCI_LM_ACCEPT;
8162                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
8163                                 lm2 |= HCI_LM_MASTER;
8164                 }
8165         }
8166         read_unlock(&chan_list_lock);
8167
8168         return exact ? lm1 : lm2;
8169 }
8170
8171 /* Find the next fixed channel in BT_LISTEN state, continue iteration
8172  * from an existing channel in the list or from the beginning of the
8173  * global list (by passing NULL as first parameter).
8174  */
8175 static struct l2cap_chan *l2cap_global_fixed_chan(struct l2cap_chan *c,
8176                                                   struct hci_conn *hcon)
8177 {
8178         u8 src_type = bdaddr_src_type(hcon);
8179
8180         read_lock(&chan_list_lock);
8181
8182         if (c)
8183                 c = list_next_entry(c, global_l);
8184         else
8185                 c = list_entry(chan_list.next, typeof(*c), global_l);
8186
8187         list_for_each_entry_from(c, &chan_list, global_l) {
8188                 if (c->chan_type != L2CAP_CHAN_FIXED)
8189                         continue;
8190                 if (c->state != BT_LISTEN)
8191                         continue;
8192                 if (bacmp(&c->src, &hcon->src) && bacmp(&c->src, BDADDR_ANY))
8193                         continue;
8194                 if (src_type != c->src_type)
8195                         continue;
8196
8197                 c = l2cap_chan_hold_unless_zero(c);
8198                 read_unlock(&chan_list_lock);
8199                 return c;
8200         }
8201
8202         read_unlock(&chan_list_lock);
8203
8204         return NULL;
8205 }
8206
8207 static void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
8208 {
8209         struct hci_dev *hdev = hcon->hdev;
8210         struct l2cap_conn *conn;
8211         struct l2cap_chan *pchan;
8212         u8 dst_type;
8213
8214         if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8215                 return;
8216
8217         BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
8218
8219         if (status) {
8220                 l2cap_conn_del(hcon, bt_to_errno(status));
8221                 return;
8222         }
8223
8224         conn = l2cap_conn_add(hcon);
8225         if (!conn)
8226                 return;
8227
8228         dst_type = bdaddr_dst_type(hcon);
8229
8230         /* If device is blocked, do not create channels for it */
8231         if (hci_bdaddr_list_lookup(&hdev->reject_list, &hcon->dst, dst_type))
8232                 return;
8233
8234         /* Find fixed channels and notify them of the new connection. We
8235          * use multiple individual lookups, continuing each time where
8236          * we left off, because the list lock would prevent calling the
8237          * potentially sleeping l2cap_chan_lock() function.
8238          */
8239         pchan = l2cap_global_fixed_chan(NULL, hcon);
8240         while (pchan) {
8241                 struct l2cap_chan *chan, *next;
8242
8243                 /* Client fixed channels should override server ones */
8244                 if (__l2cap_get_chan_by_dcid(conn, pchan->scid))
8245                         goto next;
8246
8247                 l2cap_chan_lock(pchan);
8248                 chan = pchan->ops->new_connection(pchan);
8249                 if (chan) {
8250                         bacpy(&chan->src, &hcon->src);
8251                         bacpy(&chan->dst, &hcon->dst);
8252                         chan->src_type = bdaddr_src_type(hcon);
8253                         chan->dst_type = dst_type;
8254
8255                         __l2cap_chan_add(conn, chan);
8256                 }
8257
8258                 l2cap_chan_unlock(pchan);
8259 next:
8260                 next = l2cap_global_fixed_chan(pchan, hcon);
8261                 l2cap_chan_put(pchan);
8262                 pchan = next;
8263         }
8264
8265         l2cap_conn_ready(conn);
8266 }
8267
8268 int l2cap_disconn_ind(struct hci_conn *hcon)
8269 {
8270         struct l2cap_conn *conn = hcon->l2cap_data;
8271
8272         BT_DBG("hcon %p", hcon);
8273
8274         if (!conn)
8275                 return HCI_ERROR_REMOTE_USER_TERM;
8276         return conn->disc_reason;
8277 }
8278
8279 static void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
8280 {
8281         if (hcon->type != ACL_LINK && hcon->type != LE_LINK)
8282                 return;
8283
8284         BT_DBG("hcon %p reason %d", hcon, reason);
8285
8286         l2cap_conn_del(hcon, bt_to_errno(reason));
8287 }
8288
8289 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
8290 {
8291         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
8292                 return;
8293
8294         if (encrypt == 0x00) {
8295                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
8296                         __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
8297                 } else if (chan->sec_level == BT_SECURITY_HIGH ||
8298                            chan->sec_level == BT_SECURITY_FIPS)
8299                         l2cap_chan_close(chan, ECONNREFUSED);
8300         } else {
8301                 if (chan->sec_level == BT_SECURITY_MEDIUM)
8302                         __clear_chan_timer(chan);
8303         }
8304 }
8305
8306 static void l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
8307 {
8308         struct l2cap_conn *conn = hcon->l2cap_data;
8309         struct l2cap_chan *chan;
8310
8311         if (!conn)
8312                 return;
8313
8314         BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
8315
8316         mutex_lock(&conn->chan_lock);
8317
8318         list_for_each_entry(chan, &conn->chan_l, list) {
8319                 l2cap_chan_lock(chan);
8320
8321                 BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
8322                        state_to_string(chan->state));
8323
8324                 if (chan->scid == L2CAP_CID_A2MP) {
8325                         l2cap_chan_unlock(chan);
8326                         continue;
8327                 }
8328
8329                 if (!status && encrypt)
8330                         chan->sec_level = hcon->sec_level;
8331
8332                 if (!__l2cap_no_conn_pending(chan)) {
8333                         l2cap_chan_unlock(chan);
8334                         continue;
8335                 }
8336
8337                 if (!status && (chan->state == BT_CONNECTED ||
8338                                 chan->state == BT_CONFIG)) {
8339                         chan->ops->resume(chan);
8340                         l2cap_check_encryption(chan, encrypt);
8341                         l2cap_chan_unlock(chan);
8342                         continue;
8343                 }
8344
8345                 if (chan->state == BT_CONNECT) {
8346                         if (!status && l2cap_check_enc_key_size(hcon))
8347                                 l2cap_start_connection(chan);
8348                         else
8349                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8350                 } else if (chan->state == BT_CONNECT2 &&
8351                            !(chan->mode == L2CAP_MODE_EXT_FLOWCTL ||
8352                              chan->mode == L2CAP_MODE_LE_FLOWCTL)) {
8353                         struct l2cap_conn_rsp rsp;
8354                         __u16 res, stat;
8355
8356                         if (!status && l2cap_check_enc_key_size(hcon)) {
8357                                 if (test_bit(FLAG_DEFER_SETUP, &chan->flags)) {
8358                                         res = L2CAP_CR_PEND;
8359                                         stat = L2CAP_CS_AUTHOR_PEND;
8360                                         chan->ops->defer(chan);
8361                                 } else {
8362                                         l2cap_state_change(chan, BT_CONFIG);
8363                                         res = L2CAP_CR_SUCCESS;
8364                                         stat = L2CAP_CS_NO_INFO;
8365                                 }
8366                         } else {
8367                                 l2cap_state_change(chan, BT_DISCONN);
8368                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
8369                                 res = L2CAP_CR_SEC_BLOCK;
8370                                 stat = L2CAP_CS_NO_INFO;
8371                         }
8372
8373                         rsp.scid   = cpu_to_le16(chan->dcid);
8374                         rsp.dcid   = cpu_to_le16(chan->scid);
8375                         rsp.result = cpu_to_le16(res);
8376                         rsp.status = cpu_to_le16(stat);
8377                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
8378                                        sizeof(rsp), &rsp);
8379
8380                         if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
8381                             res == L2CAP_CR_SUCCESS) {
8382                                 char buf[128];
8383                                 set_bit(CONF_REQ_SENT, &chan->conf_state);
8384                                 l2cap_send_cmd(conn, l2cap_get_ident(conn),
8385                                                L2CAP_CONF_REQ,
8386                                                l2cap_build_conf_req(chan, buf, sizeof(buf)),
8387                                                buf);
8388                                 chan->num_conf_req++;
8389                         }
8390                 }
8391
8392                 l2cap_chan_unlock(chan);
8393         }
8394
8395         mutex_unlock(&conn->chan_lock);
8396 }
8397
8398 /* Append fragment into frame respecting the maximum len of rx_skb */
8399 static int l2cap_recv_frag(struct l2cap_conn *conn, struct sk_buff *skb,
8400                            u16 len)
8401 {
8402         if (!conn->rx_skb) {
8403                 /* Allocate skb for the complete frame (with header) */
8404                 conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
8405                 if (!conn->rx_skb)
8406                         return -ENOMEM;
8407                 /* Init rx_len */
8408                 conn->rx_len = len;
8409         }
8410
8411         /* Copy as much as the rx_skb can hold */
8412         len = min_t(u16, len, skb->len);
8413         skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, len), len);
8414         skb_pull(skb, len);
8415         conn->rx_len -= len;
8416
8417         return len;
8418 }
8419
8420 static int l2cap_recv_len(struct l2cap_conn *conn, struct sk_buff *skb)
8421 {
8422         struct sk_buff *rx_skb;
8423         int len;
8424
8425         /* Append just enough to complete the header */
8426         len = l2cap_recv_frag(conn, skb, L2CAP_LEN_SIZE - conn->rx_skb->len);
8427
8428         /* If header could not be read just continue */
8429         if (len < 0 || conn->rx_skb->len < L2CAP_LEN_SIZE)
8430                 return len;
8431
8432         rx_skb = conn->rx_skb;
8433         len = get_unaligned_le16(rx_skb->data);
8434
8435         /* Check if rx_skb has enough space to received all fragments */
8436         if (len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE) <= skb_tailroom(rx_skb)) {
8437                 /* Update expected len */
8438                 conn->rx_len = len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE);
8439                 return L2CAP_LEN_SIZE;
8440         }
8441
8442         /* Reset conn->rx_skb since it will need to be reallocated in order to
8443          * fit all fragments.
8444          */
8445         conn->rx_skb = NULL;
8446
8447         /* Reallocates rx_skb using the exact expected length */
8448         len = l2cap_recv_frag(conn, rx_skb,
8449                               len + (L2CAP_HDR_SIZE - L2CAP_LEN_SIZE));
8450         kfree_skb(rx_skb);
8451
8452         return len;
8453 }
8454
8455 static void l2cap_recv_reset(struct l2cap_conn *conn)
8456 {
8457         kfree_skb(conn->rx_skb);
8458         conn->rx_skb = NULL;
8459         conn->rx_len = 0;
8460 }
8461
8462 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
8463 {
8464         struct l2cap_conn *conn = hcon->l2cap_data;
8465         int len;
8466
8467         /* For AMP controller do not create l2cap conn */
8468         if (!conn && hcon->hdev->dev_type != HCI_PRIMARY)
8469                 goto drop;
8470
8471         if (!conn)
8472                 conn = l2cap_conn_add(hcon);
8473
8474         if (!conn)
8475                 goto drop;
8476
8477         BT_DBG("conn %p len %u flags 0x%x", conn, skb->len, flags);
8478
8479         switch (flags) {
8480         case ACL_START:
8481         case ACL_START_NO_FLUSH:
8482         case ACL_COMPLETE:
8483                 if (conn->rx_skb) {
8484                         BT_ERR("Unexpected start frame (len %d)", skb->len);
8485                         l2cap_recv_reset(conn);
8486                         l2cap_conn_unreliable(conn, ECOMM);
8487                 }
8488
8489                 /* Start fragment may not contain the L2CAP length so just
8490                  * copy the initial byte when that happens and use conn->mtu as
8491                  * expected length.
8492                  */
8493                 if (skb->len < L2CAP_LEN_SIZE) {
8494                         l2cap_recv_frag(conn, skb, conn->mtu);
8495                         break;
8496                 }
8497
8498                 len = get_unaligned_le16(skb->data) + L2CAP_HDR_SIZE;
8499
8500                 if (len == skb->len) {
8501                         /* Complete frame received */
8502                         l2cap_recv_frame(conn, skb);
8503                         return;
8504                 }
8505
8506                 BT_DBG("Start: total len %d, frag len %u", len, skb->len);
8507
8508                 if (skb->len > len) {
8509                         BT_ERR("Frame is too long (len %u, expected len %d)",
8510                                skb->len, len);
8511                         l2cap_conn_unreliable(conn, ECOMM);
8512                         goto drop;
8513                 }
8514
8515                 /* Append fragment into frame (with header) */
8516                 if (l2cap_recv_frag(conn, skb, len) < 0)
8517                         goto drop;
8518
8519                 break;
8520
8521         case ACL_CONT:
8522                 BT_DBG("Cont: frag len %u (expecting %u)", skb->len, conn->rx_len);
8523
8524                 if (!conn->rx_skb) {
8525                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
8526                         l2cap_conn_unreliable(conn, ECOMM);
8527                         goto drop;
8528                 }
8529
8530                 /* Complete the L2CAP length if it has not been read */
8531                 if (conn->rx_skb->len < L2CAP_LEN_SIZE) {
8532                         if (l2cap_recv_len(conn, skb) < 0) {
8533                                 l2cap_conn_unreliable(conn, ECOMM);
8534                                 goto drop;
8535                         }
8536
8537                         /* Header still could not be read just continue */
8538                         if (conn->rx_skb->len < L2CAP_LEN_SIZE)
8539                                 break;
8540                 }
8541
8542                 if (skb->len > conn->rx_len) {
8543                         BT_ERR("Fragment is too long (len %u, expected %u)",
8544                                skb->len, conn->rx_len);
8545                         l2cap_recv_reset(conn);
8546                         l2cap_conn_unreliable(conn, ECOMM);
8547                         goto drop;
8548                 }
8549
8550                 /* Append fragment into frame (with header) */
8551                 l2cap_recv_frag(conn, skb, skb->len);
8552
8553                 if (!conn->rx_len) {
8554                         /* Complete frame received. l2cap_recv_frame
8555                          * takes ownership of the skb so set the global
8556                          * rx_skb pointer to NULL first.
8557                          */
8558                         struct sk_buff *rx_skb = conn->rx_skb;
8559                         conn->rx_skb = NULL;
8560                         l2cap_recv_frame(conn, rx_skb);
8561                 }
8562                 break;
8563         }
8564
8565 drop:
8566         kfree_skb(skb);
8567 }
8568
8569 static struct hci_cb l2cap_cb = {
8570         .name           = "L2CAP",
8571         .connect_cfm    = l2cap_connect_cfm,
8572         .disconn_cfm    = l2cap_disconn_cfm,
8573         .security_cfm   = l2cap_security_cfm,
8574 };
8575
8576 static int l2cap_debugfs_show(struct seq_file *f, void *p)
8577 {
8578         struct l2cap_chan *c;
8579
8580         read_lock(&chan_list_lock);
8581
8582         list_for_each_entry(c, &chan_list, global_l) {
8583                 seq_printf(f, "%pMR (%u) %pMR (%u) %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
8584                            &c->src, c->src_type, &c->dst, c->dst_type,
8585                            c->state, __le16_to_cpu(c->psm),
8586                            c->scid, c->dcid, c->imtu, c->omtu,
8587                            c->sec_level, c->mode);
8588         }
8589
8590         read_unlock(&chan_list_lock);
8591
8592         return 0;
8593 }
8594
8595 DEFINE_SHOW_ATTRIBUTE(l2cap_debugfs);
8596
8597 static struct dentry *l2cap_debugfs;
8598
8599 int __init l2cap_init(void)
8600 {
8601         int err;
8602
8603         err = l2cap_init_sockets();
8604         if (err < 0)
8605                 return err;
8606
8607         hci_register_cb(&l2cap_cb);
8608
8609         if (IS_ERR_OR_NULL(bt_debugfs))
8610                 return 0;
8611
8612         l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
8613                                             NULL, &l2cap_debugfs_fops);
8614
8615         return 0;
8616 }
8617
8618 void l2cap_exit(void)
8619 {
8620         debugfs_remove(l2cap_debugfs);
8621         hci_unregister_cb(&l2cap_cb);
8622         l2cap_cleanup_sockets();
8623 }
8624
8625 module_param(disable_ertm, bool, 0644);
8626 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
8627
8628 module_param(enable_ecred, bool, 0644);
8629 MODULE_PARM_DESC(enable_ecred, "Enable enhanced credit flow control mode");