]> git.karo-electronics.de Git - karo-tx-linux.git/blob - net/bluetooth/l2cap_core.c
Merge tag 'for-linus' of git://linux-c6x.org/git/projects/linux-c6x-upstreaming
[karo-tx-linux.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
36 #include <net/bluetooth/bluetooth.h>
37 #include <net/bluetooth/hci_core.h>
38 #include <net/bluetooth/l2cap.h>
39 #include <net/bluetooth/smp.h>
40 #include <net/bluetooth/a2mp.h>
41
42 bool disable_ertm;
43
44 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
45 static u8 l2cap_fixed_chan[8] = { L2CAP_FC_L2CAP, };
46
47 static LIST_HEAD(chan_list);
48 static DEFINE_RWLOCK(chan_list_lock);
49
50 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
51                                 u8 code, u8 ident, u16 dlen, void *data);
52 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
53                                                                 void *data);
54 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
55 static void l2cap_send_disconn_req(struct l2cap_conn *conn,
56                                    struct l2cap_chan *chan, int err);
57
58 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
59                     struct sk_buff_head *skbs, u8 event);
60
61 /* ---- L2CAP channels ---- */
62
63 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
64 {
65         struct l2cap_chan *c;
66
67         list_for_each_entry(c, &conn->chan_l, list) {
68                 if (c->dcid == cid)
69                         return c;
70         }
71         return NULL;
72 }
73
74 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
75 {
76         struct l2cap_chan *c;
77
78         list_for_each_entry(c, &conn->chan_l, list) {
79                 if (c->scid == cid)
80                         return c;
81         }
82         return NULL;
83 }
84
85 /* Find channel with given SCID.
86  * Returns locked channel. */
87 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
88 {
89         struct l2cap_chan *c;
90
91         mutex_lock(&conn->chan_lock);
92         c = __l2cap_get_chan_by_scid(conn, cid);
93         if (c)
94                 l2cap_chan_lock(c);
95         mutex_unlock(&conn->chan_lock);
96
97         return c;
98 }
99
100 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
101 {
102         struct l2cap_chan *c;
103
104         list_for_each_entry(c, &conn->chan_l, list) {
105                 if (c->ident == ident)
106                         return c;
107         }
108         return NULL;
109 }
110
111 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
112 {
113         struct l2cap_chan *c;
114
115         list_for_each_entry(c, &chan_list, global_l) {
116                 if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
117                         return c;
118         }
119         return NULL;
120 }
121
122 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
123 {
124         int err;
125
126         write_lock(&chan_list_lock);
127
128         if (psm && __l2cap_global_chan_by_addr(psm, src)) {
129                 err = -EADDRINUSE;
130                 goto done;
131         }
132
133         if (psm) {
134                 chan->psm = psm;
135                 chan->sport = psm;
136                 err = 0;
137         } else {
138                 u16 p;
139
140                 err = -EINVAL;
141                 for (p = 0x1001; p < 0x1100; p += 2)
142                         if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
143                                 chan->psm   = cpu_to_le16(p);
144                                 chan->sport = cpu_to_le16(p);
145                                 err = 0;
146                                 break;
147                         }
148         }
149
150 done:
151         write_unlock(&chan_list_lock);
152         return err;
153 }
154
155 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
156 {
157         write_lock(&chan_list_lock);
158
159         chan->scid = scid;
160
161         write_unlock(&chan_list_lock);
162
163         return 0;
164 }
165
166 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
167 {
168         u16 cid = L2CAP_CID_DYN_START;
169
170         for (; cid < L2CAP_CID_DYN_END; cid++) {
171                 if (!__l2cap_get_chan_by_scid(conn, cid))
172                         return cid;
173         }
174
175         return 0;
176 }
177
178 static void __l2cap_state_change(struct l2cap_chan *chan, int state)
179 {
180         BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
181                                                 state_to_string(state));
182
183         chan->state = state;
184         chan->ops->state_change(chan, state);
185 }
186
187 static void l2cap_state_change(struct l2cap_chan *chan, int state)
188 {
189         struct sock *sk = chan->sk;
190
191         lock_sock(sk);
192         __l2cap_state_change(chan, state);
193         release_sock(sk);
194 }
195
196 static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
197 {
198         struct sock *sk = chan->sk;
199
200         sk->sk_err = err;
201 }
202
203 static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
204 {
205         struct sock *sk = chan->sk;
206
207         lock_sock(sk);
208         __l2cap_chan_set_err(chan, err);
209         release_sock(sk);
210 }
211
212 static void __set_retrans_timer(struct l2cap_chan *chan)
213 {
214         if (!delayed_work_pending(&chan->monitor_timer) &&
215             chan->retrans_timeout) {
216                 l2cap_set_timer(chan, &chan->retrans_timer,
217                                 msecs_to_jiffies(chan->retrans_timeout));
218         }
219 }
220
221 static void __set_monitor_timer(struct l2cap_chan *chan)
222 {
223         __clear_retrans_timer(chan);
224         if (chan->monitor_timeout) {
225                 l2cap_set_timer(chan, &chan->monitor_timer,
226                                 msecs_to_jiffies(chan->monitor_timeout));
227         }
228 }
229
230 static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
231                                                u16 seq)
232 {
233         struct sk_buff *skb;
234
235         skb_queue_walk(head, skb) {
236                 if (bt_cb(skb)->control.txseq == seq)
237                         return skb;
238         }
239
240         return NULL;
241 }
242
243 /* ---- L2CAP sequence number lists ---- */
244
245 /* For ERTM, ordered lists of sequence numbers must be tracked for
246  * SREJ requests that are received and for frames that are to be
247  * retransmitted. These seq_list functions implement a singly-linked
248  * list in an array, where membership in the list can also be checked
249  * in constant time. Items can also be added to the tail of the list
250  * and removed from the head in constant time, without further memory
251  * allocs or frees.
252  */
253
254 static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
255 {
256         size_t alloc_size, i;
257
258         /* Allocated size is a power of 2 to map sequence numbers
259          * (which may be up to 14 bits) in to a smaller array that is
260          * sized for the negotiated ERTM transmit windows.
261          */
262         alloc_size = roundup_pow_of_two(size);
263
264         seq_list->list = kmalloc(sizeof(u16) * alloc_size, GFP_KERNEL);
265         if (!seq_list->list)
266                 return -ENOMEM;
267
268         seq_list->mask = alloc_size - 1;
269         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
270         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
271         for (i = 0; i < alloc_size; i++)
272                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
273
274         return 0;
275 }
276
277 static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
278 {
279         kfree(seq_list->list);
280 }
281
282 static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
283                                            u16 seq)
284 {
285         /* Constant-time check for list membership */
286         return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
287 }
288
289 static u16 l2cap_seq_list_remove(struct l2cap_seq_list *seq_list, u16 seq)
290 {
291         u16 mask = seq_list->mask;
292
293         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) {
294                 /* In case someone tries to pop the head of an empty list */
295                 return L2CAP_SEQ_LIST_CLEAR;
296         } else if (seq_list->head == seq) {
297                 /* Head can be removed in constant time */
298                 seq_list->head = seq_list->list[seq & mask];
299                 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
300
301                 if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
302                         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
303                         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
304                 }
305         } else {
306                 /* Walk the list to find the sequence number */
307                 u16 prev = seq_list->head;
308                 while (seq_list->list[prev & mask] != seq) {
309                         prev = seq_list->list[prev & mask];
310                         if (prev == L2CAP_SEQ_LIST_TAIL)
311                                 return L2CAP_SEQ_LIST_CLEAR;
312                 }
313
314                 /* Unlink the number from the list and clear it */
315                 seq_list->list[prev & mask] = seq_list->list[seq & mask];
316                 seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
317                 if (seq_list->tail == seq)
318                         seq_list->tail = prev;
319         }
320         return seq;
321 }
322
323 static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
324 {
325         /* Remove the head in constant time */
326         return l2cap_seq_list_remove(seq_list, seq_list->head);
327 }
328
329 static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
330 {
331         u16 i;
332
333         if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
334                 return;
335
336         for (i = 0; i <= seq_list->mask; i++)
337                 seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
338
339         seq_list->head = L2CAP_SEQ_LIST_CLEAR;
340         seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
341 }
342
343 static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
344 {
345         u16 mask = seq_list->mask;
346
347         /* All appends happen in constant time */
348
349         if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
350                 return;
351
352         if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
353                 seq_list->head = seq;
354         else
355                 seq_list->list[seq_list->tail & mask] = seq;
356
357         seq_list->tail = seq;
358         seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
359 }
360
361 static void l2cap_chan_timeout(struct work_struct *work)
362 {
363         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
364                                                         chan_timer.work);
365         struct l2cap_conn *conn = chan->conn;
366         int reason;
367
368         BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
369
370         mutex_lock(&conn->chan_lock);
371         l2cap_chan_lock(chan);
372
373         if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
374                 reason = ECONNREFUSED;
375         else if (chan->state == BT_CONNECT &&
376                                         chan->sec_level != BT_SECURITY_SDP)
377                 reason = ECONNREFUSED;
378         else
379                 reason = ETIMEDOUT;
380
381         l2cap_chan_close(chan, reason);
382
383         l2cap_chan_unlock(chan);
384
385         chan->ops->close(chan);
386         mutex_unlock(&conn->chan_lock);
387
388         l2cap_chan_put(chan);
389 }
390
391 struct l2cap_chan *l2cap_chan_create(void)
392 {
393         struct l2cap_chan *chan;
394
395         chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
396         if (!chan)
397                 return NULL;
398
399         mutex_init(&chan->lock);
400
401         write_lock(&chan_list_lock);
402         list_add(&chan->global_l, &chan_list);
403         write_unlock(&chan_list_lock);
404
405         INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
406
407         chan->state = BT_OPEN;
408
409         atomic_set(&chan->refcnt, 1);
410
411         /* This flag is cleared in l2cap_chan_ready() */
412         set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
413
414         BT_DBG("chan %p", chan);
415
416         return chan;
417 }
418
419 void l2cap_chan_destroy(struct l2cap_chan *chan)
420 {
421         write_lock(&chan_list_lock);
422         list_del(&chan->global_l);
423         write_unlock(&chan_list_lock);
424
425         l2cap_chan_put(chan);
426 }
427
428 void l2cap_chan_set_defaults(struct l2cap_chan *chan)
429 {
430         chan->fcs  = L2CAP_FCS_CRC16;
431         chan->max_tx = L2CAP_DEFAULT_MAX_TX;
432         chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
433         chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
434         chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
435         chan->sec_level = BT_SECURITY_LOW;
436
437         set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
438 }
439
440 static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
441 {
442         BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
443                __le16_to_cpu(chan->psm), chan->dcid);
444
445         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
446
447         chan->conn = conn;
448
449         switch (chan->chan_type) {
450         case L2CAP_CHAN_CONN_ORIENTED:
451                 if (conn->hcon->type == LE_LINK) {
452                         /* LE connection */
453                         chan->omtu = L2CAP_DEFAULT_MTU;
454                         chan->scid = L2CAP_CID_LE_DATA;
455                         chan->dcid = L2CAP_CID_LE_DATA;
456                 } else {
457                         /* Alloc CID for connection-oriented socket */
458                         chan->scid = l2cap_alloc_cid(conn);
459                         chan->omtu = L2CAP_DEFAULT_MTU;
460                 }
461                 break;
462
463         case L2CAP_CHAN_CONN_LESS:
464                 /* Connectionless socket */
465                 chan->scid = L2CAP_CID_CONN_LESS;
466                 chan->dcid = L2CAP_CID_CONN_LESS;
467                 chan->omtu = L2CAP_DEFAULT_MTU;
468                 break;
469
470         case L2CAP_CHAN_CONN_FIX_A2MP:
471                 chan->scid = L2CAP_CID_A2MP;
472                 chan->dcid = L2CAP_CID_A2MP;
473                 chan->omtu = L2CAP_A2MP_DEFAULT_MTU;
474                 chan->imtu = L2CAP_A2MP_DEFAULT_MTU;
475                 break;
476
477         default:
478                 /* Raw socket can send/recv signalling messages only */
479                 chan->scid = L2CAP_CID_SIGNALING;
480                 chan->dcid = L2CAP_CID_SIGNALING;
481                 chan->omtu = L2CAP_DEFAULT_MTU;
482         }
483
484         chan->local_id          = L2CAP_BESTEFFORT_ID;
485         chan->local_stype       = L2CAP_SERV_BESTEFFORT;
486         chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
487         chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
488         chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
489         chan->local_flush_to    = L2CAP_DEFAULT_FLUSH_TO;
490
491         l2cap_chan_hold(chan);
492
493         list_add(&chan->list, &conn->chan_l);
494 }
495
496 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
497 {
498         mutex_lock(&conn->chan_lock);
499         __l2cap_chan_add(conn, chan);
500         mutex_unlock(&conn->chan_lock);
501 }
502
503 void l2cap_chan_del(struct l2cap_chan *chan, int err)
504 {
505         struct l2cap_conn *conn = chan->conn;
506
507         __clear_chan_timer(chan);
508
509         BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
510
511         if (conn) {
512                 /* Delete from channel list */
513                 list_del(&chan->list);
514
515                 l2cap_chan_put(chan);
516
517                 chan->conn = NULL;
518
519                 if (chan->chan_type != L2CAP_CHAN_CONN_FIX_A2MP)
520                         hci_conn_put(conn->hcon);
521         }
522
523         if (chan->ops->teardown)
524                 chan->ops->teardown(chan, err);
525
526         if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
527                 return;
528
529         switch(chan->mode) {
530         case L2CAP_MODE_BASIC:
531                 break;
532
533         case L2CAP_MODE_ERTM:
534                 __clear_retrans_timer(chan);
535                 __clear_monitor_timer(chan);
536                 __clear_ack_timer(chan);
537
538                 skb_queue_purge(&chan->srej_q);
539
540                 l2cap_seq_list_free(&chan->srej_list);
541                 l2cap_seq_list_free(&chan->retrans_list);
542
543                 /* fall through */
544
545         case L2CAP_MODE_STREAMING:
546                 skb_queue_purge(&chan->tx_q);
547                 break;
548         }
549
550         return;
551 }
552
553 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
554 {
555         struct l2cap_conn *conn = chan->conn;
556         struct sock *sk = chan->sk;
557
558         BT_DBG("chan %p state %s sk %p", chan,
559                                         state_to_string(chan->state), sk);
560
561         switch (chan->state) {
562         case BT_LISTEN:
563                 if (chan->ops->teardown)
564                         chan->ops->teardown(chan, 0);
565                 break;
566
567         case BT_CONNECTED:
568         case BT_CONFIG:
569                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
570                                         conn->hcon->type == ACL_LINK) {
571                         __set_chan_timer(chan, sk->sk_sndtimeo);
572                         l2cap_send_disconn_req(conn, chan, reason);
573                 } else
574                         l2cap_chan_del(chan, reason);
575                 break;
576
577         case BT_CONNECT2:
578                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
579                                         conn->hcon->type == ACL_LINK) {
580                         struct l2cap_conn_rsp rsp;
581                         __u16 result;
582
583                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
584                                 result = L2CAP_CR_SEC_BLOCK;
585                         else
586                                 result = L2CAP_CR_BAD_PSM;
587                         l2cap_state_change(chan, BT_DISCONN);
588
589                         rsp.scid   = cpu_to_le16(chan->dcid);
590                         rsp.dcid   = cpu_to_le16(chan->scid);
591                         rsp.result = cpu_to_le16(result);
592                         rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
593                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
594                                                         sizeof(rsp), &rsp);
595                 }
596
597                 l2cap_chan_del(chan, reason);
598                 break;
599
600         case BT_CONNECT:
601         case BT_DISCONN:
602                 l2cap_chan_del(chan, reason);
603                 break;
604
605         default:
606                 if (chan->ops->teardown)
607                         chan->ops->teardown(chan, 0);
608                 break;
609         }
610 }
611
612 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
613 {
614         if (chan->chan_type == L2CAP_CHAN_RAW) {
615                 switch (chan->sec_level) {
616                 case BT_SECURITY_HIGH:
617                         return HCI_AT_DEDICATED_BONDING_MITM;
618                 case BT_SECURITY_MEDIUM:
619                         return HCI_AT_DEDICATED_BONDING;
620                 default:
621                         return HCI_AT_NO_BONDING;
622                 }
623         } else if (chan->psm == __constant_cpu_to_le16(L2CAP_PSM_SDP)) {
624                 if (chan->sec_level == BT_SECURITY_LOW)
625                         chan->sec_level = BT_SECURITY_SDP;
626
627                 if (chan->sec_level == BT_SECURITY_HIGH)
628                         return HCI_AT_NO_BONDING_MITM;
629                 else
630                         return HCI_AT_NO_BONDING;
631         } else {
632                 switch (chan->sec_level) {
633                 case BT_SECURITY_HIGH:
634                         return HCI_AT_GENERAL_BONDING_MITM;
635                 case BT_SECURITY_MEDIUM:
636                         return HCI_AT_GENERAL_BONDING;
637                 default:
638                         return HCI_AT_NO_BONDING;
639                 }
640         }
641 }
642
643 /* Service level security */
644 int l2cap_chan_check_security(struct l2cap_chan *chan)
645 {
646         struct l2cap_conn *conn = chan->conn;
647         __u8 auth_type;
648
649         auth_type = l2cap_get_auth_type(chan);
650
651         return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
652 }
653
654 static u8 l2cap_get_ident(struct l2cap_conn *conn)
655 {
656         u8 id;
657
658         /* Get next available identificator.
659          *    1 - 128 are used by kernel.
660          *  129 - 199 are reserved.
661          *  200 - 254 are used by utilities like l2ping, etc.
662          */
663
664         spin_lock(&conn->lock);
665
666         if (++conn->tx_ident > 128)
667                 conn->tx_ident = 1;
668
669         id = conn->tx_ident;
670
671         spin_unlock(&conn->lock);
672
673         return id;
674 }
675
676 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
677 {
678         struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
679         u8 flags;
680
681         BT_DBG("code 0x%2.2x", code);
682
683         if (!skb)
684                 return;
685
686         if (lmp_no_flush_capable(conn->hcon->hdev))
687                 flags = ACL_START_NO_FLUSH;
688         else
689                 flags = ACL_START;
690
691         bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
692         skb->priority = HCI_PRIO_MAX;
693
694         hci_send_acl(conn->hchan, skb, flags);
695 }
696
697 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
698 {
699         struct hci_conn *hcon = chan->conn->hcon;
700         u16 flags;
701
702         BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
703                                                         skb->priority);
704
705         if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
706                                         lmp_no_flush_capable(hcon->hdev))
707                 flags = ACL_START_NO_FLUSH;
708         else
709                 flags = ACL_START;
710
711         bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
712         hci_send_acl(chan->conn->hchan, skb, flags);
713 }
714
715 static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
716 {
717         control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
718         control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
719
720         if (enh & L2CAP_CTRL_FRAME_TYPE) {
721                 /* S-Frame */
722                 control->sframe = 1;
723                 control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
724                 control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
725
726                 control->sar = 0;
727                 control->txseq = 0;
728         } else {
729                 /* I-Frame */
730                 control->sframe = 0;
731                 control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
732                 control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
733
734                 control->poll = 0;
735                 control->super = 0;
736         }
737 }
738
739 static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
740 {
741         control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
742         control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
743
744         if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
745                 /* S-Frame */
746                 control->sframe = 1;
747                 control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
748                 control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
749
750                 control->sar = 0;
751                 control->txseq = 0;
752         } else {
753                 /* I-Frame */
754                 control->sframe = 0;
755                 control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
756                 control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
757
758                 control->poll = 0;
759                 control->super = 0;
760         }
761 }
762
763 static inline void __unpack_control(struct l2cap_chan *chan,
764                                     struct sk_buff *skb)
765 {
766         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
767                 __unpack_extended_control(get_unaligned_le32(skb->data),
768                                           &bt_cb(skb)->control);
769                 skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
770         } else {
771                 __unpack_enhanced_control(get_unaligned_le16(skb->data),
772                                           &bt_cb(skb)->control);
773                 skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
774         }
775 }
776
777 static u32 __pack_extended_control(struct l2cap_ctrl *control)
778 {
779         u32 packed;
780
781         packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
782         packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
783
784         if (control->sframe) {
785                 packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
786                 packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
787                 packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
788         } else {
789                 packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
790                 packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
791         }
792
793         return packed;
794 }
795
796 static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
797 {
798         u16 packed;
799
800         packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
801         packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
802
803         if (control->sframe) {
804                 packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
805                 packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
806                 packed |= L2CAP_CTRL_FRAME_TYPE;
807         } else {
808                 packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
809                 packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
810         }
811
812         return packed;
813 }
814
815 static inline void __pack_control(struct l2cap_chan *chan,
816                                   struct l2cap_ctrl *control,
817                                   struct sk_buff *skb)
818 {
819         if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
820                 put_unaligned_le32(__pack_extended_control(control),
821                                    skb->data + L2CAP_HDR_SIZE);
822         } else {
823                 put_unaligned_le16(__pack_enhanced_control(control),
824                                    skb->data + L2CAP_HDR_SIZE);
825         }
826 }
827
828 static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
829 {
830         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
831                 return L2CAP_EXT_HDR_SIZE;
832         else
833                 return L2CAP_ENH_HDR_SIZE;
834 }
835
836 static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
837                                                u32 control)
838 {
839         struct sk_buff *skb;
840         struct l2cap_hdr *lh;
841         int hlen = __ertm_hdr_size(chan);
842
843         if (chan->fcs == L2CAP_FCS_CRC16)
844                 hlen += L2CAP_FCS_SIZE;
845
846         skb = bt_skb_alloc(hlen, GFP_KERNEL);
847
848         if (!skb)
849                 return ERR_PTR(-ENOMEM);
850
851         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
852         lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
853         lh->cid = cpu_to_le16(chan->dcid);
854
855         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
856                 put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
857         else
858                 put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
859
860         if (chan->fcs == L2CAP_FCS_CRC16) {
861                 u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
862                 put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
863         }
864
865         skb->priority = HCI_PRIO_MAX;
866         return skb;
867 }
868
869 static void l2cap_send_sframe(struct l2cap_chan *chan,
870                               struct l2cap_ctrl *control)
871 {
872         struct sk_buff *skb;
873         u32 control_field;
874
875         BT_DBG("chan %p, control %p", chan, control);
876
877         if (!control->sframe)
878                 return;
879
880         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
881             !control->poll)
882                 control->final = 1;
883
884         if (control->super == L2CAP_SUPER_RR)
885                 clear_bit(CONN_RNR_SENT, &chan->conn_state);
886         else if (control->super == L2CAP_SUPER_RNR)
887                 set_bit(CONN_RNR_SENT, &chan->conn_state);
888
889         if (control->super != L2CAP_SUPER_SREJ) {
890                 chan->last_acked_seq = control->reqseq;
891                 __clear_ack_timer(chan);
892         }
893
894         BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
895                control->final, control->poll, control->super);
896
897         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
898                 control_field = __pack_extended_control(control);
899         else
900                 control_field = __pack_enhanced_control(control);
901
902         skb = l2cap_create_sframe_pdu(chan, control_field);
903         if (!IS_ERR(skb))
904                 l2cap_do_send(chan, skb);
905 }
906
907 static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
908 {
909         struct l2cap_ctrl control;
910
911         BT_DBG("chan %p, poll %d", chan, poll);
912
913         memset(&control, 0, sizeof(control));
914         control.sframe = 1;
915         control.poll = poll;
916
917         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
918                 control.super = L2CAP_SUPER_RNR;
919         else
920                 control.super = L2CAP_SUPER_RR;
921
922         control.reqseq = chan->buffer_seq;
923         l2cap_send_sframe(chan, &control);
924 }
925
926 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
927 {
928         return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
929 }
930
931 static void l2cap_send_conn_req(struct l2cap_chan *chan)
932 {
933         struct l2cap_conn *conn = chan->conn;
934         struct l2cap_conn_req req;
935
936         req.scid = cpu_to_le16(chan->scid);
937         req.psm  = chan->psm;
938
939         chan->ident = l2cap_get_ident(conn);
940
941         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
942
943         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
944 }
945
946 static void l2cap_chan_ready(struct l2cap_chan *chan)
947 {
948         /* This clears all conf flags, including CONF_NOT_COMPLETE */
949         chan->conf_state = 0;
950         __clear_chan_timer(chan);
951
952         chan->state = BT_CONNECTED;
953
954         chan->ops->ready(chan);
955 }
956
957 static void l2cap_do_start(struct l2cap_chan *chan)
958 {
959         struct l2cap_conn *conn = chan->conn;
960
961         if (conn->hcon->type == LE_LINK) {
962                 l2cap_chan_ready(chan);
963                 return;
964         }
965
966         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
967                 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
968                         return;
969
970                 if (l2cap_chan_check_security(chan) &&
971                                 __l2cap_no_conn_pending(chan))
972                         l2cap_send_conn_req(chan);
973         } else {
974                 struct l2cap_info_req req;
975                 req.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
976
977                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
978                 conn->info_ident = l2cap_get_ident(conn);
979
980                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
981
982                 l2cap_send_cmd(conn, conn->info_ident,
983                                         L2CAP_INFO_REQ, sizeof(req), &req);
984         }
985 }
986
987 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
988 {
989         u32 local_feat_mask = l2cap_feat_mask;
990         if (!disable_ertm)
991                 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
992
993         switch (mode) {
994         case L2CAP_MODE_ERTM:
995                 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
996         case L2CAP_MODE_STREAMING:
997                 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
998         default:
999                 return 0x00;
1000         }
1001 }
1002
1003 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
1004 {
1005         struct sock *sk = chan->sk;
1006         struct l2cap_disconn_req req;
1007
1008         if (!conn)
1009                 return;
1010
1011         if (chan->mode == L2CAP_MODE_ERTM) {
1012                 __clear_retrans_timer(chan);
1013                 __clear_monitor_timer(chan);
1014                 __clear_ack_timer(chan);
1015         }
1016
1017         if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
1018                 __l2cap_state_change(chan, BT_DISCONN);
1019                 return;
1020         }
1021
1022         req.dcid = cpu_to_le16(chan->dcid);
1023         req.scid = cpu_to_le16(chan->scid);
1024         l2cap_send_cmd(conn, l2cap_get_ident(conn),
1025                         L2CAP_DISCONN_REQ, sizeof(req), &req);
1026
1027         lock_sock(sk);
1028         __l2cap_state_change(chan, BT_DISCONN);
1029         __l2cap_chan_set_err(chan, err);
1030         release_sock(sk);
1031 }
1032
1033 /* ---- L2CAP connections ---- */
1034 static void l2cap_conn_start(struct l2cap_conn *conn)
1035 {
1036         struct l2cap_chan *chan, *tmp;
1037
1038         BT_DBG("conn %p", conn);
1039
1040         mutex_lock(&conn->chan_lock);
1041
1042         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1043                 struct sock *sk = chan->sk;
1044
1045                 l2cap_chan_lock(chan);
1046
1047                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1048                         l2cap_chan_unlock(chan);
1049                         continue;
1050                 }
1051
1052                 if (chan->state == BT_CONNECT) {
1053                         if (!l2cap_chan_check_security(chan) ||
1054                                         !__l2cap_no_conn_pending(chan)) {
1055                                 l2cap_chan_unlock(chan);
1056                                 continue;
1057                         }
1058
1059                         if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1060                                         && test_bit(CONF_STATE2_DEVICE,
1061                                         &chan->conf_state)) {
1062                                 l2cap_chan_close(chan, ECONNRESET);
1063                                 l2cap_chan_unlock(chan);
1064                                 continue;
1065                         }
1066
1067                         l2cap_send_conn_req(chan);
1068
1069                 } else if (chan->state == BT_CONNECT2) {
1070                         struct l2cap_conn_rsp rsp;
1071                         char buf[128];
1072                         rsp.scid = cpu_to_le16(chan->dcid);
1073                         rsp.dcid = cpu_to_le16(chan->scid);
1074
1075                         if (l2cap_chan_check_security(chan)) {
1076                                 lock_sock(sk);
1077                                 if (test_bit(BT_SK_DEFER_SETUP,
1078                                              &bt_sk(sk)->flags)) {
1079                                         struct sock *parent = bt_sk(sk)->parent;
1080                                         rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND);
1081                                         rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1082                                         if (parent)
1083                                                 parent->sk_data_ready(parent, 0);
1084
1085                                 } else {
1086                                         __l2cap_state_change(chan, BT_CONFIG);
1087                                         rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS);
1088                                         rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
1089                                 }
1090                                 release_sock(sk);
1091                         } else {
1092                                 rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND);
1093                                 rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1094                         }
1095
1096                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1097                                                         sizeof(rsp), &rsp);
1098
1099                         if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1100                                         rsp.result != L2CAP_CR_SUCCESS) {
1101                                 l2cap_chan_unlock(chan);
1102                                 continue;
1103                         }
1104
1105                         set_bit(CONF_REQ_SENT, &chan->conf_state);
1106                         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1107                                                 l2cap_build_conf_req(chan, buf), buf);
1108                         chan->num_conf_req++;
1109                 }
1110
1111                 l2cap_chan_unlock(chan);
1112         }
1113
1114         mutex_unlock(&conn->chan_lock);
1115 }
1116
1117 /* Find socket with cid and source/destination bdaddr.
1118  * Returns closest match, locked.
1119  */
1120 static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid,
1121                                                     bdaddr_t *src,
1122                                                     bdaddr_t *dst)
1123 {
1124         struct l2cap_chan *c, *c1 = NULL;
1125
1126         read_lock(&chan_list_lock);
1127
1128         list_for_each_entry(c, &chan_list, global_l) {
1129                 struct sock *sk = c->sk;
1130
1131                 if (state && c->state != state)
1132                         continue;
1133
1134                 if (c->scid == cid) {
1135                         int src_match, dst_match;
1136                         int src_any, dst_any;
1137
1138                         /* Exact match. */
1139                         src_match = !bacmp(&bt_sk(sk)->src, src);
1140                         dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1141                         if (src_match && dst_match) {
1142                                 read_unlock(&chan_list_lock);
1143                                 return c;
1144                         }
1145
1146                         /* Closest match */
1147                         src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1148                         dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1149                         if ((src_match && dst_any) || (src_any && dst_match) ||
1150                             (src_any && dst_any))
1151                                 c1 = c;
1152                 }
1153         }
1154
1155         read_unlock(&chan_list_lock);
1156
1157         return c1;
1158 }
1159
1160 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1161 {
1162         struct sock *parent, *sk;
1163         struct l2cap_chan *chan, *pchan;
1164
1165         BT_DBG("");
1166
1167         /* Check if we have socket listening on cid */
1168         pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
1169                                           conn->src, conn->dst);
1170         if (!pchan)
1171                 return;
1172
1173         parent = pchan->sk;
1174
1175         lock_sock(parent);
1176
1177         chan = pchan->ops->new_connection(pchan);
1178         if (!chan)
1179                 goto clean;
1180
1181         sk = chan->sk;
1182
1183         hci_conn_hold(conn->hcon);
1184
1185         bacpy(&bt_sk(sk)->src, conn->src);
1186         bacpy(&bt_sk(sk)->dst, conn->dst);
1187
1188         bt_accept_enqueue(parent, sk);
1189
1190         l2cap_chan_add(conn, chan);
1191
1192         l2cap_chan_ready(chan);
1193
1194 clean:
1195         release_sock(parent);
1196 }
1197
1198 static void l2cap_conn_ready(struct l2cap_conn *conn)
1199 {
1200         struct l2cap_chan *chan;
1201
1202         BT_DBG("conn %p", conn);
1203
1204         if (!conn->hcon->out && conn->hcon->type == LE_LINK)
1205                 l2cap_le_conn_ready(conn);
1206
1207         if (conn->hcon->out && conn->hcon->type == LE_LINK)
1208                 smp_conn_security(conn, conn->hcon->pending_sec_level);
1209
1210         mutex_lock(&conn->chan_lock);
1211
1212         list_for_each_entry(chan, &conn->chan_l, list) {
1213
1214                 l2cap_chan_lock(chan);
1215
1216                 if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
1217                         l2cap_chan_unlock(chan);
1218                         continue;
1219                 }
1220
1221                 if (conn->hcon->type == LE_LINK) {
1222                         if (smp_conn_security(conn, chan->sec_level))
1223                                 l2cap_chan_ready(chan);
1224
1225                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1226                         struct sock *sk = chan->sk;
1227                         __clear_chan_timer(chan);
1228                         lock_sock(sk);
1229                         __l2cap_state_change(chan, BT_CONNECTED);
1230                         sk->sk_state_change(sk);
1231                         release_sock(sk);
1232
1233                 } else if (chan->state == BT_CONNECT)
1234                         l2cap_do_start(chan);
1235
1236                 l2cap_chan_unlock(chan);
1237         }
1238
1239         mutex_unlock(&conn->chan_lock);
1240 }
1241
1242 /* Notify sockets that we cannot guaranty reliability anymore */
1243 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1244 {
1245         struct l2cap_chan *chan;
1246
1247         BT_DBG("conn %p", conn);
1248
1249         mutex_lock(&conn->chan_lock);
1250
1251         list_for_each_entry(chan, &conn->chan_l, list) {
1252                 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1253                         __l2cap_chan_set_err(chan, err);
1254         }
1255
1256         mutex_unlock(&conn->chan_lock);
1257 }
1258
1259 static void l2cap_info_timeout(struct work_struct *work)
1260 {
1261         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1262                                                         info_timer.work);
1263
1264         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1265         conn->info_ident = 0;
1266
1267         l2cap_conn_start(conn);
1268 }
1269
1270 static void l2cap_conn_del(struct hci_conn *hcon, int err)
1271 {
1272         struct l2cap_conn *conn = hcon->l2cap_data;
1273         struct l2cap_chan *chan, *l;
1274
1275         if (!conn)
1276                 return;
1277
1278         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1279
1280         kfree_skb(conn->rx_skb);
1281
1282         mutex_lock(&conn->chan_lock);
1283
1284         /* Kill channels */
1285         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1286                 l2cap_chan_hold(chan);
1287                 l2cap_chan_lock(chan);
1288
1289                 l2cap_chan_del(chan, err);
1290
1291                 l2cap_chan_unlock(chan);
1292
1293                 chan->ops->close(chan);
1294                 l2cap_chan_put(chan);
1295         }
1296
1297         mutex_unlock(&conn->chan_lock);
1298
1299         hci_chan_del(conn->hchan);
1300
1301         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1302                 cancel_delayed_work_sync(&conn->info_timer);
1303
1304         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1305                 cancel_delayed_work_sync(&conn->security_timer);
1306                 smp_chan_destroy(conn);
1307         }
1308
1309         hcon->l2cap_data = NULL;
1310         kfree(conn);
1311 }
1312
1313 static void security_timeout(struct work_struct *work)
1314 {
1315         struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1316                                                 security_timer.work);
1317
1318         BT_DBG("conn %p", conn);
1319
1320         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
1321                 smp_chan_destroy(conn);
1322                 l2cap_conn_del(conn->hcon, ETIMEDOUT);
1323         }
1324 }
1325
1326 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
1327 {
1328         struct l2cap_conn *conn = hcon->l2cap_data;
1329         struct hci_chan *hchan;
1330
1331         if (conn || status)
1332                 return conn;
1333
1334         hchan = hci_chan_create(hcon);
1335         if (!hchan)
1336                 return NULL;
1337
1338         conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1339         if (!conn) {
1340                 hci_chan_del(hchan);
1341                 return NULL;
1342         }
1343
1344         hcon->l2cap_data = conn;
1345         conn->hcon = hcon;
1346         conn->hchan = hchan;
1347
1348         BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1349
1350         if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
1351                 conn->mtu = hcon->hdev->le_mtu;
1352         else
1353                 conn->mtu = hcon->hdev->acl_mtu;
1354
1355         conn->src = &hcon->hdev->bdaddr;
1356         conn->dst = &hcon->dst;
1357
1358         conn->feat_mask = 0;
1359
1360         spin_lock_init(&conn->lock);
1361         mutex_init(&conn->chan_lock);
1362
1363         INIT_LIST_HEAD(&conn->chan_l);
1364
1365         if (hcon->type == LE_LINK)
1366                 INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1367         else
1368                 INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
1369
1370         conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1371
1372         return conn;
1373 }
1374
1375 /* ---- Socket interface ---- */
1376
1377 /* Find socket with psm and source / destination bdaddr.
1378  * Returns closest match.
1379  */
1380 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1381                                                    bdaddr_t *src,
1382                                                    bdaddr_t *dst)
1383 {
1384         struct l2cap_chan *c, *c1 = NULL;
1385
1386         read_lock(&chan_list_lock);
1387
1388         list_for_each_entry(c, &chan_list, global_l) {
1389                 struct sock *sk = c->sk;
1390
1391                 if (state && c->state != state)
1392                         continue;
1393
1394                 if (c->psm == psm) {
1395                         int src_match, dst_match;
1396                         int src_any, dst_any;
1397
1398                         /* Exact match. */
1399                         src_match = !bacmp(&bt_sk(sk)->src, src);
1400                         dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1401                         if (src_match && dst_match) {
1402                                 read_unlock(&chan_list_lock);
1403                                 return c;
1404                         }
1405
1406                         /* Closest match */
1407                         src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1408                         dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1409                         if ((src_match && dst_any) || (src_any && dst_match) ||
1410                             (src_any && dst_any))
1411                                 c1 = c;
1412                 }
1413         }
1414
1415         read_unlock(&chan_list_lock);
1416
1417         return c1;
1418 }
1419
1420 int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
1421                        bdaddr_t *dst, u8 dst_type)
1422 {
1423         struct sock *sk = chan->sk;
1424         bdaddr_t *src = &bt_sk(sk)->src;
1425         struct l2cap_conn *conn;
1426         struct hci_conn *hcon;
1427         struct hci_dev *hdev;
1428         __u8 auth_type;
1429         int err;
1430
1431         BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
1432                dst_type, __le16_to_cpu(chan->psm));
1433
1434         hdev = hci_get_route(dst, src);
1435         if (!hdev)
1436                 return -EHOSTUNREACH;
1437
1438         hci_dev_lock(hdev);
1439
1440         l2cap_chan_lock(chan);
1441
1442         /* PSM must be odd and lsb of upper byte must be 0 */
1443         if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid &&
1444                                         chan->chan_type != L2CAP_CHAN_RAW) {
1445                 err = -EINVAL;
1446                 goto done;
1447         }
1448
1449         if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !(psm || cid)) {
1450                 err = -EINVAL;
1451                 goto done;
1452         }
1453
1454         switch (chan->mode) {
1455         case L2CAP_MODE_BASIC:
1456                 break;
1457         case L2CAP_MODE_ERTM:
1458         case L2CAP_MODE_STREAMING:
1459                 if (!disable_ertm)
1460                         break;
1461                 /* fall through */
1462         default:
1463                 err = -ENOTSUPP;
1464                 goto done;
1465         }
1466
1467         switch (chan->state) {
1468         case BT_CONNECT:
1469         case BT_CONNECT2:
1470         case BT_CONFIG:
1471                 /* Already connecting */
1472                 err = 0;
1473                 goto done;
1474
1475         case BT_CONNECTED:
1476                 /* Already connected */
1477                 err = -EISCONN;
1478                 goto done;
1479
1480         case BT_OPEN:
1481         case BT_BOUND:
1482                 /* Can connect */
1483                 break;
1484
1485         default:
1486                 err = -EBADFD;
1487                 goto done;
1488         }
1489
1490         /* Set destination address and psm */
1491         lock_sock(sk);
1492         bacpy(&bt_sk(sk)->dst, dst);
1493         release_sock(sk);
1494
1495         chan->psm = psm;
1496         chan->dcid = cid;
1497
1498         auth_type = l2cap_get_auth_type(chan);
1499
1500         if (chan->dcid == L2CAP_CID_LE_DATA)
1501                 hcon = hci_connect(hdev, LE_LINK, dst, dst_type,
1502                                    chan->sec_level, auth_type);
1503         else
1504                 hcon = hci_connect(hdev, ACL_LINK, dst, dst_type,
1505                                    chan->sec_level, auth_type);
1506
1507         if (IS_ERR(hcon)) {
1508                 err = PTR_ERR(hcon);
1509                 goto done;
1510         }
1511
1512         conn = l2cap_conn_add(hcon, 0);
1513         if (!conn) {
1514                 hci_conn_put(hcon);
1515                 err = -ENOMEM;
1516                 goto done;
1517         }
1518
1519         if (hcon->type == LE_LINK) {
1520                 err = 0;
1521
1522                 if (!list_empty(&conn->chan_l)) {
1523                         err = -EBUSY;
1524                         hci_conn_put(hcon);
1525                 }
1526
1527                 if (err)
1528                         goto done;
1529         }
1530
1531         /* Update source addr of the socket */
1532         bacpy(src, conn->src);
1533
1534         l2cap_chan_unlock(chan);
1535         l2cap_chan_add(conn, chan);
1536         l2cap_chan_lock(chan);
1537
1538         l2cap_state_change(chan, BT_CONNECT);
1539         __set_chan_timer(chan, sk->sk_sndtimeo);
1540
1541         if (hcon->state == BT_CONNECTED) {
1542                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1543                         __clear_chan_timer(chan);
1544                         if (l2cap_chan_check_security(chan))
1545                                 l2cap_state_change(chan, BT_CONNECTED);
1546                 } else
1547                         l2cap_do_start(chan);
1548         }
1549
1550         err = 0;
1551
1552 done:
1553         l2cap_chan_unlock(chan);
1554         hci_dev_unlock(hdev);
1555         hci_dev_put(hdev);
1556         return err;
1557 }
1558
1559 int __l2cap_wait_ack(struct sock *sk)
1560 {
1561         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1562         DECLARE_WAITQUEUE(wait, current);
1563         int err = 0;
1564         int timeo = HZ/5;
1565
1566         add_wait_queue(sk_sleep(sk), &wait);
1567         set_current_state(TASK_INTERRUPTIBLE);
1568         while (chan->unacked_frames > 0 && chan->conn) {
1569                 if (!timeo)
1570                         timeo = HZ/5;
1571
1572                 if (signal_pending(current)) {
1573                         err = sock_intr_errno(timeo);
1574                         break;
1575                 }
1576
1577                 release_sock(sk);
1578                 timeo = schedule_timeout(timeo);
1579                 lock_sock(sk);
1580                 set_current_state(TASK_INTERRUPTIBLE);
1581
1582                 err = sock_error(sk);
1583                 if (err)
1584                         break;
1585         }
1586         set_current_state(TASK_RUNNING);
1587         remove_wait_queue(sk_sleep(sk), &wait);
1588         return err;
1589 }
1590
1591 static void l2cap_monitor_timeout(struct work_struct *work)
1592 {
1593         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1594                                                monitor_timer.work);
1595
1596         BT_DBG("chan %p", chan);
1597
1598         l2cap_chan_lock(chan);
1599
1600         if (!chan->conn) {
1601                 l2cap_chan_unlock(chan);
1602                 l2cap_chan_put(chan);
1603                 return;
1604         }
1605
1606         l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
1607
1608         l2cap_chan_unlock(chan);
1609         l2cap_chan_put(chan);
1610 }
1611
1612 static void l2cap_retrans_timeout(struct work_struct *work)
1613 {
1614         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1615                                                retrans_timer.work);
1616
1617         BT_DBG("chan %p", chan);
1618
1619         l2cap_chan_lock(chan);
1620
1621         if (!chan->conn) {
1622                 l2cap_chan_unlock(chan);
1623                 l2cap_chan_put(chan);
1624                 return;
1625         }
1626
1627         l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
1628         l2cap_chan_unlock(chan);
1629         l2cap_chan_put(chan);
1630 }
1631
1632 static void l2cap_streaming_send(struct l2cap_chan *chan,
1633                                  struct sk_buff_head *skbs)
1634 {
1635         struct sk_buff *skb;
1636         struct l2cap_ctrl *control;
1637
1638         BT_DBG("chan %p, skbs %p", chan, skbs);
1639
1640         skb_queue_splice_tail_init(skbs, &chan->tx_q);
1641
1642         while (!skb_queue_empty(&chan->tx_q)) {
1643
1644                 skb = skb_dequeue(&chan->tx_q);
1645
1646                 bt_cb(skb)->control.retries = 1;
1647                 control = &bt_cb(skb)->control;
1648
1649                 control->reqseq = 0;
1650                 control->txseq = chan->next_tx_seq;
1651
1652                 __pack_control(chan, control, skb);
1653
1654                 if (chan->fcs == L2CAP_FCS_CRC16) {
1655                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
1656                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1657                 }
1658
1659                 l2cap_do_send(chan, skb);
1660
1661                 BT_DBG("Sent txseq %u", control->txseq);
1662
1663                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1664                 chan->frames_sent++;
1665         }
1666 }
1667
1668 static int l2cap_ertm_send(struct l2cap_chan *chan)
1669 {
1670         struct sk_buff *skb, *tx_skb;
1671         struct l2cap_ctrl *control;
1672         int sent = 0;
1673
1674         BT_DBG("chan %p", chan);
1675
1676         if (chan->state != BT_CONNECTED)
1677                 return -ENOTCONN;
1678
1679         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1680                 return 0;
1681
1682         while (chan->tx_send_head &&
1683                chan->unacked_frames < chan->remote_tx_win &&
1684                chan->tx_state == L2CAP_TX_STATE_XMIT) {
1685
1686                 skb = chan->tx_send_head;
1687
1688                 bt_cb(skb)->control.retries = 1;
1689                 control = &bt_cb(skb)->control;
1690
1691                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1692                         control->final = 1;
1693
1694                 control->reqseq = chan->buffer_seq;
1695                 chan->last_acked_seq = chan->buffer_seq;
1696                 control->txseq = chan->next_tx_seq;
1697
1698                 __pack_control(chan, control, skb);
1699
1700                 if (chan->fcs == L2CAP_FCS_CRC16) {
1701                         u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
1702                         put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1703                 }
1704
1705                 /* Clone after data has been modified. Data is assumed to be
1706                    read-only (for locking purposes) on cloned sk_buffs.
1707                  */
1708                 tx_skb = skb_clone(skb, GFP_KERNEL);
1709
1710                 if (!tx_skb)
1711                         break;
1712
1713                 __set_retrans_timer(chan);
1714
1715                 chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1716                 chan->unacked_frames++;
1717                 chan->frames_sent++;
1718                 sent++;
1719
1720                 if (skb_queue_is_last(&chan->tx_q, skb))
1721                         chan->tx_send_head = NULL;
1722                 else
1723                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1724
1725                 l2cap_do_send(chan, tx_skb);
1726                 BT_DBG("Sent txseq %u", control->txseq);
1727         }
1728
1729         BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
1730                chan->unacked_frames, skb_queue_len(&chan->tx_q));
1731
1732         return sent;
1733 }
1734
1735 static void l2cap_ertm_resend(struct l2cap_chan *chan)
1736 {
1737         struct l2cap_ctrl control;
1738         struct sk_buff *skb;
1739         struct sk_buff *tx_skb;
1740         u16 seq;
1741
1742         BT_DBG("chan %p", chan);
1743
1744         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1745                 return;
1746
1747         while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
1748                 seq = l2cap_seq_list_pop(&chan->retrans_list);
1749
1750                 skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
1751                 if (!skb) {
1752                         BT_DBG("Error: Can't retransmit seq %d, frame missing",
1753                                 seq);
1754                         continue;
1755                 }
1756
1757                 bt_cb(skb)->control.retries++;
1758                 control = bt_cb(skb)->control;
1759
1760                 if (chan->max_tx != 0 &&
1761                     bt_cb(skb)->control.retries > chan->max_tx) {
1762                         BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
1763                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
1764                         l2cap_seq_list_clear(&chan->retrans_list);
1765                         break;
1766                 }
1767
1768                 control.reqseq = chan->buffer_seq;
1769                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1770                         control.final = 1;
1771                 else
1772                         control.final = 0;
1773
1774                 if (skb_cloned(skb)) {
1775                         /* Cloned sk_buffs are read-only, so we need a
1776                          * writeable copy
1777                          */
1778                         tx_skb = skb_copy(skb, GFP_ATOMIC);
1779                 } else {
1780                         tx_skb = skb_clone(skb, GFP_ATOMIC);
1781                 }
1782
1783                 if (!tx_skb) {
1784                         l2cap_seq_list_clear(&chan->retrans_list);
1785                         break;
1786                 }
1787
1788                 /* Update skb contents */
1789                 if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
1790                         put_unaligned_le32(__pack_extended_control(&control),
1791                                            tx_skb->data + L2CAP_HDR_SIZE);
1792                 } else {
1793                         put_unaligned_le16(__pack_enhanced_control(&control),
1794                                            tx_skb->data + L2CAP_HDR_SIZE);
1795                 }
1796
1797                 if (chan->fcs == L2CAP_FCS_CRC16) {
1798                         u16 fcs = crc16(0, (u8 *) tx_skb->data, tx_skb->len);
1799                         put_unaligned_le16(fcs, skb_put(tx_skb,
1800                                                         L2CAP_FCS_SIZE));
1801                 }
1802
1803                 l2cap_do_send(chan, tx_skb);
1804
1805                 BT_DBG("Resent txseq %d", control.txseq);
1806
1807                 chan->last_acked_seq = chan->buffer_seq;
1808         }
1809 }
1810
1811 static void l2cap_retransmit(struct l2cap_chan *chan,
1812                              struct l2cap_ctrl *control)
1813 {
1814         BT_DBG("chan %p, control %p", chan, control);
1815
1816         l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
1817         l2cap_ertm_resend(chan);
1818 }
1819
1820 static void l2cap_retransmit_all(struct l2cap_chan *chan,
1821                                  struct l2cap_ctrl *control)
1822 {
1823         struct sk_buff *skb;
1824
1825         BT_DBG("chan %p, control %p", chan, control);
1826
1827         if (control->poll)
1828                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
1829
1830         l2cap_seq_list_clear(&chan->retrans_list);
1831
1832         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1833                 return;
1834
1835         if (chan->unacked_frames) {
1836                 skb_queue_walk(&chan->tx_q, skb) {
1837                         if (bt_cb(skb)->control.txseq == control->reqseq ||
1838                                 skb == chan->tx_send_head)
1839                                 break;
1840                 }
1841
1842                 skb_queue_walk_from(&chan->tx_q, skb) {
1843                         if (skb == chan->tx_send_head)
1844                                 break;
1845
1846                         l2cap_seq_list_append(&chan->retrans_list,
1847                                               bt_cb(skb)->control.txseq);
1848                 }
1849
1850                 l2cap_ertm_resend(chan);
1851         }
1852 }
1853
1854 static void l2cap_send_ack(struct l2cap_chan *chan)
1855 {
1856         struct l2cap_ctrl control;
1857         u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
1858                                          chan->last_acked_seq);
1859         int threshold;
1860
1861         BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
1862                chan, chan->last_acked_seq, chan->buffer_seq);
1863
1864         memset(&control, 0, sizeof(control));
1865         control.sframe = 1;
1866
1867         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
1868             chan->rx_state == L2CAP_RX_STATE_RECV) {
1869                 __clear_ack_timer(chan);
1870                 control.super = L2CAP_SUPER_RNR;
1871                 control.reqseq = chan->buffer_seq;
1872                 l2cap_send_sframe(chan, &control);
1873         } else {
1874                 if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
1875                         l2cap_ertm_send(chan);
1876                         /* If any i-frames were sent, they included an ack */
1877                         if (chan->buffer_seq == chan->last_acked_seq)
1878                                 frames_to_ack = 0;
1879                 }
1880
1881                 /* Ack now if the window is 3/4ths full.
1882                  * Calculate without mul or div
1883                  */
1884                 threshold = chan->ack_win;
1885                 threshold += threshold << 1;
1886                 threshold >>= 2;
1887
1888                 BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
1889                        threshold);
1890
1891                 if (frames_to_ack >= threshold) {
1892                         __clear_ack_timer(chan);
1893                         control.super = L2CAP_SUPER_RR;
1894                         control.reqseq = chan->buffer_seq;
1895                         l2cap_send_sframe(chan, &control);
1896                         frames_to_ack = 0;
1897                 }
1898
1899                 if (frames_to_ack)
1900                         __set_ack_timer(chan);
1901         }
1902 }
1903
1904 static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
1905                                          struct msghdr *msg, int len,
1906                                          int count, struct sk_buff *skb)
1907 {
1908         struct l2cap_conn *conn = chan->conn;
1909         struct sk_buff **frag;
1910         int sent = 0;
1911
1912         if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1913                 return -EFAULT;
1914
1915         sent += count;
1916         len  -= count;
1917
1918         /* Continuation fragments (no L2CAP header) */
1919         frag = &skb_shinfo(skb)->frag_list;
1920         while (len) {
1921                 struct sk_buff *tmp;
1922
1923                 count = min_t(unsigned int, conn->mtu, len);
1924
1925                 tmp = chan->ops->alloc_skb(chan, count,
1926                                            msg->msg_flags & MSG_DONTWAIT);
1927                 if (IS_ERR(tmp))
1928                         return PTR_ERR(tmp);
1929
1930                 *frag = tmp;
1931
1932                 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1933                         return -EFAULT;
1934
1935                 (*frag)->priority = skb->priority;
1936
1937                 sent += count;
1938                 len  -= count;
1939
1940                 skb->len += (*frag)->len;
1941                 skb->data_len += (*frag)->len;
1942
1943                 frag = &(*frag)->next;
1944         }
1945
1946         return sent;
1947 }
1948
1949 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
1950                                                  struct msghdr *msg, size_t len,
1951                                                  u32 priority)
1952 {
1953         struct l2cap_conn *conn = chan->conn;
1954         struct sk_buff *skb;
1955         int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1956         struct l2cap_hdr *lh;
1957
1958         BT_DBG("chan %p len %zu priority %u", chan, len, priority);
1959
1960         count = min_t(unsigned int, (conn->mtu - hlen), len);
1961
1962         skb = chan->ops->alloc_skb(chan, count + hlen,
1963                                    msg->msg_flags & MSG_DONTWAIT);
1964         if (IS_ERR(skb))
1965                 return skb;
1966
1967         skb->priority = priority;
1968
1969         /* Create L2CAP header */
1970         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1971         lh->cid = cpu_to_le16(chan->dcid);
1972         lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
1973         put_unaligned(chan->psm, skb_put(skb, L2CAP_PSMLEN_SIZE));
1974
1975         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1976         if (unlikely(err < 0)) {
1977                 kfree_skb(skb);
1978                 return ERR_PTR(err);
1979         }
1980         return skb;
1981 }
1982
1983 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
1984                                               struct msghdr *msg, size_t len,
1985                                               u32 priority)
1986 {
1987         struct l2cap_conn *conn = chan->conn;
1988         struct sk_buff *skb;
1989         int err, count;
1990         struct l2cap_hdr *lh;
1991
1992         BT_DBG("chan %p len %zu", chan, len);
1993
1994         count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
1995
1996         skb = chan->ops->alloc_skb(chan, count + L2CAP_HDR_SIZE,
1997                                    msg->msg_flags & MSG_DONTWAIT);
1998         if (IS_ERR(skb))
1999                 return skb;
2000
2001         skb->priority = priority;
2002
2003         /* Create L2CAP header */
2004         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2005         lh->cid = cpu_to_le16(chan->dcid);
2006         lh->len = cpu_to_le16(len);
2007
2008         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2009         if (unlikely(err < 0)) {
2010                 kfree_skb(skb);
2011                 return ERR_PTR(err);
2012         }
2013         return skb;
2014 }
2015
2016 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2017                                                struct msghdr *msg, size_t len,
2018                                                u16 sdulen)
2019 {
2020         struct l2cap_conn *conn = chan->conn;
2021         struct sk_buff *skb;
2022         int err, count, hlen;
2023         struct l2cap_hdr *lh;
2024
2025         BT_DBG("chan %p len %zu", chan, len);
2026
2027         if (!conn)
2028                 return ERR_PTR(-ENOTCONN);
2029
2030         hlen = __ertm_hdr_size(chan);
2031
2032         if (sdulen)
2033                 hlen += L2CAP_SDULEN_SIZE;
2034
2035         if (chan->fcs == L2CAP_FCS_CRC16)
2036                 hlen += L2CAP_FCS_SIZE;
2037
2038         count = min_t(unsigned int, (conn->mtu - hlen), len);
2039
2040         skb = chan->ops->alloc_skb(chan, count + hlen,
2041                                    msg->msg_flags & MSG_DONTWAIT);
2042         if (IS_ERR(skb))
2043                 return skb;
2044
2045         /* Create L2CAP header */
2046         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2047         lh->cid = cpu_to_le16(chan->dcid);
2048         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2049
2050         /* Control header is populated later */
2051         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2052                 put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2053         else
2054                 put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2055
2056         if (sdulen)
2057                 put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2058
2059         err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2060         if (unlikely(err < 0)) {
2061                 kfree_skb(skb);
2062                 return ERR_PTR(err);
2063         }
2064
2065         bt_cb(skb)->control.fcs = chan->fcs;
2066         bt_cb(skb)->control.retries = 0;
2067         return skb;
2068 }
2069
2070 static int l2cap_segment_sdu(struct l2cap_chan *chan,
2071                              struct sk_buff_head *seg_queue,
2072                              struct msghdr *msg, size_t len)
2073 {
2074         struct sk_buff *skb;
2075         u16 sdu_len;
2076         size_t pdu_len;
2077         u8 sar;
2078
2079         BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2080
2081         /* It is critical that ERTM PDUs fit in a single HCI fragment,
2082          * so fragmented skbs are not used.  The HCI layer's handling
2083          * of fragmented skbs is not compatible with ERTM's queueing.
2084          */
2085
2086         /* PDU size is derived from the HCI MTU */
2087         pdu_len = chan->conn->mtu;
2088
2089         pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2090
2091         /* Adjust for largest possible L2CAP overhead. */
2092         if (chan->fcs)
2093                 pdu_len -= L2CAP_FCS_SIZE;
2094
2095         pdu_len -= __ertm_hdr_size(chan);
2096
2097         /* Remote device may have requested smaller PDUs */
2098         pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2099
2100         if (len <= pdu_len) {
2101                 sar = L2CAP_SAR_UNSEGMENTED;
2102                 sdu_len = 0;
2103                 pdu_len = len;
2104         } else {
2105                 sar = L2CAP_SAR_START;
2106                 sdu_len = len;
2107                 pdu_len -= L2CAP_SDULEN_SIZE;
2108         }
2109
2110         while (len > 0) {
2111                 skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2112
2113                 if (IS_ERR(skb)) {
2114                         __skb_queue_purge(seg_queue);
2115                         return PTR_ERR(skb);
2116                 }
2117
2118                 bt_cb(skb)->control.sar = sar;
2119                 __skb_queue_tail(seg_queue, skb);
2120
2121                 len -= pdu_len;
2122                 if (sdu_len) {
2123                         sdu_len = 0;
2124                         pdu_len += L2CAP_SDULEN_SIZE;
2125                 }
2126
2127                 if (len <= pdu_len) {
2128                         sar = L2CAP_SAR_END;
2129                         pdu_len = len;
2130                 } else {
2131                         sar = L2CAP_SAR_CONTINUE;
2132                 }
2133         }
2134
2135         return 0;
2136 }
2137
2138 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
2139                                                                 u32 priority)
2140 {
2141         struct sk_buff *skb;
2142         int err;
2143         struct sk_buff_head seg_queue;
2144
2145         /* Connectionless channel */
2146         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2147                 skb = l2cap_create_connless_pdu(chan, msg, len, priority);
2148                 if (IS_ERR(skb))
2149                         return PTR_ERR(skb);
2150
2151                 l2cap_do_send(chan, skb);
2152                 return len;
2153         }
2154
2155         switch (chan->mode) {
2156         case L2CAP_MODE_BASIC:
2157                 /* Check outgoing MTU */
2158                 if (len > chan->omtu)
2159                         return -EMSGSIZE;
2160
2161                 /* Create a basic PDU */
2162                 skb = l2cap_create_basic_pdu(chan, msg, len, priority);
2163                 if (IS_ERR(skb))
2164                         return PTR_ERR(skb);
2165
2166                 l2cap_do_send(chan, skb);
2167                 err = len;
2168                 break;
2169
2170         case L2CAP_MODE_ERTM:
2171         case L2CAP_MODE_STREAMING:
2172                 /* Check outgoing MTU */
2173                 if (len > chan->omtu) {
2174                         err = -EMSGSIZE;
2175                         break;
2176                 }
2177
2178                 __skb_queue_head_init(&seg_queue);
2179
2180                 /* Do segmentation before calling in to the state machine,
2181                  * since it's possible to block while waiting for memory
2182                  * allocation.
2183                  */
2184                 err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2185
2186                 /* The channel could have been closed while segmenting,
2187                  * check that it is still connected.
2188                  */
2189                 if (chan->state != BT_CONNECTED) {
2190                         __skb_queue_purge(&seg_queue);
2191                         err = -ENOTCONN;
2192                 }
2193
2194                 if (err)
2195                         break;
2196
2197                 if (chan->mode == L2CAP_MODE_ERTM)
2198                         l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2199                 else
2200                         l2cap_streaming_send(chan, &seg_queue);
2201
2202                 err = len;
2203
2204                 /* If the skbs were not queued for sending, they'll still be in
2205                  * seg_queue and need to be purged.
2206                  */
2207                 __skb_queue_purge(&seg_queue);
2208                 break;
2209
2210         default:
2211                 BT_DBG("bad state %1.1x", chan->mode);
2212                 err = -EBADFD;
2213         }
2214
2215         return err;
2216 }
2217
2218 static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2219 {
2220         struct l2cap_ctrl control;
2221         u16 seq;
2222
2223         BT_DBG("chan %p, txseq %u", chan, txseq);
2224
2225         memset(&control, 0, sizeof(control));
2226         control.sframe = 1;
2227         control.super = L2CAP_SUPER_SREJ;
2228
2229         for (seq = chan->expected_tx_seq; seq != txseq;
2230              seq = __next_seq(chan, seq)) {
2231                 if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2232                         control.reqseq = seq;
2233                         l2cap_send_sframe(chan, &control);
2234                         l2cap_seq_list_append(&chan->srej_list, seq);
2235                 }
2236         }
2237
2238         chan->expected_tx_seq = __next_seq(chan, txseq);
2239 }
2240
2241 static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2242 {
2243         struct l2cap_ctrl control;
2244
2245         BT_DBG("chan %p", chan);
2246
2247         if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2248                 return;
2249
2250         memset(&control, 0, sizeof(control));
2251         control.sframe = 1;
2252         control.super = L2CAP_SUPER_SREJ;
2253         control.reqseq = chan->srej_list.tail;
2254         l2cap_send_sframe(chan, &control);
2255 }
2256
2257 static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2258 {
2259         struct l2cap_ctrl control;
2260         u16 initial_head;
2261         u16 seq;
2262
2263         BT_DBG("chan %p, txseq %u", chan, txseq);
2264
2265         memset(&control, 0, sizeof(control));
2266         control.sframe = 1;
2267         control.super = L2CAP_SUPER_SREJ;
2268
2269         /* Capture initial list head to allow only one pass through the list. */
2270         initial_head = chan->srej_list.head;
2271
2272         do {
2273                 seq = l2cap_seq_list_pop(&chan->srej_list);
2274                 if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2275                         break;
2276
2277                 control.reqseq = seq;
2278                 l2cap_send_sframe(chan, &control);
2279                 l2cap_seq_list_append(&chan->srej_list, seq);
2280         } while (chan->srej_list.head != initial_head);
2281 }
2282
2283 static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2284 {
2285         struct sk_buff *acked_skb;
2286         u16 ackseq;
2287
2288         BT_DBG("chan %p, reqseq %u", chan, reqseq);
2289
2290         if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2291                 return;
2292
2293         BT_DBG("expected_ack_seq %u, unacked_frames %u",
2294                chan->expected_ack_seq, chan->unacked_frames);
2295
2296         for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2297              ackseq = __next_seq(chan, ackseq)) {
2298
2299                 acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2300                 if (acked_skb) {
2301                         skb_unlink(acked_skb, &chan->tx_q);
2302                         kfree_skb(acked_skb);
2303                         chan->unacked_frames--;
2304                 }
2305         }
2306
2307         chan->expected_ack_seq = reqseq;
2308
2309         if (chan->unacked_frames == 0)
2310                 __clear_retrans_timer(chan);
2311
2312         BT_DBG("unacked_frames %u", chan->unacked_frames);
2313 }
2314
2315 static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2316 {
2317         BT_DBG("chan %p", chan);
2318
2319         chan->expected_tx_seq = chan->buffer_seq;
2320         l2cap_seq_list_clear(&chan->srej_list);
2321         skb_queue_purge(&chan->srej_q);
2322         chan->rx_state = L2CAP_RX_STATE_RECV;
2323 }
2324
2325 static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2326                                 struct l2cap_ctrl *control,
2327                                 struct sk_buff_head *skbs, u8 event)
2328 {
2329         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2330                event);
2331
2332         switch (event) {
2333         case L2CAP_EV_DATA_REQUEST:
2334                 if (chan->tx_send_head == NULL)
2335                         chan->tx_send_head = skb_peek(skbs);
2336
2337                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2338                 l2cap_ertm_send(chan);
2339                 break;
2340         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2341                 BT_DBG("Enter LOCAL_BUSY");
2342                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2343
2344                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2345                         /* The SREJ_SENT state must be aborted if we are to
2346                          * enter the LOCAL_BUSY state.
2347                          */
2348                         l2cap_abort_rx_srej_sent(chan);
2349                 }
2350
2351                 l2cap_send_ack(chan);
2352
2353                 break;
2354         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2355                 BT_DBG("Exit LOCAL_BUSY");
2356                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2357
2358                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2359                         struct l2cap_ctrl local_control;
2360
2361                         memset(&local_control, 0, sizeof(local_control));
2362                         local_control.sframe = 1;
2363                         local_control.super = L2CAP_SUPER_RR;
2364                         local_control.poll = 1;
2365                         local_control.reqseq = chan->buffer_seq;
2366                         l2cap_send_sframe(chan, &local_control);
2367
2368                         chan->retry_count = 1;
2369                         __set_monitor_timer(chan);
2370                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2371                 }
2372                 break;
2373         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2374                 l2cap_process_reqseq(chan, control->reqseq);
2375                 break;
2376         case L2CAP_EV_EXPLICIT_POLL:
2377                 l2cap_send_rr_or_rnr(chan, 1);
2378                 chan->retry_count = 1;
2379                 __set_monitor_timer(chan);
2380                 __clear_ack_timer(chan);
2381                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2382                 break;
2383         case L2CAP_EV_RETRANS_TO:
2384                 l2cap_send_rr_or_rnr(chan, 1);
2385                 chan->retry_count = 1;
2386                 __set_monitor_timer(chan);
2387                 chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2388                 break;
2389         case L2CAP_EV_RECV_FBIT:
2390                 /* Nothing to process */
2391                 break;
2392         default:
2393                 break;
2394         }
2395 }
2396
2397 static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2398                                   struct l2cap_ctrl *control,
2399                                   struct sk_buff_head *skbs, u8 event)
2400 {
2401         BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2402                event);
2403
2404         switch (event) {
2405         case L2CAP_EV_DATA_REQUEST:
2406                 if (chan->tx_send_head == NULL)
2407                         chan->tx_send_head = skb_peek(skbs);
2408                 /* Queue data, but don't send. */
2409                 skb_queue_splice_tail_init(skbs, &chan->tx_q);
2410                 break;
2411         case L2CAP_EV_LOCAL_BUSY_DETECTED:
2412                 BT_DBG("Enter LOCAL_BUSY");
2413                 set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2414
2415                 if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2416                         /* The SREJ_SENT state must be aborted if we are to
2417                          * enter the LOCAL_BUSY state.
2418                          */
2419                         l2cap_abort_rx_srej_sent(chan);
2420                 }
2421
2422                 l2cap_send_ack(chan);
2423
2424                 break;
2425         case L2CAP_EV_LOCAL_BUSY_CLEAR:
2426                 BT_DBG("Exit LOCAL_BUSY");
2427                 clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2428
2429                 if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2430                         struct l2cap_ctrl local_control;
2431                         memset(&local_control, 0, sizeof(local_control));
2432                         local_control.sframe = 1;
2433                         local_control.super = L2CAP_SUPER_RR;
2434                         local_control.poll = 1;
2435                         local_control.reqseq = chan->buffer_seq;
2436                         l2cap_send_sframe(chan, &local_control);
2437
2438                         chan->retry_count = 1;
2439                         __set_monitor_timer(chan);
2440                         chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2441                 }
2442                 break;
2443         case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2444                 l2cap_process_reqseq(chan, control->reqseq);
2445
2446                 /* Fall through */
2447
2448         case L2CAP_EV_RECV_FBIT:
2449                 if (control && control->final) {
2450                         __clear_monitor_timer(chan);
2451                         if (chan->unacked_frames > 0)
2452                                 __set_retrans_timer(chan);
2453                         chan->retry_count = 0;
2454                         chan->tx_state = L2CAP_TX_STATE_XMIT;
2455                         BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
2456                 }
2457                 break;
2458         case L2CAP_EV_EXPLICIT_POLL:
2459                 /* Ignore */
2460                 break;
2461         case L2CAP_EV_MONITOR_TO:
2462                 if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
2463                         l2cap_send_rr_or_rnr(chan, 1);
2464                         __set_monitor_timer(chan);
2465                         chan->retry_count++;
2466                 } else {
2467                         l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
2468                 }
2469                 break;
2470         default:
2471                 break;
2472         }
2473 }
2474
2475 static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
2476                      struct sk_buff_head *skbs, u8 event)
2477 {
2478         BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
2479                chan, control, skbs, event, chan->tx_state);
2480
2481         switch (chan->tx_state) {
2482         case L2CAP_TX_STATE_XMIT:
2483                 l2cap_tx_state_xmit(chan, control, skbs, event);
2484                 break;
2485         case L2CAP_TX_STATE_WAIT_F:
2486                 l2cap_tx_state_wait_f(chan, control, skbs, event);
2487                 break;
2488         default:
2489                 /* Ignore event */
2490                 break;
2491         }
2492 }
2493
2494 static void l2cap_pass_to_tx(struct l2cap_chan *chan,
2495                              struct l2cap_ctrl *control)
2496 {
2497         BT_DBG("chan %p, control %p", chan, control);
2498         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
2499 }
2500
2501 static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
2502                                   struct l2cap_ctrl *control)
2503 {
2504         BT_DBG("chan %p, control %p", chan, control);
2505         l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
2506 }
2507
2508 /* Copy frame to all raw sockets on that connection */
2509 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2510 {
2511         struct sk_buff *nskb;
2512         struct l2cap_chan *chan;
2513
2514         BT_DBG("conn %p", conn);
2515
2516         mutex_lock(&conn->chan_lock);
2517
2518         list_for_each_entry(chan, &conn->chan_l, list) {
2519                 struct sock *sk = chan->sk;
2520                 if (chan->chan_type != L2CAP_CHAN_RAW)
2521                         continue;
2522
2523                 /* Don't send frame to the socket it came from */
2524                 if (skb->sk == sk)
2525                         continue;
2526                 nskb = skb_clone(skb, GFP_ATOMIC);
2527                 if (!nskb)
2528                         continue;
2529
2530                 if (chan->ops->recv(chan, nskb))
2531                         kfree_skb(nskb);
2532         }
2533
2534         mutex_unlock(&conn->chan_lock);
2535 }
2536
2537 /* ---- L2CAP signalling commands ---- */
2538 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
2539                                        u8 ident, u16 dlen, void *data)
2540 {
2541         struct sk_buff *skb, **frag;
2542         struct l2cap_cmd_hdr *cmd;
2543         struct l2cap_hdr *lh;
2544         int len, count;
2545
2546         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
2547                conn, code, ident, dlen);
2548
2549         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
2550         count = min_t(unsigned int, conn->mtu, len);
2551
2552         skb = bt_skb_alloc(count, GFP_ATOMIC);
2553         if (!skb)
2554                 return NULL;
2555
2556         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2557         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2558
2559         if (conn->hcon->type == LE_LINK)
2560                 lh->cid = __constant_cpu_to_le16(L2CAP_CID_LE_SIGNALING);
2561         else
2562                 lh->cid = __constant_cpu_to_le16(L2CAP_CID_SIGNALING);
2563
2564         cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
2565         cmd->code  = code;
2566         cmd->ident = ident;
2567         cmd->len   = cpu_to_le16(dlen);
2568
2569         if (dlen) {
2570                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
2571                 memcpy(skb_put(skb, count), data, count);
2572                 data += count;
2573         }
2574
2575         len -= skb->len;
2576
2577         /* Continuation fragments (no L2CAP header) */
2578         frag = &skb_shinfo(skb)->frag_list;
2579         while (len) {
2580                 count = min_t(unsigned int, conn->mtu, len);
2581
2582                 *frag = bt_skb_alloc(count, GFP_ATOMIC);
2583                 if (!*frag)
2584                         goto fail;
2585
2586                 memcpy(skb_put(*frag, count), data, count);
2587
2588                 len  -= count;
2589                 data += count;
2590
2591                 frag = &(*frag)->next;
2592         }
2593
2594         return skb;
2595
2596 fail:
2597         kfree_skb(skb);
2598         return NULL;
2599 }
2600
2601 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
2602 {
2603         struct l2cap_conf_opt *opt = *ptr;
2604         int len;
2605
2606         len = L2CAP_CONF_OPT_SIZE + opt->len;
2607         *ptr += len;
2608
2609         *type = opt->type;
2610         *olen = opt->len;
2611
2612         switch (opt->len) {
2613         case 1:
2614                 *val = *((u8 *) opt->val);
2615                 break;
2616
2617         case 2:
2618                 *val = get_unaligned_le16(opt->val);
2619                 break;
2620
2621         case 4:
2622                 *val = get_unaligned_le32(opt->val);
2623                 break;
2624
2625         default:
2626                 *val = (unsigned long) opt->val;
2627                 break;
2628         }
2629
2630         BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
2631         return len;
2632 }
2633
2634 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
2635 {
2636         struct l2cap_conf_opt *opt = *ptr;
2637
2638         BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
2639
2640         opt->type = type;
2641         opt->len  = len;
2642
2643         switch (len) {
2644         case 1:
2645                 *((u8 *) opt->val)  = val;
2646                 break;
2647
2648         case 2:
2649                 put_unaligned_le16(val, opt->val);
2650                 break;
2651
2652         case 4:
2653                 put_unaligned_le32(val, opt->val);
2654                 break;
2655
2656         default:
2657                 memcpy(opt->val, (void *) val, len);
2658                 break;
2659         }
2660
2661         *ptr += L2CAP_CONF_OPT_SIZE + len;
2662 }
2663
2664 static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
2665 {
2666         struct l2cap_conf_efs efs;
2667
2668         switch (chan->mode) {
2669         case L2CAP_MODE_ERTM:
2670                 efs.id          = chan->local_id;
2671                 efs.stype       = chan->local_stype;
2672                 efs.msdu        = cpu_to_le16(chan->local_msdu);
2673                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2674                 efs.acc_lat     = __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
2675                 efs.flush_to    = __constant_cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO);
2676                 break;
2677
2678         case L2CAP_MODE_STREAMING:
2679                 efs.id          = 1;
2680                 efs.stype       = L2CAP_SERV_BESTEFFORT;
2681                 efs.msdu        = cpu_to_le16(chan->local_msdu);
2682                 efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2683                 efs.acc_lat     = 0;
2684                 efs.flush_to    = 0;
2685                 break;
2686
2687         default:
2688                 return;
2689         }
2690
2691         l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
2692                                                         (unsigned long) &efs);
2693 }
2694
2695 static void l2cap_ack_timeout(struct work_struct *work)
2696 {
2697         struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
2698                                                ack_timer.work);
2699         u16 frames_to_ack;
2700
2701         BT_DBG("chan %p", chan);
2702
2703         l2cap_chan_lock(chan);
2704
2705         frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2706                                      chan->last_acked_seq);
2707
2708         if (frames_to_ack)
2709                 l2cap_send_rr_or_rnr(chan, 0);
2710
2711         l2cap_chan_unlock(chan);
2712         l2cap_chan_put(chan);
2713 }
2714
2715 int l2cap_ertm_init(struct l2cap_chan *chan)
2716 {
2717         int err;
2718
2719         chan->next_tx_seq = 0;
2720         chan->expected_tx_seq = 0;
2721         chan->expected_ack_seq = 0;
2722         chan->unacked_frames = 0;
2723         chan->buffer_seq = 0;
2724         chan->frames_sent = 0;
2725         chan->last_acked_seq = 0;
2726         chan->sdu = NULL;
2727         chan->sdu_last_frag = NULL;
2728         chan->sdu_len = 0;
2729
2730         skb_queue_head_init(&chan->tx_q);
2731
2732         if (chan->mode != L2CAP_MODE_ERTM)
2733                 return 0;
2734
2735         chan->rx_state = L2CAP_RX_STATE_RECV;
2736         chan->tx_state = L2CAP_TX_STATE_XMIT;
2737
2738         INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
2739         INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
2740         INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
2741
2742         skb_queue_head_init(&chan->srej_q);
2743
2744         err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
2745         if (err < 0)
2746                 return err;
2747
2748         err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
2749         if (err < 0)
2750                 l2cap_seq_list_free(&chan->srej_list);
2751
2752         return err;
2753 }
2754
2755 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
2756 {
2757         switch (mode) {
2758         case L2CAP_MODE_STREAMING:
2759         case L2CAP_MODE_ERTM:
2760                 if (l2cap_mode_supported(mode, remote_feat_mask))
2761                         return mode;
2762                 /* fall through */
2763         default:
2764                 return L2CAP_MODE_BASIC;
2765         }
2766 }
2767
2768 static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
2769 {
2770         return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
2771 }
2772
2773 static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
2774 {
2775         return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
2776 }
2777
2778 static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
2779 {
2780         if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
2781                                                 __l2cap_ews_supported(chan)) {
2782                 /* use extended control field */
2783                 set_bit(FLAG_EXT_CTRL, &chan->flags);
2784                 chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2785         } else {
2786                 chan->tx_win = min_t(u16, chan->tx_win,
2787                                                 L2CAP_DEFAULT_TX_WINDOW);
2788                 chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
2789         }
2790         chan->ack_win = chan->tx_win;
2791 }
2792
2793 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
2794 {
2795         struct l2cap_conf_req *req = data;
2796         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
2797         void *ptr = req->data;
2798         u16 size;
2799
2800         BT_DBG("chan %p", chan);
2801
2802         if (chan->num_conf_req || chan->num_conf_rsp)
2803                 goto done;
2804
2805         switch (chan->mode) {
2806         case L2CAP_MODE_STREAMING:
2807         case L2CAP_MODE_ERTM:
2808                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2809                         break;
2810
2811                 if (__l2cap_efs_supported(chan))
2812                         set_bit(FLAG_EFS_ENABLE, &chan->flags);
2813
2814                 /* fall through */
2815         default:
2816                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2817                 break;
2818         }
2819
2820 done:
2821         if (chan->imtu != L2CAP_DEFAULT_MTU)
2822                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2823
2824         switch (chan->mode) {
2825         case L2CAP_MODE_BASIC:
2826                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
2827                                 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2828                         break;
2829
2830                 rfc.mode            = L2CAP_MODE_BASIC;
2831                 rfc.txwin_size      = 0;
2832                 rfc.max_transmit    = 0;
2833                 rfc.retrans_timeout = 0;
2834                 rfc.monitor_timeout = 0;
2835                 rfc.max_pdu_size    = 0;
2836
2837                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2838                                                         (unsigned long) &rfc);
2839                 break;
2840
2841         case L2CAP_MODE_ERTM:
2842                 rfc.mode            = L2CAP_MODE_ERTM;
2843                 rfc.max_transmit    = chan->max_tx;
2844                 rfc.retrans_timeout = 0;
2845                 rfc.monitor_timeout = 0;
2846
2847                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
2848                                                 L2CAP_EXT_HDR_SIZE -
2849                                                 L2CAP_SDULEN_SIZE -
2850                                                 L2CAP_FCS_SIZE);
2851                 rfc.max_pdu_size = cpu_to_le16(size);
2852
2853                 l2cap_txwin_setup(chan);
2854
2855                 rfc.txwin_size = min_t(u16, chan->tx_win,
2856                                                 L2CAP_DEFAULT_TX_WINDOW);
2857
2858                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2859                                                         (unsigned long) &rfc);
2860
2861                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
2862                         l2cap_add_opt_efs(&ptr, chan);
2863
2864                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2865                         break;
2866
2867                 if (chan->fcs == L2CAP_FCS_NONE ||
2868                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2869                         chan->fcs = L2CAP_FCS_NONE;
2870                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2871                 }
2872
2873                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2874                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
2875                                                                 chan->tx_win);
2876                 break;
2877
2878         case L2CAP_MODE_STREAMING:
2879                 l2cap_txwin_setup(chan);
2880                 rfc.mode            = L2CAP_MODE_STREAMING;
2881                 rfc.txwin_size      = 0;
2882                 rfc.max_transmit    = 0;
2883                 rfc.retrans_timeout = 0;
2884                 rfc.monitor_timeout = 0;
2885
2886                 size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
2887                                                 L2CAP_EXT_HDR_SIZE -
2888                                                 L2CAP_SDULEN_SIZE -
2889                                                 L2CAP_FCS_SIZE);
2890                 rfc.max_pdu_size = cpu_to_le16(size);
2891
2892                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
2893                                                         (unsigned long) &rfc);
2894
2895                 if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
2896                         l2cap_add_opt_efs(&ptr, chan);
2897
2898                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2899                         break;
2900
2901                 if (chan->fcs == L2CAP_FCS_NONE ||
2902                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2903                         chan->fcs = L2CAP_FCS_NONE;
2904                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2905                 }
2906                 break;
2907         }
2908
2909         req->dcid  = cpu_to_le16(chan->dcid);
2910         req->flags = __constant_cpu_to_le16(0);
2911
2912         return ptr - data;
2913 }
2914
2915 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
2916 {
2917         struct l2cap_conf_rsp *rsp = data;
2918         void *ptr = rsp->data;
2919         void *req = chan->conf_req;
2920         int len = chan->conf_len;
2921         int type, hint, olen;
2922         unsigned long val;
2923         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2924         struct l2cap_conf_efs efs;
2925         u8 remote_efs = 0;
2926         u16 mtu = L2CAP_DEFAULT_MTU;
2927         u16 result = L2CAP_CONF_SUCCESS;
2928         u16 size;
2929
2930         BT_DBG("chan %p", chan);
2931
2932         while (len >= L2CAP_CONF_OPT_SIZE) {
2933                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2934
2935                 hint  = type & L2CAP_CONF_HINT;
2936                 type &= L2CAP_CONF_MASK;
2937
2938                 switch (type) {
2939                 case L2CAP_CONF_MTU:
2940                         mtu = val;
2941                         break;
2942
2943                 case L2CAP_CONF_FLUSH_TO:
2944                         chan->flush_to = val;
2945                         break;
2946
2947                 case L2CAP_CONF_QOS:
2948                         break;
2949
2950                 case L2CAP_CONF_RFC:
2951                         if (olen == sizeof(rfc))
2952                                 memcpy(&rfc, (void *) val, olen);
2953                         break;
2954
2955                 case L2CAP_CONF_FCS:
2956                         if (val == L2CAP_FCS_NONE)
2957                                 set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2958                         break;
2959
2960                 case L2CAP_CONF_EFS:
2961                         remote_efs = 1;
2962                         if (olen == sizeof(efs))
2963                                 memcpy(&efs, (void *) val, olen);
2964                         break;
2965
2966                 case L2CAP_CONF_EWS:
2967                         if (!enable_hs)
2968                                 return -ECONNREFUSED;
2969
2970                         set_bit(FLAG_EXT_CTRL, &chan->flags);
2971                         set_bit(CONF_EWS_RECV, &chan->conf_state);
2972                         chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2973                         chan->remote_tx_win = val;
2974                         break;
2975
2976                 default:
2977                         if (hint)
2978                                 break;
2979
2980                         result = L2CAP_CONF_UNKNOWN;
2981                         *((u8 *) ptr++) = type;
2982                         break;
2983                 }
2984         }
2985
2986         if (chan->num_conf_rsp || chan->num_conf_req > 1)
2987                 goto done;
2988
2989         switch (chan->mode) {
2990         case L2CAP_MODE_STREAMING:
2991         case L2CAP_MODE_ERTM:
2992                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2993                         chan->mode = l2cap_select_mode(rfc.mode,
2994                                         chan->conn->feat_mask);
2995                         break;
2996                 }
2997
2998                 if (remote_efs) {
2999                         if (__l2cap_efs_supported(chan))
3000                                 set_bit(FLAG_EFS_ENABLE, &chan->flags);
3001                         else
3002                                 return -ECONNREFUSED;
3003                 }
3004
3005                 if (chan->mode != rfc.mode)
3006                         return -ECONNREFUSED;
3007
3008                 break;
3009         }
3010
3011 done:
3012         if (chan->mode != rfc.mode) {
3013                 result = L2CAP_CONF_UNACCEPT;
3014                 rfc.mode = chan->mode;
3015
3016                 if (chan->num_conf_rsp == 1)
3017                         return -ECONNREFUSED;
3018
3019                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3020                                         sizeof(rfc), (unsigned long) &rfc);
3021         }
3022
3023         if (result == L2CAP_CONF_SUCCESS) {
3024                 /* Configure output options and let the other side know
3025                  * which ones we don't like. */
3026
3027                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
3028                         result = L2CAP_CONF_UNACCEPT;
3029                 else {
3030                         chan->omtu = mtu;
3031                         set_bit(CONF_MTU_DONE, &chan->conf_state);
3032                 }
3033                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
3034
3035                 if (remote_efs) {
3036                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3037                                         efs.stype != L2CAP_SERV_NOTRAFIC &&
3038                                         efs.stype != chan->local_stype) {
3039
3040                                 result = L2CAP_CONF_UNACCEPT;
3041
3042                                 if (chan->num_conf_req >= 1)
3043                                         return -ECONNREFUSED;
3044
3045                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3046                                                         sizeof(efs),
3047                                                         (unsigned long) &efs);
3048                         } else {
3049                                 /* Send PENDING Conf Rsp */
3050                                 result = L2CAP_CONF_PENDING;
3051                                 set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3052                         }
3053                 }
3054
3055                 switch (rfc.mode) {
3056                 case L2CAP_MODE_BASIC:
3057                         chan->fcs = L2CAP_FCS_NONE;
3058                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3059                         break;
3060
3061                 case L2CAP_MODE_ERTM:
3062                         if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3063                                 chan->remote_tx_win = rfc.txwin_size;
3064                         else
3065                                 rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3066
3067                         chan->remote_max_tx = rfc.max_transmit;
3068
3069                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3070                                                 chan->conn->mtu -
3071                                                 L2CAP_EXT_HDR_SIZE -
3072                                                 L2CAP_SDULEN_SIZE -
3073                                                 L2CAP_FCS_SIZE);
3074                         rfc.max_pdu_size = cpu_to_le16(size);
3075                         chan->remote_mps = size;
3076
3077                         rfc.retrans_timeout =
3078                                 __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3079                         rfc.monitor_timeout =
3080                                 __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3081
3082                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3083
3084                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3085                                         sizeof(rfc), (unsigned long) &rfc);
3086
3087                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3088                                 chan->remote_id = efs.id;
3089                                 chan->remote_stype = efs.stype;
3090                                 chan->remote_msdu = le16_to_cpu(efs.msdu);
3091                                 chan->remote_flush_to =
3092                                                 le32_to_cpu(efs.flush_to);
3093                                 chan->remote_acc_lat =
3094                                                 le32_to_cpu(efs.acc_lat);
3095                                 chan->remote_sdu_itime =
3096                                         le32_to_cpu(efs.sdu_itime);
3097                                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3098                                         sizeof(efs), (unsigned long) &efs);
3099                         }
3100                         break;
3101
3102                 case L2CAP_MODE_STREAMING:
3103                         size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3104                                                 chan->conn->mtu -
3105                                                 L2CAP_EXT_HDR_SIZE -
3106                                                 L2CAP_SDULEN_SIZE -
3107                                                 L2CAP_FCS_SIZE);
3108                         rfc.max_pdu_size = cpu_to_le16(size);
3109                         chan->remote_mps = size;
3110
3111                         set_bit(CONF_MODE_DONE, &chan->conf_state);
3112
3113                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3114                                         sizeof(rfc), (unsigned long) &rfc);
3115
3116                         break;
3117
3118                 default:
3119                         result = L2CAP_CONF_UNACCEPT;
3120
3121                         memset(&rfc, 0, sizeof(rfc));
3122                         rfc.mode = chan->mode;
3123                 }
3124
3125                 if (result == L2CAP_CONF_SUCCESS)
3126                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3127         }
3128         rsp->scid   = cpu_to_le16(chan->dcid);
3129         rsp->result = cpu_to_le16(result);
3130         rsp->flags  = __constant_cpu_to_le16(0);
3131
3132         return ptr - data;
3133 }
3134
3135 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
3136 {
3137         struct l2cap_conf_req *req = data;
3138         void *ptr = req->data;
3139         int type, olen;
3140         unsigned long val;
3141         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3142         struct l2cap_conf_efs efs;
3143
3144         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3145
3146         while (len >= L2CAP_CONF_OPT_SIZE) {
3147                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3148
3149                 switch (type) {
3150                 case L2CAP_CONF_MTU:
3151                         if (val < L2CAP_DEFAULT_MIN_MTU) {
3152                                 *result = L2CAP_CONF_UNACCEPT;
3153                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3154                         } else
3155                                 chan->imtu = val;
3156                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
3157                         break;
3158
3159                 case L2CAP_CONF_FLUSH_TO:
3160                         chan->flush_to = val;
3161                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
3162                                                         2, chan->flush_to);
3163                         break;
3164
3165                 case L2CAP_CONF_RFC:
3166                         if (olen == sizeof(rfc))
3167                                 memcpy(&rfc, (void *)val, olen);
3168
3169                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3170                                                         rfc.mode != chan->mode)
3171                                 return -ECONNREFUSED;
3172
3173                         chan->fcs = 0;
3174
3175                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3176                                         sizeof(rfc), (unsigned long) &rfc);
3177                         break;
3178
3179                 case L2CAP_CONF_EWS:
3180                         chan->ack_win = min_t(u16, val, chan->ack_win);
3181                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3182                                            chan->tx_win);
3183                         break;
3184
3185                 case L2CAP_CONF_EFS:
3186                         if (olen == sizeof(efs))
3187                                 memcpy(&efs, (void *)val, olen);
3188
3189                         if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3190                                         efs.stype != L2CAP_SERV_NOTRAFIC &&
3191                                         efs.stype != chan->local_stype)
3192                                 return -ECONNREFUSED;
3193
3194                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3195                                         sizeof(efs), (unsigned long) &efs);
3196                         break;
3197                 }
3198         }
3199
3200         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3201                 return -ECONNREFUSED;
3202
3203         chan->mode = rfc.mode;
3204
3205         if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3206                 switch (rfc.mode) {
3207                 case L2CAP_MODE_ERTM:
3208                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3209                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3210                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3211                         if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3212                                 chan->ack_win = min_t(u16, chan->ack_win,
3213                                                       rfc.txwin_size);
3214
3215                         if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3216                                 chan->local_msdu = le16_to_cpu(efs.msdu);
3217                                 chan->local_sdu_itime =
3218                                                 le32_to_cpu(efs.sdu_itime);
3219                                 chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3220                                 chan->local_flush_to =
3221                                                 le32_to_cpu(efs.flush_to);
3222                         }
3223                         break;
3224
3225                 case L2CAP_MODE_STREAMING:
3226                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3227                 }
3228         }
3229
3230         req->dcid   = cpu_to_le16(chan->dcid);
3231         req->flags  = __constant_cpu_to_le16(0);
3232
3233         return ptr - data;
3234 }
3235
3236 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
3237 {
3238         struct l2cap_conf_rsp *rsp = data;
3239         void *ptr = rsp->data;
3240
3241         BT_DBG("chan %p", chan);
3242
3243         rsp->scid   = cpu_to_le16(chan->dcid);
3244         rsp->result = cpu_to_le16(result);
3245         rsp->flags  = cpu_to_le16(flags);
3246
3247         return ptr - data;
3248 }
3249
3250 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
3251 {
3252         struct l2cap_conn_rsp rsp;
3253         struct l2cap_conn *conn = chan->conn;
3254         u8 buf[128];
3255
3256         rsp.scid   = cpu_to_le16(chan->dcid);
3257         rsp.dcid   = cpu_to_le16(chan->scid);
3258         rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS);
3259         rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3260         l2cap_send_cmd(conn, chan->ident,
3261                                 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
3262
3263         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3264                 return;
3265
3266         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3267                         l2cap_build_conf_req(chan, buf), buf);
3268         chan->num_conf_req++;
3269 }
3270
3271 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
3272 {
3273         int type, olen;
3274         unsigned long val;
3275         /* Use sane default values in case a misbehaving remote device
3276          * did not send an RFC or extended window size option.
3277          */
3278         u16 txwin_ext = chan->ack_win;
3279         struct l2cap_conf_rfc rfc = {
3280                 .mode = chan->mode,
3281                 .retrans_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
3282                 .monitor_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
3283                 .max_pdu_size = cpu_to_le16(chan->imtu),
3284                 .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
3285         };
3286
3287         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
3288
3289         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
3290                 return;
3291
3292         while (len >= L2CAP_CONF_OPT_SIZE) {
3293                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3294
3295                 switch (type) {
3296                 case L2CAP_CONF_RFC:
3297                         if (olen == sizeof(rfc))
3298                                 memcpy(&rfc, (void *)val, olen);
3299                         break;
3300                 case L2CAP_CONF_EWS:
3301                         txwin_ext = val;
3302                         break;
3303                 }
3304         }
3305
3306         switch (rfc.mode) {
3307         case L2CAP_MODE_ERTM:
3308                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3309                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3310                 chan->mps = le16_to_cpu(rfc.max_pdu_size);
3311                 if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3312                         chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
3313                 else
3314                         chan->ack_win = min_t(u16, chan->ack_win,
3315                                               rfc.txwin_size);
3316                 break;
3317         case L2CAP_MODE_STREAMING:
3318                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3319         }
3320 }
3321
3322 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3323 {
3324         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
3325
3326         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
3327                 return 0;
3328
3329         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
3330                                         cmd->ident == conn->info_ident) {
3331                 cancel_delayed_work(&conn->info_timer);
3332
3333                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3334                 conn->info_ident = 0;
3335
3336                 l2cap_conn_start(conn);
3337         }
3338
3339         return 0;
3340 }
3341
3342 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3343 {
3344         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
3345         struct l2cap_conn_rsp rsp;
3346         struct l2cap_chan *chan = NULL, *pchan;
3347         struct sock *parent, *sk = NULL;
3348         int result, status = L2CAP_CS_NO_INFO;
3349
3350         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
3351         __le16 psm = req->psm;
3352
3353         BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
3354
3355         /* Check if we have socket listening on psm */
3356         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src, conn->dst);
3357         if (!pchan) {
3358                 result = L2CAP_CR_BAD_PSM;
3359                 goto sendresp;
3360         }
3361
3362         parent = pchan->sk;
3363
3364         mutex_lock(&conn->chan_lock);
3365         lock_sock(parent);
3366
3367         /* Check if the ACL is secure enough (if not SDP) */
3368         if (psm != __constant_cpu_to_le16(L2CAP_PSM_SDP) &&
3369                                 !hci_conn_check_link_mode(conn->hcon)) {
3370                 conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
3371                 result = L2CAP_CR_SEC_BLOCK;
3372                 goto response;
3373         }
3374
3375         result = L2CAP_CR_NO_MEM;
3376
3377         /* Check if we already have channel with that dcid */
3378         if (__l2cap_get_chan_by_dcid(conn, scid))
3379                 goto response;
3380
3381         chan = pchan->ops->new_connection(pchan);
3382         if (!chan)
3383                 goto response;
3384
3385         sk = chan->sk;
3386
3387         hci_conn_hold(conn->hcon);
3388
3389         bacpy(&bt_sk(sk)->src, conn->src);
3390         bacpy(&bt_sk(sk)->dst, conn->dst);
3391         chan->psm  = psm;
3392         chan->dcid = scid;
3393
3394         bt_accept_enqueue(parent, sk);
3395
3396         __l2cap_chan_add(conn, chan);
3397
3398         dcid = chan->scid;
3399
3400         __set_chan_timer(chan, sk->sk_sndtimeo);
3401
3402         chan->ident = cmd->ident;
3403
3404         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
3405                 if (l2cap_chan_check_security(chan)) {
3406                         if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
3407                                 __l2cap_state_change(chan, BT_CONNECT2);
3408                                 result = L2CAP_CR_PEND;
3409                                 status = L2CAP_CS_AUTHOR_PEND;
3410                                 parent->sk_data_ready(parent, 0);
3411                         } else {
3412                                 __l2cap_state_change(chan, BT_CONFIG);
3413                                 result = L2CAP_CR_SUCCESS;
3414                                 status = L2CAP_CS_NO_INFO;
3415                         }
3416                 } else {
3417                         __l2cap_state_change(chan, BT_CONNECT2);
3418                         result = L2CAP_CR_PEND;
3419                         status = L2CAP_CS_AUTHEN_PEND;
3420                 }
3421         } else {
3422                 __l2cap_state_change(chan, BT_CONNECT2);
3423                 result = L2CAP_CR_PEND;
3424                 status = L2CAP_CS_NO_INFO;
3425         }
3426
3427 response:
3428         release_sock(parent);
3429         mutex_unlock(&conn->chan_lock);
3430
3431 sendresp:
3432         rsp.scid   = cpu_to_le16(scid);
3433         rsp.dcid   = cpu_to_le16(dcid);
3434         rsp.result = cpu_to_le16(result);
3435         rsp.status = cpu_to_le16(status);
3436         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
3437
3438         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
3439                 struct l2cap_info_req info;
3440                 info.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
3441
3442                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
3443                 conn->info_ident = l2cap_get_ident(conn);
3444
3445                 schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3446
3447                 l2cap_send_cmd(conn, conn->info_ident,
3448                                         L2CAP_INFO_REQ, sizeof(info), &info);
3449         }
3450
3451         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3452                                 result == L2CAP_CR_SUCCESS) {
3453                 u8 buf[128];
3454                 set_bit(CONF_REQ_SENT, &chan->conf_state);
3455                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3456                                         l2cap_build_conf_req(chan, buf), buf);
3457                 chan->num_conf_req++;
3458         }
3459
3460         return 0;
3461 }
3462
3463 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3464 {
3465         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
3466         u16 scid, dcid, result, status;
3467         struct l2cap_chan *chan;
3468         u8 req[128];
3469         int err;
3470
3471         scid   = __le16_to_cpu(rsp->scid);
3472         dcid   = __le16_to_cpu(rsp->dcid);
3473         result = __le16_to_cpu(rsp->result);
3474         status = __le16_to_cpu(rsp->status);
3475
3476         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3477                                                 dcid, scid, result, status);
3478
3479         mutex_lock(&conn->chan_lock);
3480
3481         if (scid) {
3482                 chan = __l2cap_get_chan_by_scid(conn, scid);
3483                 if (!chan) {
3484                         err = -EFAULT;
3485                         goto unlock;
3486                 }
3487         } else {
3488                 chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
3489                 if (!chan) {
3490                         err = -EFAULT;
3491                         goto unlock;
3492                 }
3493         }
3494
3495         err = 0;
3496
3497         l2cap_chan_lock(chan);
3498
3499         switch (result) {
3500         case L2CAP_CR_SUCCESS:
3501                 l2cap_state_change(chan, BT_CONFIG);
3502                 chan->ident = 0;
3503                 chan->dcid = dcid;
3504                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
3505
3506                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3507                         break;
3508
3509                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3510                                         l2cap_build_conf_req(chan, req), req);
3511                 chan->num_conf_req++;
3512                 break;
3513
3514         case L2CAP_CR_PEND:
3515                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
3516                 break;
3517
3518         default:
3519                 l2cap_chan_del(chan, ECONNREFUSED);
3520                 break;
3521         }
3522
3523         l2cap_chan_unlock(chan);
3524
3525 unlock:
3526         mutex_unlock(&conn->chan_lock);
3527
3528         return err;
3529 }
3530
3531 static inline void set_default_fcs(struct l2cap_chan *chan)
3532 {
3533         /* FCS is enabled only in ERTM or streaming mode, if one or both
3534          * sides request it.
3535          */
3536         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
3537                 chan->fcs = L2CAP_FCS_NONE;
3538         else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
3539                 chan->fcs = L2CAP_FCS_CRC16;
3540 }
3541
3542 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3543 {
3544         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
3545         u16 dcid, flags;
3546         u8 rsp[64];
3547         struct l2cap_chan *chan;
3548         int len, err = 0;
3549
3550         dcid  = __le16_to_cpu(req->dcid);
3551         flags = __le16_to_cpu(req->flags);
3552
3553         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
3554
3555         chan = l2cap_get_chan_by_scid(conn, dcid);
3556         if (!chan)
3557                 return -ENOENT;
3558
3559         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
3560                 struct l2cap_cmd_rej_cid rej;
3561
3562                 rej.reason = __constant_cpu_to_le16(L2CAP_REJ_INVALID_CID);
3563                 rej.scid = cpu_to_le16(chan->scid);
3564                 rej.dcid = cpu_to_le16(chan->dcid);
3565
3566                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
3567                                 sizeof(rej), &rej);
3568                 goto unlock;
3569         }
3570
3571         /* Reject if config buffer is too small. */
3572         len = cmd_len - sizeof(*req);
3573         if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
3574                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3575                                 l2cap_build_conf_rsp(chan, rsp,
3576                                         L2CAP_CONF_REJECT, flags), rsp);
3577                 goto unlock;
3578         }
3579
3580         /* Store config. */
3581         memcpy(chan->conf_req + chan->conf_len, req->data, len);
3582         chan->conf_len += len;
3583
3584         if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
3585                 /* Incomplete config. Send empty response. */
3586                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3587                                 l2cap_build_conf_rsp(chan, rsp,
3588                                         L2CAP_CONF_SUCCESS, flags), rsp);
3589                 goto unlock;
3590         }
3591
3592         /* Complete config. */
3593         len = l2cap_parse_conf_req(chan, rsp);
3594         if (len < 0) {
3595                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3596                 goto unlock;
3597         }
3598
3599         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
3600         chan->num_conf_rsp++;
3601
3602         /* Reset config buffer. */
3603         chan->conf_len = 0;
3604
3605         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
3606                 goto unlock;
3607
3608         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
3609                 set_default_fcs(chan);
3610
3611                 if (chan->mode == L2CAP_MODE_ERTM ||
3612                     chan->mode == L2CAP_MODE_STREAMING)
3613                         err = l2cap_ertm_init(chan);
3614
3615                 if (err < 0)
3616                         l2cap_send_disconn_req(chan->conn, chan, -err);
3617                 else
3618                         l2cap_chan_ready(chan);
3619
3620                 goto unlock;
3621         }
3622
3623         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
3624                 u8 buf[64];
3625                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3626                                         l2cap_build_conf_req(chan, buf), buf);
3627                 chan->num_conf_req++;
3628         }
3629
3630         /* Got Conf Rsp PENDING from remote side and asume we sent
3631            Conf Rsp PENDING in the code above */
3632         if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
3633                         test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
3634
3635                 /* check compatibility */
3636
3637                 clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3638                 set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3639
3640                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3641                                         l2cap_build_conf_rsp(chan, rsp,
3642                                         L2CAP_CONF_SUCCESS, flags), rsp);
3643         }
3644
3645 unlock:
3646         l2cap_chan_unlock(chan);
3647         return err;
3648 }
3649
3650 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3651 {
3652         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
3653         u16 scid, flags, result;
3654         struct l2cap_chan *chan;
3655         int len = le16_to_cpu(cmd->len) - sizeof(*rsp);
3656         int err = 0;
3657
3658         scid   = __le16_to_cpu(rsp->scid);
3659         flags  = __le16_to_cpu(rsp->flags);
3660         result = __le16_to_cpu(rsp->result);
3661
3662         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
3663                result, len);
3664
3665         chan = l2cap_get_chan_by_scid(conn, scid);
3666         if (!chan)
3667                 return 0;
3668
3669         switch (result) {
3670         case L2CAP_CONF_SUCCESS:
3671                 l2cap_conf_rfc_get(chan, rsp->data, len);
3672                 clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
3673                 break;
3674
3675         case L2CAP_CONF_PENDING:
3676                 set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
3677
3678                 if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
3679                         char buf[64];
3680
3681                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3682                                                                 buf, &result);
3683                         if (len < 0) {
3684                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3685                                 goto done;
3686                         }
3687
3688                         /* check compatibility */
3689
3690                         clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3691                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3692
3693                         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3694                                                 l2cap_build_conf_rsp(chan, buf,
3695                                                 L2CAP_CONF_SUCCESS, 0x0000), buf);
3696                 }
3697                 goto done;
3698
3699         case L2CAP_CONF_UNACCEPT:
3700                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
3701                         char req[64];
3702
3703                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3704                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3705                                 goto done;
3706                         }
3707
3708                         /* throw out any old stored conf requests */
3709                         result = L2CAP_CONF_SUCCESS;
3710                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
3711                                                                 req, &result);
3712                         if (len < 0) {
3713                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3714                                 goto done;
3715                         }
3716
3717                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
3718                                                 L2CAP_CONF_REQ, len, req);
3719                         chan->num_conf_req++;
3720                         if (result != L2CAP_CONF_SUCCESS)
3721                                 goto done;
3722                         break;
3723                 }
3724
3725         default:
3726                 l2cap_chan_set_err(chan, ECONNRESET);
3727
3728                 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
3729                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
3730                 goto done;
3731         }
3732
3733         if (flags & L2CAP_CONF_FLAG_CONTINUATION)
3734                 goto done;
3735
3736         set_bit(CONF_INPUT_DONE, &chan->conf_state);
3737
3738         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
3739                 set_default_fcs(chan);
3740
3741                 if (chan->mode == L2CAP_MODE_ERTM ||
3742                     chan->mode == L2CAP_MODE_STREAMING)
3743                         err = l2cap_ertm_init(chan);
3744
3745                 if (err < 0)
3746                         l2cap_send_disconn_req(chan->conn, chan, -err);
3747                 else
3748                         l2cap_chan_ready(chan);
3749         }
3750
3751 done:
3752         l2cap_chan_unlock(chan);
3753         return err;
3754 }
3755
3756 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3757 {
3758         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
3759         struct l2cap_disconn_rsp rsp;
3760         u16 dcid, scid;
3761         struct l2cap_chan *chan;
3762         struct sock *sk;
3763
3764         scid = __le16_to_cpu(req->scid);
3765         dcid = __le16_to_cpu(req->dcid);
3766
3767         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
3768
3769         mutex_lock(&conn->chan_lock);
3770
3771         chan = __l2cap_get_chan_by_scid(conn, dcid);
3772         if (!chan) {
3773                 mutex_unlock(&conn->chan_lock);
3774                 return 0;
3775         }
3776
3777         l2cap_chan_lock(chan);
3778
3779         sk = chan->sk;
3780
3781         rsp.dcid = cpu_to_le16(chan->scid);
3782         rsp.scid = cpu_to_le16(chan->dcid);
3783         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
3784
3785         lock_sock(sk);
3786         sk->sk_shutdown = SHUTDOWN_MASK;
3787         release_sock(sk);
3788
3789         l2cap_chan_hold(chan);
3790         l2cap_chan_del(chan, ECONNRESET);
3791
3792         l2cap_chan_unlock(chan);
3793
3794         chan->ops->close(chan);
3795         l2cap_chan_put(chan);
3796
3797         mutex_unlock(&conn->chan_lock);
3798
3799         return 0;
3800 }
3801
3802 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3803 {
3804         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
3805         u16 dcid, scid;
3806         struct l2cap_chan *chan;
3807
3808         scid = __le16_to_cpu(rsp->scid);
3809         dcid = __le16_to_cpu(rsp->dcid);
3810
3811         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
3812
3813         mutex_lock(&conn->chan_lock);
3814
3815         chan = __l2cap_get_chan_by_scid(conn, scid);
3816         if (!chan) {
3817                 mutex_unlock(&conn->chan_lock);
3818                 return 0;
3819         }
3820
3821         l2cap_chan_lock(chan);
3822
3823         l2cap_chan_hold(chan);
3824         l2cap_chan_del(chan, 0);
3825
3826         l2cap_chan_unlock(chan);
3827
3828         chan->ops->close(chan);
3829         l2cap_chan_put(chan);
3830
3831         mutex_unlock(&conn->chan_lock);
3832
3833         return 0;
3834 }
3835
3836 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3837 {
3838         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
3839         u16 type;
3840
3841         type = __le16_to_cpu(req->type);
3842
3843         BT_DBG("type 0x%4.4x", type);
3844
3845         if (type == L2CAP_IT_FEAT_MASK) {
3846                 u8 buf[8];
3847                 u32 feat_mask = l2cap_feat_mask;
3848                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3849                 rsp->type   = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
3850                 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS);
3851                 if (!disable_ertm)
3852                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
3853                                                          | L2CAP_FEAT_FCS;
3854                 if (enable_hs)
3855                         feat_mask |= L2CAP_FEAT_EXT_FLOW
3856                                                 | L2CAP_FEAT_EXT_WINDOW;
3857
3858                 put_unaligned_le32(feat_mask, rsp->data);
3859                 l2cap_send_cmd(conn, cmd->ident,
3860                                         L2CAP_INFO_RSP, sizeof(buf), buf);
3861         } else if (type == L2CAP_IT_FIXED_CHAN) {
3862                 u8 buf[12];
3863                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3864
3865                 if (enable_hs)
3866                         l2cap_fixed_chan[0] |= L2CAP_FC_A2MP;
3867                 else
3868                         l2cap_fixed_chan[0] &= ~L2CAP_FC_A2MP;
3869
3870                 rsp->type   = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN);
3871                 rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS);
3872                 memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3873                 l2cap_send_cmd(conn, cmd->ident,
3874                                         L2CAP_INFO_RSP, sizeof(buf), buf);
3875         } else {
3876                 struct l2cap_info_rsp rsp;
3877                 rsp.type   = cpu_to_le16(type);
3878                 rsp.result = __constant_cpu_to_le16(L2CAP_IR_NOTSUPP);
3879                 l2cap_send_cmd(conn, cmd->ident,
3880                                         L2CAP_INFO_RSP, sizeof(rsp), &rsp);
3881         }
3882
3883         return 0;
3884 }
3885
3886 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
3887 {
3888         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
3889         u16 type, result;
3890
3891         type   = __le16_to_cpu(rsp->type);
3892         result = __le16_to_cpu(rsp->result);
3893
3894         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
3895
3896         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
3897         if (cmd->ident != conn->info_ident ||
3898                         conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
3899                 return 0;
3900
3901         cancel_delayed_work(&conn->info_timer);
3902
3903         if (result != L2CAP_IR_SUCCESS) {
3904                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3905                 conn->info_ident = 0;
3906
3907                 l2cap_conn_start(conn);
3908
3909                 return 0;
3910         }
3911
3912         switch (type) {
3913         case L2CAP_IT_FEAT_MASK:
3914                 conn->feat_mask = get_unaligned_le32(rsp->data);
3915
3916                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3917                         struct l2cap_info_req req;
3918                         req.type = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN);
3919
3920                         conn->info_ident = l2cap_get_ident(conn);
3921
3922                         l2cap_send_cmd(conn, conn->info_ident,
3923                                         L2CAP_INFO_REQ, sizeof(req), &req);
3924                 } else {
3925                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3926                         conn->info_ident = 0;
3927
3928                         l2cap_conn_start(conn);
3929                 }
3930                 break;
3931
3932         case L2CAP_IT_FIXED_CHAN:
3933                 conn->fixed_chan_mask = rsp->data[0];
3934                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3935                 conn->info_ident = 0;
3936
3937                 l2cap_conn_start(conn);
3938                 break;
3939         }
3940
3941         return 0;
3942 }
3943
3944 static inline int l2cap_create_channel_req(struct l2cap_conn *conn,
3945                                         struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3946                                         void *data)
3947 {
3948         struct l2cap_create_chan_req *req = data;
3949         struct l2cap_create_chan_rsp rsp;
3950         u16 psm, scid;
3951
3952         if (cmd_len != sizeof(*req))
3953                 return -EPROTO;
3954
3955         if (!enable_hs)
3956                 return -EINVAL;
3957
3958         psm = le16_to_cpu(req->psm);
3959         scid = le16_to_cpu(req->scid);
3960
3961         BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
3962
3963         /* Placeholder: Always reject */
3964         rsp.dcid = 0;
3965         rsp.scid = cpu_to_le16(scid);
3966         rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
3967         rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3968
3969         l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
3970                        sizeof(rsp), &rsp);
3971
3972         return 0;
3973 }
3974
3975 static inline int l2cap_create_channel_rsp(struct l2cap_conn *conn,
3976                                         struct l2cap_cmd_hdr *cmd, void *data)
3977 {
3978         BT_DBG("conn %p", conn);
3979
3980         return l2cap_connect_rsp(conn, cmd, data);
3981 }
3982
3983 static void l2cap_send_move_chan_rsp(struct l2cap_conn *conn, u8 ident,
3984                                      u16 icid, u16 result)
3985 {
3986         struct l2cap_move_chan_rsp rsp;
3987
3988         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
3989
3990         rsp.icid = cpu_to_le16(icid);
3991         rsp.result = cpu_to_le16(result);
3992
3993         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_RSP, sizeof(rsp), &rsp);
3994 }
3995
3996 static void l2cap_send_move_chan_cfm(struct l2cap_conn *conn,
3997                                      struct l2cap_chan *chan,
3998                                      u16 icid, u16 result)
3999 {
4000         struct l2cap_move_chan_cfm cfm;
4001         u8 ident;
4002
4003         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
4004
4005         ident = l2cap_get_ident(conn);
4006         if (chan)
4007                 chan->ident = ident;
4008
4009         cfm.icid = cpu_to_le16(icid);
4010         cfm.result = cpu_to_le16(result);
4011
4012         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM, sizeof(cfm), &cfm);
4013 }
4014
4015 static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4016                                          u16 icid)
4017 {
4018         struct l2cap_move_chan_cfm_rsp rsp;
4019
4020         BT_DBG("icid 0x%4.4x", icid);
4021
4022         rsp.icid = cpu_to_le16(icid);
4023         l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4024 }
4025
4026 static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
4027                                          struct l2cap_cmd_hdr *cmd,
4028                                          u16 cmd_len, void *data)
4029 {
4030         struct l2cap_move_chan_req *req = data;
4031         u16 icid = 0;
4032         u16 result = L2CAP_MR_NOT_ALLOWED;
4033
4034         if (cmd_len != sizeof(*req))
4035                 return -EPROTO;
4036
4037         icid = le16_to_cpu(req->icid);
4038
4039         BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
4040
4041         if (!enable_hs)
4042                 return -EINVAL;
4043
4044         /* Placeholder: Always refuse */
4045         l2cap_send_move_chan_rsp(conn, cmd->ident, icid, result);
4046
4047         return 0;
4048 }
4049
4050 static inline int l2cap_move_channel_rsp(struct l2cap_conn *conn,
4051                                          struct l2cap_cmd_hdr *cmd,
4052                                          u16 cmd_len, void *data)
4053 {
4054         struct l2cap_move_chan_rsp *rsp = data;
4055         u16 icid, result;
4056
4057         if (cmd_len != sizeof(*rsp))
4058                 return -EPROTO;
4059
4060         icid = le16_to_cpu(rsp->icid);
4061         result = le16_to_cpu(rsp->result);
4062
4063         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
4064
4065         /* Placeholder: Always unconfirmed */
4066         l2cap_send_move_chan_cfm(conn, NULL, icid, L2CAP_MC_UNCONFIRMED);
4067
4068         return 0;
4069 }
4070
4071 static inline int l2cap_move_channel_confirm(struct l2cap_conn *conn,
4072                                              struct l2cap_cmd_hdr *cmd,
4073                                              u16 cmd_len, void *data)
4074 {
4075         struct l2cap_move_chan_cfm *cfm = data;
4076         u16 icid, result;
4077
4078         if (cmd_len != sizeof(*cfm))
4079                 return -EPROTO;
4080
4081         icid = le16_to_cpu(cfm->icid);
4082         result = le16_to_cpu(cfm->result);
4083
4084         BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
4085
4086         l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
4087
4088         return 0;
4089 }
4090
4091 static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
4092                                                  struct l2cap_cmd_hdr *cmd,
4093                                                  u16 cmd_len, void *data)
4094 {
4095         struct l2cap_move_chan_cfm_rsp *rsp = data;
4096         u16 icid;
4097
4098         if (cmd_len != sizeof(*rsp))
4099                 return -EPROTO;
4100
4101         icid = le16_to_cpu(rsp->icid);
4102
4103         BT_DBG("icid 0x%4.4x", icid);
4104
4105         return 0;
4106 }
4107
4108 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
4109                                                         u16 to_multiplier)
4110 {
4111         u16 max_latency;
4112
4113         if (min > max || min < 6 || max > 3200)
4114                 return -EINVAL;
4115
4116         if (to_multiplier < 10 || to_multiplier > 3200)
4117                 return -EINVAL;
4118
4119         if (max >= to_multiplier * 8)
4120                 return -EINVAL;
4121
4122         max_latency = (to_multiplier * 8 / max) - 1;
4123         if (latency > 499 || latency > max_latency)
4124                 return -EINVAL;
4125
4126         return 0;
4127 }
4128
4129 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
4130                                         struct l2cap_cmd_hdr *cmd, u8 *data)
4131 {
4132         struct hci_conn *hcon = conn->hcon;
4133         struct l2cap_conn_param_update_req *req;
4134         struct l2cap_conn_param_update_rsp rsp;
4135         u16 min, max, latency, to_multiplier, cmd_len;
4136         int err;
4137
4138         if (!(hcon->link_mode & HCI_LM_MASTER))
4139                 return -EINVAL;
4140
4141         cmd_len = __le16_to_cpu(cmd->len);
4142         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
4143                 return -EPROTO;
4144
4145         req = (struct l2cap_conn_param_update_req *) data;
4146         min             = __le16_to_cpu(req->min);
4147         max             = __le16_to_cpu(req->max);
4148         latency         = __le16_to_cpu(req->latency);
4149         to_multiplier   = __le16_to_cpu(req->to_multiplier);
4150
4151         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
4152                                                 min, max, latency, to_multiplier);
4153
4154         memset(&rsp, 0, sizeof(rsp));
4155
4156         err = l2cap_check_conn_param(min, max, latency, to_multiplier);
4157         if (err)
4158                 rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
4159         else
4160                 rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
4161
4162         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
4163                                                         sizeof(rsp), &rsp);
4164
4165         if (!err)
4166                 hci_le_conn_update(hcon, min, max, latency, to_multiplier);
4167
4168         return 0;
4169 }
4170
4171 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
4172                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
4173 {
4174         int err = 0;
4175
4176         switch (cmd->code) {
4177         case L2CAP_COMMAND_REJ:
4178                 l2cap_command_rej(conn, cmd, data);
4179                 break;
4180
4181         case L2CAP_CONN_REQ:
4182                 err = l2cap_connect_req(conn, cmd, data);
4183                 break;
4184
4185         case L2CAP_CONN_RSP:
4186                 err = l2cap_connect_rsp(conn, cmd, data);
4187                 break;
4188
4189         case L2CAP_CONF_REQ:
4190                 err = l2cap_config_req(conn, cmd, cmd_len, data);
4191                 break;
4192
4193         case L2CAP_CONF_RSP:
4194                 err = l2cap_config_rsp(conn, cmd, data);
4195                 break;
4196
4197         case L2CAP_DISCONN_REQ:
4198                 err = l2cap_disconnect_req(conn, cmd, data);
4199                 break;
4200
4201         case L2CAP_DISCONN_RSP:
4202                 err = l2cap_disconnect_rsp(conn, cmd, data);
4203                 break;
4204
4205         case L2CAP_ECHO_REQ:
4206                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
4207                 break;
4208
4209         case L2CAP_ECHO_RSP:
4210                 break;
4211
4212         case L2CAP_INFO_REQ:
4213                 err = l2cap_information_req(conn, cmd, data);
4214                 break;
4215
4216         case L2CAP_INFO_RSP:
4217                 err = l2cap_information_rsp(conn, cmd, data);
4218                 break;
4219
4220         case L2CAP_CREATE_CHAN_REQ:
4221                 err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
4222                 break;
4223
4224         case L2CAP_CREATE_CHAN_RSP:
4225                 err = l2cap_create_channel_rsp(conn, cmd, data);
4226                 break;
4227
4228         case L2CAP_MOVE_CHAN_REQ:
4229                 err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
4230                 break;
4231
4232         case L2CAP_MOVE_CHAN_RSP:
4233                 err = l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
4234                 break;
4235
4236         case L2CAP_MOVE_CHAN_CFM:
4237                 err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
4238                 break;
4239
4240         case L2CAP_MOVE_CHAN_CFM_RSP:
4241                 err = l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
4242                 break;
4243
4244         default:
4245                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
4246                 err = -EINVAL;
4247                 break;
4248         }
4249
4250         return err;
4251 }
4252
4253 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
4254                                         struct l2cap_cmd_hdr *cmd, u8 *data)
4255 {
4256         switch (cmd->code) {
4257         case L2CAP_COMMAND_REJ:
4258                 return 0;
4259
4260         case L2CAP_CONN_PARAM_UPDATE_REQ:
4261                 return l2cap_conn_param_update_req(conn, cmd, data);
4262
4263         case L2CAP_CONN_PARAM_UPDATE_RSP:
4264                 return 0;
4265
4266         default:
4267                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
4268                 return -EINVAL;
4269         }
4270 }
4271
4272 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
4273                                                         struct sk_buff *skb)
4274 {
4275         u8 *data = skb->data;
4276         int len = skb->len;
4277         struct l2cap_cmd_hdr cmd;
4278         int err;
4279
4280         l2cap_raw_recv(conn, skb);
4281
4282         while (len >= L2CAP_CMD_HDR_SIZE) {
4283                 u16 cmd_len;
4284                 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
4285                 data += L2CAP_CMD_HDR_SIZE;
4286                 len  -= L2CAP_CMD_HDR_SIZE;
4287
4288                 cmd_len = le16_to_cpu(cmd.len);
4289
4290                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
4291
4292                 if (cmd_len > len || !cmd.ident) {
4293                         BT_DBG("corrupted command");
4294                         break;
4295                 }
4296
4297                 if (conn->hcon->type == LE_LINK)
4298                         err = l2cap_le_sig_cmd(conn, &cmd, data);
4299                 else
4300                         err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
4301
4302                 if (err) {
4303                         struct l2cap_cmd_rej_unk rej;
4304
4305                         BT_ERR("Wrong link type (%d)", err);
4306
4307                         /* FIXME: Map err to a valid reason */
4308                         rej.reason = __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
4309                         l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
4310                 }
4311
4312                 data += cmd_len;
4313                 len  -= cmd_len;
4314         }
4315
4316         kfree_skb(skb);
4317 }
4318
4319 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
4320 {
4321         u16 our_fcs, rcv_fcs;
4322         int hdr_size;
4323
4324         if (test_bit(FLAG_EXT_CTRL, &chan->flags))
4325                 hdr_size = L2CAP_EXT_HDR_SIZE;
4326         else
4327                 hdr_size = L2CAP_ENH_HDR_SIZE;
4328
4329         if (chan->fcs == L2CAP_FCS_CRC16) {
4330                 skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
4331                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
4332                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
4333
4334                 if (our_fcs != rcv_fcs)
4335                         return -EBADMSG;
4336         }
4337         return 0;
4338 }
4339
4340 static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
4341 {
4342         struct l2cap_ctrl control;
4343
4344         BT_DBG("chan %p", chan);
4345
4346         memset(&control, 0, sizeof(control));
4347         control.sframe = 1;
4348         control.final = 1;
4349         control.reqseq = chan->buffer_seq;
4350         set_bit(CONN_SEND_FBIT, &chan->conn_state);
4351
4352         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4353                 control.super = L2CAP_SUPER_RNR;
4354                 l2cap_send_sframe(chan, &control);
4355         }
4356
4357         if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4358             chan->unacked_frames > 0)
4359                 __set_retrans_timer(chan);
4360
4361         /* Send pending iframes */
4362         l2cap_ertm_send(chan);
4363
4364         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
4365             test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
4366                 /* F-bit wasn't sent in an s-frame or i-frame yet, so
4367                  * send it now.
4368                  */
4369                 control.super = L2CAP_SUPER_RR;
4370                 l2cap_send_sframe(chan, &control);
4371         }
4372 }
4373
4374 static void append_skb_frag(struct sk_buff *skb,
4375                         struct sk_buff *new_frag, struct sk_buff **last_frag)
4376 {
4377         /* skb->len reflects data in skb as well as all fragments
4378          * skb->data_len reflects only data in fragments
4379          */
4380         if (!skb_has_frag_list(skb))
4381                 skb_shinfo(skb)->frag_list = new_frag;
4382
4383         new_frag->next = NULL;
4384
4385         (*last_frag)->next = new_frag;
4386         *last_frag = new_frag;
4387
4388         skb->len += new_frag->len;
4389         skb->data_len += new_frag->len;
4390         skb->truesize += new_frag->truesize;
4391 }
4392
4393 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
4394                                 struct l2cap_ctrl *control)
4395 {
4396         int err = -EINVAL;
4397
4398         switch (control->sar) {
4399         case L2CAP_SAR_UNSEGMENTED:
4400                 if (chan->sdu)
4401                         break;
4402
4403                 err = chan->ops->recv(chan, skb);
4404                 break;
4405
4406         case L2CAP_SAR_START:
4407                 if (chan->sdu)
4408                         break;
4409
4410                 chan->sdu_len = get_unaligned_le16(skb->data);
4411                 skb_pull(skb, L2CAP_SDULEN_SIZE);
4412
4413                 if (chan->sdu_len > chan->imtu) {
4414                         err = -EMSGSIZE;
4415                         break;
4416                 }
4417
4418                 if (skb->len >= chan->sdu_len)
4419                         break;
4420
4421                 chan->sdu = skb;
4422                 chan->sdu_last_frag = skb;
4423
4424                 skb = NULL;
4425                 err = 0;
4426                 break;
4427
4428         case L2CAP_SAR_CONTINUE:
4429                 if (!chan->sdu)
4430                         break;
4431
4432                 append_skb_frag(chan->sdu, skb,
4433                                 &chan->sdu_last_frag);
4434                 skb = NULL;
4435
4436                 if (chan->sdu->len >= chan->sdu_len)
4437                         break;
4438
4439                 err = 0;
4440                 break;
4441
4442         case L2CAP_SAR_END:
4443                 if (!chan->sdu)
4444                         break;
4445
4446                 append_skb_frag(chan->sdu, skb,
4447                                 &chan->sdu_last_frag);
4448                 skb = NULL;
4449
4450                 if (chan->sdu->len != chan->sdu_len)
4451                         break;
4452
4453                 err = chan->ops->recv(chan, chan->sdu);
4454
4455                 if (!err) {
4456                         /* Reassembly complete */
4457                         chan->sdu = NULL;
4458                         chan->sdu_last_frag = NULL;
4459                         chan->sdu_len = 0;
4460                 }
4461                 break;
4462         }
4463
4464         if (err) {
4465                 kfree_skb(skb);
4466                 kfree_skb(chan->sdu);
4467                 chan->sdu = NULL;
4468                 chan->sdu_last_frag = NULL;
4469                 chan->sdu_len = 0;
4470         }
4471
4472         return err;
4473 }
4474
4475 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
4476 {
4477         u8 event;
4478
4479         if (chan->mode != L2CAP_MODE_ERTM)
4480                 return;
4481
4482         event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
4483         l2cap_tx(chan, NULL, NULL, event);
4484 }
4485
4486 static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
4487 {
4488         int err = 0;
4489         /* Pass sequential frames to l2cap_reassemble_sdu()
4490          * until a gap is encountered.
4491          */
4492
4493         BT_DBG("chan %p", chan);
4494
4495         while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4496                 struct sk_buff *skb;
4497                 BT_DBG("Searching for skb with txseq %d (queue len %d)",
4498                        chan->buffer_seq, skb_queue_len(&chan->srej_q));
4499
4500                 skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
4501
4502                 if (!skb)
4503                         break;
4504
4505                 skb_unlink(skb, &chan->srej_q);
4506                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
4507                 err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->control);
4508                 if (err)
4509                         break;
4510         }
4511
4512         if (skb_queue_empty(&chan->srej_q)) {
4513                 chan->rx_state = L2CAP_RX_STATE_RECV;
4514                 l2cap_send_ack(chan);
4515         }
4516
4517         return err;
4518 }
4519
4520 static void l2cap_handle_srej(struct l2cap_chan *chan,
4521                               struct l2cap_ctrl *control)
4522 {
4523         struct sk_buff *skb;
4524
4525         BT_DBG("chan %p, control %p", chan, control);
4526
4527         if (control->reqseq == chan->next_tx_seq) {
4528                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
4529                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4530                 return;
4531         }
4532
4533         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
4534
4535         if (skb == NULL) {
4536                 BT_DBG("Seq %d not available for retransmission",
4537                        control->reqseq);
4538                 return;
4539         }
4540
4541         if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) {
4542                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
4543                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4544                 return;
4545         }
4546
4547         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4548
4549         if (control->poll) {
4550                 l2cap_pass_to_tx(chan, control);
4551
4552                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
4553                 l2cap_retransmit(chan, control);
4554                 l2cap_ertm_send(chan);
4555
4556                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
4557                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
4558                         chan->srej_save_reqseq = control->reqseq;
4559                 }
4560         } else {
4561                 l2cap_pass_to_tx_fbit(chan, control);
4562
4563                 if (control->final) {
4564                         if (chan->srej_save_reqseq != control->reqseq ||
4565                             !test_and_clear_bit(CONN_SREJ_ACT,
4566                                                 &chan->conn_state))
4567                                 l2cap_retransmit(chan, control);
4568                 } else {
4569                         l2cap_retransmit(chan, control);
4570                         if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
4571                                 set_bit(CONN_SREJ_ACT, &chan->conn_state);
4572                                 chan->srej_save_reqseq = control->reqseq;
4573                         }
4574                 }
4575         }
4576 }
4577
4578 static void l2cap_handle_rej(struct l2cap_chan *chan,
4579                              struct l2cap_ctrl *control)
4580 {
4581         struct sk_buff *skb;
4582
4583         BT_DBG("chan %p, control %p", chan, control);
4584
4585         if (control->reqseq == chan->next_tx_seq) {
4586                 BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
4587                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4588                 return;
4589         }
4590
4591         skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
4592
4593         if (chan->max_tx && skb &&
4594             bt_cb(skb)->control.retries >= chan->max_tx) {
4595                 BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
4596                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4597                 return;
4598         }
4599
4600         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4601
4602         l2cap_pass_to_tx(chan, control);
4603
4604         if (control->final) {
4605                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4606                         l2cap_retransmit_all(chan, control);
4607         } else {
4608                 l2cap_retransmit_all(chan, control);
4609                 l2cap_ertm_send(chan);
4610                 if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
4611                         set_bit(CONN_REJ_ACT, &chan->conn_state);
4612         }
4613 }
4614
4615 static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
4616 {
4617         BT_DBG("chan %p, txseq %d", chan, txseq);
4618
4619         BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
4620                chan->expected_tx_seq);
4621
4622         if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
4623                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
4624                                                                 chan->tx_win) {
4625                         /* See notes below regarding "double poll" and
4626                          * invalid packets.
4627                          */
4628                         if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
4629                                 BT_DBG("Invalid/Ignore - after SREJ");
4630                                 return L2CAP_TXSEQ_INVALID_IGNORE;
4631                         } else {
4632                                 BT_DBG("Invalid - in window after SREJ sent");
4633                                 return L2CAP_TXSEQ_INVALID;
4634                         }
4635                 }
4636
4637                 if (chan->srej_list.head == txseq) {
4638                         BT_DBG("Expected SREJ");
4639                         return L2CAP_TXSEQ_EXPECTED_SREJ;
4640                 }
4641
4642                 if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
4643                         BT_DBG("Duplicate SREJ - txseq already stored");
4644                         return L2CAP_TXSEQ_DUPLICATE_SREJ;
4645                 }
4646
4647                 if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
4648                         BT_DBG("Unexpected SREJ - not requested");
4649                         return L2CAP_TXSEQ_UNEXPECTED_SREJ;
4650                 }
4651         }
4652
4653         if (chan->expected_tx_seq == txseq) {
4654                 if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
4655                     chan->tx_win) {
4656                         BT_DBG("Invalid - txseq outside tx window");
4657                         return L2CAP_TXSEQ_INVALID;
4658                 } else {
4659                         BT_DBG("Expected");
4660                         return L2CAP_TXSEQ_EXPECTED;
4661                 }
4662         }
4663
4664         if (__seq_offset(chan, txseq, chan->last_acked_seq) <
4665                 __seq_offset(chan, chan->expected_tx_seq,
4666                              chan->last_acked_seq)){
4667                 BT_DBG("Duplicate - expected_tx_seq later than txseq");
4668                 return L2CAP_TXSEQ_DUPLICATE;
4669         }
4670
4671         if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
4672                 /* A source of invalid packets is a "double poll" condition,
4673                  * where delays cause us to send multiple poll packets.  If
4674                  * the remote stack receives and processes both polls,
4675                  * sequence numbers can wrap around in such a way that a
4676                  * resent frame has a sequence number that looks like new data
4677                  * with a sequence gap.  This would trigger an erroneous SREJ
4678                  * request.
4679                  *
4680                  * Fortunately, this is impossible with a tx window that's
4681                  * less than half of the maximum sequence number, which allows
4682                  * invalid frames to be safely ignored.
4683                  *
4684                  * With tx window sizes greater than half of the tx window
4685                  * maximum, the frame is invalid and cannot be ignored.  This
4686                  * causes a disconnect.
4687                  */
4688
4689                 if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
4690                         BT_DBG("Invalid/Ignore - txseq outside tx window");
4691                         return L2CAP_TXSEQ_INVALID_IGNORE;
4692                 } else {
4693                         BT_DBG("Invalid - txseq outside tx window");
4694                         return L2CAP_TXSEQ_INVALID;
4695                 }
4696         } else {
4697                 BT_DBG("Unexpected - txseq indicates missing frames");
4698                 return L2CAP_TXSEQ_UNEXPECTED;
4699         }
4700 }
4701
4702 static int l2cap_rx_state_recv(struct l2cap_chan *chan,
4703                                struct l2cap_ctrl *control,
4704                                struct sk_buff *skb, u8 event)
4705 {
4706         int err = 0;
4707         bool skb_in_use = 0;
4708
4709         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
4710                event);
4711
4712         switch (event) {
4713         case L2CAP_EV_RECV_IFRAME:
4714                 switch (l2cap_classify_txseq(chan, control->txseq)) {
4715                 case L2CAP_TXSEQ_EXPECTED:
4716                         l2cap_pass_to_tx(chan, control);
4717
4718                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4719                                 BT_DBG("Busy, discarding expected seq %d",
4720                                        control->txseq);
4721                                 break;
4722                         }
4723
4724                         chan->expected_tx_seq = __next_seq(chan,
4725                                                            control->txseq);
4726
4727                         chan->buffer_seq = chan->expected_tx_seq;
4728                         skb_in_use = 1;
4729
4730                         err = l2cap_reassemble_sdu(chan, skb, control);
4731                         if (err)
4732                                 break;
4733
4734                         if (control->final) {
4735                                 if (!test_and_clear_bit(CONN_REJ_ACT,
4736                                                         &chan->conn_state)) {
4737                                         control->final = 0;
4738                                         l2cap_retransmit_all(chan, control);
4739                                         l2cap_ertm_send(chan);
4740                                 }
4741                         }
4742
4743                         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
4744                                 l2cap_send_ack(chan);
4745                         break;
4746                 case L2CAP_TXSEQ_UNEXPECTED:
4747                         l2cap_pass_to_tx(chan, control);
4748
4749                         /* Can't issue SREJ frames in the local busy state.
4750                          * Drop this frame, it will be seen as missing
4751                          * when local busy is exited.
4752                          */
4753                         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4754                                 BT_DBG("Busy, discarding unexpected seq %d",
4755                                        control->txseq);
4756                                 break;
4757                         }
4758
4759                         /* There was a gap in the sequence, so an SREJ
4760                          * must be sent for each missing frame.  The
4761                          * current frame is stored for later use.
4762                          */
4763                         skb_queue_tail(&chan->srej_q, skb);
4764                         skb_in_use = 1;
4765                         BT_DBG("Queued %p (queue len %d)", skb,
4766                                skb_queue_len(&chan->srej_q));
4767
4768                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4769                         l2cap_seq_list_clear(&chan->srej_list);
4770                         l2cap_send_srej(chan, control->txseq);
4771
4772                         chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
4773                         break;
4774                 case L2CAP_TXSEQ_DUPLICATE:
4775                         l2cap_pass_to_tx(chan, control);
4776                         break;
4777                 case L2CAP_TXSEQ_INVALID_IGNORE:
4778                         break;
4779                 case L2CAP_TXSEQ_INVALID:
4780                 default:
4781                         l2cap_send_disconn_req(chan->conn, chan,
4782                                                ECONNRESET);
4783                         break;
4784                 }
4785                 break;
4786         case L2CAP_EV_RECV_RR:
4787                 l2cap_pass_to_tx(chan, control);
4788                 if (control->final) {
4789                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4790
4791                         if (!test_and_clear_bit(CONN_REJ_ACT,
4792                                                 &chan->conn_state)) {
4793                                 control->final = 0;
4794                                 l2cap_retransmit_all(chan, control);
4795                         }
4796
4797                         l2cap_ertm_send(chan);
4798                 } else if (control->poll) {
4799                         l2cap_send_i_or_rr_or_rnr(chan);
4800                 } else {
4801                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
4802                                                &chan->conn_state) &&
4803                             chan->unacked_frames)
4804                                 __set_retrans_timer(chan);
4805
4806                         l2cap_ertm_send(chan);
4807                 }
4808                 break;
4809         case L2CAP_EV_RECV_RNR:
4810                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4811                 l2cap_pass_to_tx(chan, control);
4812                 if (control && control->poll) {
4813                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
4814                         l2cap_send_rr_or_rnr(chan, 0);
4815                 }
4816                 __clear_retrans_timer(chan);
4817                 l2cap_seq_list_clear(&chan->retrans_list);
4818                 break;
4819         case L2CAP_EV_RECV_REJ:
4820                 l2cap_handle_rej(chan, control);
4821                 break;
4822         case L2CAP_EV_RECV_SREJ:
4823                 l2cap_handle_srej(chan, control);
4824                 break;
4825         default:
4826                 break;
4827         }
4828
4829         if (skb && !skb_in_use) {
4830                 BT_DBG("Freeing %p", skb);
4831                 kfree_skb(skb);
4832         }
4833
4834         return err;
4835 }
4836
4837 static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
4838                                     struct l2cap_ctrl *control,
4839                                     struct sk_buff *skb, u8 event)
4840 {
4841         int err = 0;
4842         u16 txseq = control->txseq;
4843         bool skb_in_use = 0;
4844
4845         BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
4846                event);
4847
4848         switch (event) {
4849         case L2CAP_EV_RECV_IFRAME:
4850                 switch (l2cap_classify_txseq(chan, txseq)) {
4851                 case L2CAP_TXSEQ_EXPECTED:
4852                         /* Keep frame for reassembly later */
4853                         l2cap_pass_to_tx(chan, control);
4854                         skb_queue_tail(&chan->srej_q, skb);
4855                         skb_in_use = 1;
4856                         BT_DBG("Queued %p (queue len %d)", skb,
4857                                skb_queue_len(&chan->srej_q));
4858
4859                         chan->expected_tx_seq = __next_seq(chan, txseq);
4860                         break;
4861                 case L2CAP_TXSEQ_EXPECTED_SREJ:
4862                         l2cap_seq_list_pop(&chan->srej_list);
4863
4864                         l2cap_pass_to_tx(chan, control);
4865                         skb_queue_tail(&chan->srej_q, skb);
4866                         skb_in_use = 1;
4867                         BT_DBG("Queued %p (queue len %d)", skb,
4868                                skb_queue_len(&chan->srej_q));
4869
4870                         err = l2cap_rx_queued_iframes(chan);
4871                         if (err)
4872                                 break;
4873
4874                         break;
4875                 case L2CAP_TXSEQ_UNEXPECTED:
4876                         /* Got a frame that can't be reassembled yet.
4877                          * Save it for later, and send SREJs to cover
4878                          * the missing frames.
4879                          */
4880                         skb_queue_tail(&chan->srej_q, skb);
4881                         skb_in_use = 1;
4882                         BT_DBG("Queued %p (queue len %d)", skb,
4883                                skb_queue_len(&chan->srej_q));
4884
4885                         l2cap_pass_to_tx(chan, control);
4886                         l2cap_send_srej(chan, control->txseq);
4887                         break;
4888                 case L2CAP_TXSEQ_UNEXPECTED_SREJ:
4889                         /* This frame was requested with an SREJ, but
4890                          * some expected retransmitted frames are
4891                          * missing.  Request retransmission of missing
4892                          * SREJ'd frames.
4893                          */
4894                         skb_queue_tail(&chan->srej_q, skb);
4895                         skb_in_use = 1;
4896                         BT_DBG("Queued %p (queue len %d)", skb,
4897                                skb_queue_len(&chan->srej_q));
4898
4899                         l2cap_pass_to_tx(chan, control);
4900                         l2cap_send_srej_list(chan, control->txseq);
4901                         break;
4902                 case L2CAP_TXSEQ_DUPLICATE_SREJ:
4903                         /* We've already queued this frame.  Drop this copy. */
4904                         l2cap_pass_to_tx(chan, control);
4905                         break;
4906                 case L2CAP_TXSEQ_DUPLICATE:
4907                         /* Expecting a later sequence number, so this frame
4908                          * was already received.  Ignore it completely.
4909                          */
4910                         break;
4911                 case L2CAP_TXSEQ_INVALID_IGNORE:
4912                         break;
4913                 case L2CAP_TXSEQ_INVALID:
4914                 default:
4915                         l2cap_send_disconn_req(chan->conn, chan,
4916                                                ECONNRESET);
4917                         break;
4918                 }
4919                 break;
4920         case L2CAP_EV_RECV_RR:
4921                 l2cap_pass_to_tx(chan, control);
4922                 if (control->final) {
4923                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4924
4925                         if (!test_and_clear_bit(CONN_REJ_ACT,
4926                                                 &chan->conn_state)) {
4927                                 control->final = 0;
4928                                 l2cap_retransmit_all(chan, control);
4929                         }
4930
4931                         l2cap_ertm_send(chan);
4932                 } else if (control->poll) {
4933                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
4934                                                &chan->conn_state) &&
4935                             chan->unacked_frames) {
4936                                 __set_retrans_timer(chan);
4937                         }
4938
4939                         set_bit(CONN_SEND_FBIT, &chan->conn_state);
4940                         l2cap_send_srej_tail(chan);
4941                 } else {
4942                         if (test_and_clear_bit(CONN_REMOTE_BUSY,
4943                                                &chan->conn_state) &&
4944                             chan->unacked_frames)
4945                                 __set_retrans_timer(chan);
4946
4947                         l2cap_send_ack(chan);
4948                 }
4949                 break;
4950         case L2CAP_EV_RECV_RNR:
4951                 set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4952                 l2cap_pass_to_tx(chan, control);
4953                 if (control->poll) {
4954                         l2cap_send_srej_tail(chan);
4955                 } else {
4956                         struct l2cap_ctrl rr_control;
4957                         memset(&rr_control, 0, sizeof(rr_control));
4958                         rr_control.sframe = 1;
4959                         rr_control.super = L2CAP_SUPER_RR;
4960                         rr_control.reqseq = chan->buffer_seq;
4961                         l2cap_send_sframe(chan, &rr_control);
4962                 }
4963
4964                 break;
4965         case L2CAP_EV_RECV_REJ:
4966                 l2cap_handle_rej(chan, control);
4967                 break;
4968         case L2CAP_EV_RECV_SREJ:
4969                 l2cap_handle_srej(chan, control);
4970                 break;
4971         }
4972
4973         if (skb && !skb_in_use) {
4974                 BT_DBG("Freeing %p", skb);
4975                 kfree_skb(skb);
4976         }
4977
4978         return err;
4979 }
4980
4981 static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
4982 {
4983         /* Make sure reqseq is for a packet that has been sent but not acked */
4984         u16 unacked;
4985
4986         unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
4987         return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
4988 }
4989
4990 static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
4991                     struct sk_buff *skb, u8 event)
4992 {
4993         int err = 0;
4994
4995         BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
4996                control, skb, event, chan->rx_state);
4997
4998         if (__valid_reqseq(chan, control->reqseq)) {
4999                 switch (chan->rx_state) {
5000                 case L2CAP_RX_STATE_RECV:
5001                         err = l2cap_rx_state_recv(chan, control, skb, event);
5002                         break;
5003                 case L2CAP_RX_STATE_SREJ_SENT:
5004                         err = l2cap_rx_state_srej_sent(chan, control, skb,
5005                                                        event);
5006                         break;
5007                 default:
5008                         /* shut it down */
5009                         break;
5010                 }
5011         } else {
5012                 BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
5013                        control->reqseq, chan->next_tx_seq,
5014                        chan->expected_ack_seq);
5015                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
5016         }
5017
5018         return err;
5019 }
5020
5021 static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
5022                            struct sk_buff *skb)
5023 {
5024         int err = 0;
5025
5026         BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
5027                chan->rx_state);
5028
5029         if (l2cap_classify_txseq(chan, control->txseq) ==
5030             L2CAP_TXSEQ_EXPECTED) {
5031                 l2cap_pass_to_tx(chan, control);
5032
5033                 BT_DBG("buffer_seq %d->%d", chan->buffer_seq,
5034                        __next_seq(chan, chan->buffer_seq));
5035
5036                 chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
5037
5038                 l2cap_reassemble_sdu(chan, skb, control);
5039         } else {
5040                 if (chan->sdu) {
5041                         kfree_skb(chan->sdu);
5042                         chan->sdu = NULL;
5043                 }
5044                 chan->sdu_last_frag = NULL;
5045                 chan->sdu_len = 0;
5046
5047                 if (skb) {
5048                         BT_DBG("Freeing %p", skb);
5049                         kfree_skb(skb);
5050                 }
5051         }
5052
5053         chan->last_acked_seq = control->txseq;
5054         chan->expected_tx_seq = __next_seq(chan, control->txseq);
5055
5056         return err;
5057 }
5058
5059 static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
5060 {
5061         struct l2cap_ctrl *control = &bt_cb(skb)->control;
5062         u16 len;
5063         u8 event;
5064
5065         __unpack_control(chan, skb);
5066
5067         len = skb->len;
5068
5069         /*
5070          * We can just drop the corrupted I-frame here.
5071          * Receiver will miss it and start proper recovery
5072          * procedures and ask for retransmission.
5073          */
5074         if (l2cap_check_fcs(chan, skb))
5075                 goto drop;
5076
5077         if (!control->sframe && control->sar == L2CAP_SAR_START)
5078                 len -= L2CAP_SDULEN_SIZE;
5079
5080         if (chan->fcs == L2CAP_FCS_CRC16)
5081                 len -= L2CAP_FCS_SIZE;
5082
5083         if (len > chan->mps) {
5084                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
5085                 goto drop;
5086         }
5087
5088         if (!control->sframe) {
5089                 int err;
5090
5091                 BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
5092                        control->sar, control->reqseq, control->final,
5093                        control->txseq);
5094
5095                 /* Validate F-bit - F=0 always valid, F=1 only
5096                  * valid in TX WAIT_F
5097                  */
5098                 if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
5099                         goto drop;
5100
5101                 if (chan->mode != L2CAP_MODE_STREAMING) {
5102                         event = L2CAP_EV_RECV_IFRAME;
5103                         err = l2cap_rx(chan, control, skb, event);
5104                 } else {
5105                         err = l2cap_stream_rx(chan, control, skb);
5106                 }
5107
5108                 if (err)
5109                         l2cap_send_disconn_req(chan->conn, chan,
5110                                                ECONNRESET);
5111         } else {
5112                 const u8 rx_func_to_event[4] = {
5113                         L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
5114                         L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
5115                 };
5116
5117                 /* Only I-frames are expected in streaming mode */
5118                 if (chan->mode == L2CAP_MODE_STREAMING)
5119                         goto drop;
5120
5121                 BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
5122                        control->reqseq, control->final, control->poll,
5123                        control->super);
5124
5125                 if (len != 0) {
5126                         BT_ERR("%d", len);
5127                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
5128                         goto drop;
5129                 }
5130
5131                 /* Validate F and P bits */
5132                 if (control->final && (control->poll ||
5133                                        chan->tx_state != L2CAP_TX_STATE_WAIT_F))
5134                         goto drop;
5135
5136                 event = rx_func_to_event[control->super];
5137                 if (l2cap_rx(chan, control, skb, event))
5138                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
5139         }
5140
5141         return 0;
5142
5143 drop:
5144         kfree_skb(skb);
5145         return 0;
5146 }
5147
5148 static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
5149                                struct sk_buff *skb)
5150 {
5151         struct l2cap_chan *chan;
5152
5153         chan = l2cap_get_chan_by_scid(conn, cid);
5154         if (!chan) {
5155                 if (cid == L2CAP_CID_A2MP) {
5156                         chan = a2mp_channel_create(conn, skb);
5157                         if (!chan) {
5158                                 kfree_skb(skb);
5159                                 return;
5160                         }
5161
5162                         l2cap_chan_lock(chan);
5163                 } else {
5164                         BT_DBG("unknown cid 0x%4.4x", cid);
5165                         /* Drop packet and return */
5166                         kfree_skb(skb);
5167                         return;
5168                 }
5169         }
5170
5171         BT_DBG("chan %p, len %d", chan, skb->len);
5172
5173         if (chan->state != BT_CONNECTED)
5174                 goto drop;
5175
5176         switch (chan->mode) {
5177         case L2CAP_MODE_BASIC:
5178                 /* If socket recv buffers overflows we drop data here
5179                  * which is *bad* because L2CAP has to be reliable.
5180                  * But we don't have any other choice. L2CAP doesn't
5181                  * provide flow control mechanism. */
5182
5183                 if (chan->imtu < skb->len)
5184                         goto drop;
5185
5186                 if (!chan->ops->recv(chan, skb))
5187                         goto done;
5188                 break;
5189
5190         case L2CAP_MODE_ERTM:
5191         case L2CAP_MODE_STREAMING:
5192                 l2cap_data_rcv(chan, skb);
5193                 goto done;
5194
5195         default:
5196                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
5197                 break;
5198         }
5199
5200 drop:
5201         kfree_skb(skb);
5202
5203 done:
5204         l2cap_chan_unlock(chan);
5205 }
5206
5207 static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
5208                                   struct sk_buff *skb)
5209 {
5210         struct l2cap_chan *chan;
5211
5212         chan = l2cap_global_chan_by_psm(0, psm, conn->src, conn->dst);
5213         if (!chan)
5214                 goto drop;
5215
5216         BT_DBG("chan %p, len %d", chan, skb->len);
5217
5218         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
5219                 goto drop;
5220
5221         if (chan->imtu < skb->len)
5222                 goto drop;
5223
5224         if (!chan->ops->recv(chan, skb))
5225                 return;
5226
5227 drop:
5228         kfree_skb(skb);
5229 }
5230
5231 static void l2cap_att_channel(struct l2cap_conn *conn, u16 cid,
5232                               struct sk_buff *skb)
5233 {
5234         struct l2cap_chan *chan;
5235
5236         chan = l2cap_global_chan_by_scid(0, cid, conn->src, conn->dst);
5237         if (!chan)
5238                 goto drop;
5239
5240         BT_DBG("chan %p, len %d", chan, skb->len);
5241
5242         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
5243                 goto drop;
5244
5245         if (chan->imtu < skb->len)
5246                 goto drop;
5247
5248         if (!chan->ops->recv(chan, skb))
5249                 return;
5250
5251 drop:
5252         kfree_skb(skb);
5253 }
5254
5255 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
5256 {
5257         struct l2cap_hdr *lh = (void *) skb->data;
5258         u16 cid, len;
5259         __le16 psm;
5260
5261         skb_pull(skb, L2CAP_HDR_SIZE);
5262         cid = __le16_to_cpu(lh->cid);
5263         len = __le16_to_cpu(lh->len);
5264
5265         if (len != skb->len) {
5266                 kfree_skb(skb);
5267                 return;
5268         }
5269
5270         BT_DBG("len %d, cid 0x%4.4x", len, cid);
5271
5272         switch (cid) {
5273         case L2CAP_CID_LE_SIGNALING:
5274         case L2CAP_CID_SIGNALING:
5275                 l2cap_sig_channel(conn, skb);
5276                 break;
5277
5278         case L2CAP_CID_CONN_LESS:
5279                 psm = get_unaligned((__le16 *) skb->data);
5280                 skb_pull(skb, L2CAP_PSMLEN_SIZE);
5281                 l2cap_conless_channel(conn, psm, skb);
5282                 break;
5283
5284         case L2CAP_CID_LE_DATA:
5285                 l2cap_att_channel(conn, cid, skb);
5286                 break;
5287
5288         case L2CAP_CID_SMP:
5289                 if (smp_sig_channel(conn, skb))
5290                         l2cap_conn_del(conn->hcon, EACCES);
5291                 break;
5292
5293         default:
5294                 l2cap_data_channel(conn, cid, skb);
5295                 break;
5296         }
5297 }
5298
5299 /* ---- L2CAP interface with lower layer (HCI) ---- */
5300
5301 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
5302 {
5303         int exact = 0, lm1 = 0, lm2 = 0;
5304         struct l2cap_chan *c;
5305
5306         BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
5307
5308         /* Find listening sockets and check their link_mode */
5309         read_lock(&chan_list_lock);
5310         list_for_each_entry(c, &chan_list, global_l) {
5311                 struct sock *sk = c->sk;
5312
5313                 if (c->state != BT_LISTEN)
5314                         continue;
5315
5316                 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
5317                         lm1 |= HCI_LM_ACCEPT;
5318                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
5319                                 lm1 |= HCI_LM_MASTER;
5320                         exact++;
5321                 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
5322                         lm2 |= HCI_LM_ACCEPT;
5323                         if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
5324                                 lm2 |= HCI_LM_MASTER;
5325                 }
5326         }
5327         read_unlock(&chan_list_lock);
5328
5329         return exact ? lm1 : lm2;
5330 }
5331
5332 int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
5333 {
5334         struct l2cap_conn *conn;
5335
5336         BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
5337
5338         if (!status) {
5339                 conn = l2cap_conn_add(hcon, status);
5340                 if (conn)
5341                         l2cap_conn_ready(conn);
5342         } else
5343                 l2cap_conn_del(hcon, bt_to_errno(status));
5344
5345         return 0;
5346 }
5347
5348 int l2cap_disconn_ind(struct hci_conn *hcon)
5349 {
5350         struct l2cap_conn *conn = hcon->l2cap_data;
5351
5352         BT_DBG("hcon %p", hcon);
5353
5354         if (!conn)
5355                 return HCI_ERROR_REMOTE_USER_TERM;
5356         return conn->disc_reason;
5357 }
5358
5359 int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
5360 {
5361         BT_DBG("hcon %p reason %d", hcon, reason);
5362
5363         l2cap_conn_del(hcon, bt_to_errno(reason));
5364         return 0;
5365 }
5366
5367 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
5368 {
5369         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
5370                 return;
5371
5372         if (encrypt == 0x00) {
5373                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
5374                         __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
5375                 } else if (chan->sec_level == BT_SECURITY_HIGH)
5376                         l2cap_chan_close(chan, ECONNREFUSED);
5377         } else {
5378                 if (chan->sec_level == BT_SECURITY_MEDIUM)
5379                         __clear_chan_timer(chan);
5380         }
5381 }
5382
5383 int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
5384 {
5385         struct l2cap_conn *conn = hcon->l2cap_data;
5386         struct l2cap_chan *chan;
5387
5388         if (!conn)
5389                 return 0;
5390
5391         BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
5392
5393         if (hcon->type == LE_LINK) {
5394                 if (!status && encrypt)
5395                         smp_distribute_keys(conn, 0);
5396                 cancel_delayed_work(&conn->security_timer);
5397         }
5398
5399         mutex_lock(&conn->chan_lock);
5400
5401         list_for_each_entry(chan, &conn->chan_l, list) {
5402                 l2cap_chan_lock(chan);
5403
5404                 BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
5405                        state_to_string(chan->state));
5406
5407                 if (chan->scid == L2CAP_CID_LE_DATA) {
5408                         if (!status && encrypt) {
5409                                 chan->sec_level = hcon->sec_level;
5410                                 l2cap_chan_ready(chan);
5411                         }
5412
5413                         l2cap_chan_unlock(chan);
5414                         continue;
5415                 }
5416
5417                 if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
5418                         l2cap_chan_unlock(chan);
5419                         continue;
5420                 }
5421
5422                 if (!status && (chan->state == BT_CONNECTED ||
5423                                                 chan->state == BT_CONFIG)) {
5424                         struct sock *sk = chan->sk;
5425
5426                         clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
5427                         sk->sk_state_change(sk);
5428
5429                         l2cap_check_encryption(chan, encrypt);
5430                         l2cap_chan_unlock(chan);
5431                         continue;
5432                 }
5433
5434                 if (chan->state == BT_CONNECT) {
5435                         if (!status) {
5436                                 l2cap_send_conn_req(chan);
5437                         } else {
5438                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
5439                         }
5440                 } else if (chan->state == BT_CONNECT2) {
5441                         struct sock *sk = chan->sk;
5442                         struct l2cap_conn_rsp rsp;
5443                         __u16 res, stat;
5444
5445                         lock_sock(sk);
5446
5447                         if (!status) {
5448                                 if (test_bit(BT_SK_DEFER_SETUP,
5449                                              &bt_sk(sk)->flags)) {
5450                                         struct sock *parent = bt_sk(sk)->parent;
5451                                         res = L2CAP_CR_PEND;
5452                                         stat = L2CAP_CS_AUTHOR_PEND;
5453                                         if (parent)
5454                                                 parent->sk_data_ready(parent, 0);
5455                                 } else {
5456                                         __l2cap_state_change(chan, BT_CONFIG);
5457                                         res = L2CAP_CR_SUCCESS;
5458                                         stat = L2CAP_CS_NO_INFO;
5459                                 }
5460                         } else {
5461                                 __l2cap_state_change(chan, BT_DISCONN);
5462                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
5463                                 res = L2CAP_CR_SEC_BLOCK;
5464                                 stat = L2CAP_CS_NO_INFO;
5465                         }
5466
5467                         release_sock(sk);
5468
5469                         rsp.scid   = cpu_to_le16(chan->dcid);
5470                         rsp.dcid   = cpu_to_le16(chan->scid);
5471                         rsp.result = cpu_to_le16(res);
5472                         rsp.status = cpu_to_le16(stat);
5473                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
5474                                                         sizeof(rsp), &rsp);
5475
5476                         if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
5477                             res == L2CAP_CR_SUCCESS) {
5478                                 char buf[128];
5479                                 set_bit(CONF_REQ_SENT, &chan->conf_state);
5480                                 l2cap_send_cmd(conn, l2cap_get_ident(conn),
5481                                                L2CAP_CONF_REQ,
5482                                                l2cap_build_conf_req(chan, buf),
5483                                                buf);
5484                                 chan->num_conf_req++;
5485                         }
5486                 }
5487
5488                 l2cap_chan_unlock(chan);
5489         }
5490
5491         mutex_unlock(&conn->chan_lock);
5492
5493         return 0;
5494 }
5495
5496 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
5497 {
5498         struct l2cap_conn *conn = hcon->l2cap_data;
5499
5500         if (!conn)
5501                 conn = l2cap_conn_add(hcon, 0);
5502
5503         if (!conn)
5504                 goto drop;
5505
5506         BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
5507
5508         if (!(flags & ACL_CONT)) {
5509                 struct l2cap_hdr *hdr;
5510                 int len;
5511
5512                 if (conn->rx_len) {
5513                         BT_ERR("Unexpected start frame (len %d)", skb->len);
5514                         kfree_skb(conn->rx_skb);
5515                         conn->rx_skb = NULL;
5516                         conn->rx_len = 0;
5517                         l2cap_conn_unreliable(conn, ECOMM);
5518                 }
5519
5520                 /* Start fragment always begin with Basic L2CAP header */
5521                 if (skb->len < L2CAP_HDR_SIZE) {
5522                         BT_ERR("Frame is too short (len %d)", skb->len);
5523                         l2cap_conn_unreliable(conn, ECOMM);
5524                         goto drop;
5525                 }
5526
5527                 hdr = (struct l2cap_hdr *) skb->data;
5528                 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
5529
5530                 if (len == skb->len) {
5531                         /* Complete frame received */
5532                         l2cap_recv_frame(conn, skb);
5533                         return 0;
5534                 }
5535
5536                 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
5537
5538                 if (skb->len > len) {
5539                         BT_ERR("Frame is too long (len %d, expected len %d)",
5540                                 skb->len, len);
5541                         l2cap_conn_unreliable(conn, ECOMM);
5542                         goto drop;
5543                 }
5544
5545                 /* Allocate skb for the complete frame (with header) */
5546                 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
5547                 if (!conn->rx_skb)
5548                         goto drop;
5549
5550                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5551                                                                 skb->len);
5552                 conn->rx_len = len - skb->len;
5553         } else {
5554                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
5555
5556                 if (!conn->rx_len) {
5557                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
5558                         l2cap_conn_unreliable(conn, ECOMM);
5559                         goto drop;
5560                 }
5561
5562                 if (skb->len > conn->rx_len) {
5563                         BT_ERR("Fragment is too long (len %d, expected %d)",
5564                                         skb->len, conn->rx_len);
5565                         kfree_skb(conn->rx_skb);
5566                         conn->rx_skb = NULL;
5567                         conn->rx_len = 0;
5568                         l2cap_conn_unreliable(conn, ECOMM);
5569                         goto drop;
5570                 }
5571
5572                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5573                                                                 skb->len);
5574                 conn->rx_len -= skb->len;
5575
5576                 if (!conn->rx_len) {
5577                         /* Complete frame received */
5578                         l2cap_recv_frame(conn, conn->rx_skb);
5579                         conn->rx_skb = NULL;
5580                 }
5581         }
5582
5583 drop:
5584         kfree_skb(skb);
5585         return 0;
5586 }
5587
5588 static int l2cap_debugfs_show(struct seq_file *f, void *p)
5589 {
5590         struct l2cap_chan *c;
5591
5592         read_lock(&chan_list_lock);
5593
5594         list_for_each_entry(c, &chan_list, global_l) {
5595                 struct sock *sk = c->sk;
5596
5597                 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
5598                                         batostr(&bt_sk(sk)->src),
5599                                         batostr(&bt_sk(sk)->dst),
5600                                         c->state, __le16_to_cpu(c->psm),
5601                                         c->scid, c->dcid, c->imtu, c->omtu,
5602                                         c->sec_level, c->mode);
5603         }
5604
5605         read_unlock(&chan_list_lock);
5606
5607         return 0;
5608 }
5609
5610 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
5611 {
5612         return single_open(file, l2cap_debugfs_show, inode->i_private);
5613 }
5614
5615 static const struct file_operations l2cap_debugfs_fops = {
5616         .open           = l2cap_debugfs_open,
5617         .read           = seq_read,
5618         .llseek         = seq_lseek,
5619         .release        = single_release,
5620 };
5621
5622 static struct dentry *l2cap_debugfs;
5623
5624 int __init l2cap_init(void)
5625 {
5626         int err;
5627
5628         err = l2cap_init_sockets();
5629         if (err < 0)
5630                 return err;
5631
5632         if (bt_debugfs) {
5633                 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
5634                                         bt_debugfs, NULL, &l2cap_debugfs_fops);
5635                 if (!l2cap_debugfs)
5636                         BT_ERR("Failed to create L2CAP debug file");
5637         }
5638
5639         return 0;
5640 }
5641
5642 void l2cap_exit(void)
5643 {
5644         debugfs_remove(l2cap_debugfs);
5645         l2cap_cleanup_sockets();
5646 }
5647
5648 module_param(disable_ertm, bool, 0644);
5649 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");