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