Merge branch 'fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
[pandora-kernel.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
7    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8
9    This program is free software; you can redistribute it and/or modify
10    it under the terms of the GNU General Public License version 2 as
11    published by the Free Software Foundation;
12
13    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
14    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
16    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
18    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21
22    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
23    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
24    SOFTWARE IS DISCLAIMED.
25 */
26
27 /* Bluetooth L2CAP core. */
28
29 #include <linux/module.h>
30
31 #include <linux/types.h>
32 #include <linux/capability.h>
33 #include <linux/errno.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/fcntl.h>
39 #include <linux/init.h>
40 #include <linux/interrupt.h>
41 #include <linux/socket.h>
42 #include <linux/skbuff.h>
43 #include <linux/list.h>
44 #include <linux/device.h>
45 #include <linux/debugfs.h>
46 #include <linux/seq_file.h>
47 #include <linux/uaccess.h>
48 #include <linux/crc16.h>
49 #include <net/sock.h>
50
51 #include <asm/system.h>
52 #include <asm/unaligned.h>
53
54 #include <net/bluetooth/bluetooth.h>
55 #include <net/bluetooth/hci_core.h>
56 #include <net/bluetooth/l2cap.h>
57 #include <net/bluetooth/smp.h>
58
59 int disable_ertm;
60
61 static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
62 static u8 l2cap_fixed_chan[8] = { 0x02, };
63
64 static LIST_HEAD(chan_list);
65 static DEFINE_RWLOCK(chan_list_lock);
66
67 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
68                                 u8 code, u8 ident, u16 dlen, void *data);
69 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
70                                                                 void *data);
71 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
72 static void l2cap_send_disconn_req(struct l2cap_conn *conn,
73                                 struct l2cap_chan *chan, int err);
74
75 static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);
76
77 /* ---- L2CAP channels ---- */
78
79 static inline void chan_hold(struct l2cap_chan *c)
80 {
81         atomic_inc(&c->refcnt);
82 }
83
84 static inline void chan_put(struct l2cap_chan *c)
85 {
86         if (atomic_dec_and_test(&c->refcnt))
87                 kfree(c);
88 }
89
90 static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
91 {
92         struct l2cap_chan *c;
93
94         list_for_each_entry(c, &conn->chan_l, list) {
95                 if (c->dcid == cid)
96                         return c;
97         }
98         return NULL;
99
100 }
101
102 static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
103 {
104         struct l2cap_chan *c;
105
106         list_for_each_entry(c, &conn->chan_l, list) {
107                 if (c->scid == cid)
108                         return c;
109         }
110         return NULL;
111 }
112
113 /* Find channel with given SCID.
114  * Returns locked socket */
115 static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
116 {
117         struct l2cap_chan *c;
118
119         read_lock(&conn->chan_lock);
120         c = __l2cap_get_chan_by_scid(conn, cid);
121         if (c)
122                 bh_lock_sock(c->sk);
123         read_unlock(&conn->chan_lock);
124         return c;
125 }
126
127 static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
128 {
129         struct l2cap_chan *c;
130
131         list_for_each_entry(c, &conn->chan_l, list) {
132                 if (c->ident == ident)
133                         return c;
134         }
135         return NULL;
136 }
137
138 static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
139 {
140         struct l2cap_chan *c;
141
142         read_lock(&conn->chan_lock);
143         c = __l2cap_get_chan_by_ident(conn, ident);
144         if (c)
145                 bh_lock_sock(c->sk);
146         read_unlock(&conn->chan_lock);
147         return c;
148 }
149
150 static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
151 {
152         struct l2cap_chan *c;
153
154         list_for_each_entry(c, &chan_list, global_l) {
155                 if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
156                         goto found;
157         }
158
159         c = NULL;
160 found:
161         return c;
162 }
163
164 int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
165 {
166         int err;
167
168         write_lock_bh(&chan_list_lock);
169
170         if (psm && __l2cap_global_chan_by_addr(psm, src)) {
171                 err = -EADDRINUSE;
172                 goto done;
173         }
174
175         if (psm) {
176                 chan->psm = psm;
177                 chan->sport = psm;
178                 err = 0;
179         } else {
180                 u16 p;
181
182                 err = -EINVAL;
183                 for (p = 0x1001; p < 0x1100; p += 2)
184                         if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
185                                 chan->psm   = cpu_to_le16(p);
186                                 chan->sport = cpu_to_le16(p);
187                                 err = 0;
188                                 break;
189                         }
190         }
191
192 done:
193         write_unlock_bh(&chan_list_lock);
194         return err;
195 }
196
197 int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
198 {
199         write_lock_bh(&chan_list_lock);
200
201         chan->scid = scid;
202
203         write_unlock_bh(&chan_list_lock);
204
205         return 0;
206 }
207
208 static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
209 {
210         u16 cid = L2CAP_CID_DYN_START;
211
212         for (; cid < L2CAP_CID_DYN_END; cid++) {
213                 if (!__l2cap_get_chan_by_scid(conn, cid))
214                         return cid;
215         }
216
217         return 0;
218 }
219
220 static void l2cap_set_timer(struct l2cap_chan *chan, struct timer_list *timer, long timeout)
221 {
222         BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout);
223
224         if (!mod_timer(timer, jiffies + msecs_to_jiffies(timeout)))
225                 chan_hold(chan);
226 }
227
228 static void l2cap_clear_timer(struct l2cap_chan *chan, struct timer_list *timer)
229 {
230         BT_DBG("chan %p state %d", chan, chan->state);
231
232         if (timer_pending(timer) && del_timer(timer))
233                 chan_put(chan);
234 }
235
236 static void l2cap_state_change(struct l2cap_chan *chan, int state)
237 {
238         chan->state = state;
239         chan->ops->state_change(chan->data, state);
240 }
241
242 static void l2cap_chan_timeout(unsigned long arg)
243 {
244         struct l2cap_chan *chan = (struct l2cap_chan *) arg;
245         struct sock *sk = chan->sk;
246         int reason;
247
248         BT_DBG("chan %p state %d", chan, chan->state);
249
250         bh_lock_sock(sk);
251
252         if (sock_owned_by_user(sk)) {
253                 /* sk is owned by user. Try again later */
254                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
255                 bh_unlock_sock(sk);
256                 chan_put(chan);
257                 return;
258         }
259
260         if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
261                 reason = ECONNREFUSED;
262         else if (chan->state == BT_CONNECT &&
263                                         chan->sec_level != BT_SECURITY_SDP)
264                 reason = ECONNREFUSED;
265         else
266                 reason = ETIMEDOUT;
267
268         l2cap_chan_close(chan, reason);
269
270         bh_unlock_sock(sk);
271
272         chan->ops->close(chan->data);
273         chan_put(chan);
274 }
275
276 struct l2cap_chan *l2cap_chan_create(struct sock *sk)
277 {
278         struct l2cap_chan *chan;
279
280         chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
281         if (!chan)
282                 return NULL;
283
284         chan->sk = sk;
285
286         write_lock_bh(&chan_list_lock);
287         list_add(&chan->global_l, &chan_list);
288         write_unlock_bh(&chan_list_lock);
289
290         setup_timer(&chan->chan_timer, l2cap_chan_timeout, (unsigned long) chan);
291
292         chan->state = BT_OPEN;
293
294         atomic_set(&chan->refcnt, 1);
295
296         return chan;
297 }
298
299 void l2cap_chan_destroy(struct l2cap_chan *chan)
300 {
301         write_lock_bh(&chan_list_lock);
302         list_del(&chan->global_l);
303         write_unlock_bh(&chan_list_lock);
304
305         chan_put(chan);
306 }
307
308 static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
309 {
310         BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
311                         chan->psm, chan->dcid);
312
313         conn->disc_reason = 0x13;
314
315         chan->conn = conn;
316
317         if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
318                 if (conn->hcon->type == LE_LINK) {
319                         /* LE connection */
320                         chan->omtu = L2CAP_LE_DEFAULT_MTU;
321                         chan->scid = L2CAP_CID_LE_DATA;
322                         chan->dcid = L2CAP_CID_LE_DATA;
323                 } else {
324                         /* Alloc CID for connection-oriented socket */
325                         chan->scid = l2cap_alloc_cid(conn);
326                         chan->omtu = L2CAP_DEFAULT_MTU;
327                 }
328         } else if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
329                 /* Connectionless socket */
330                 chan->scid = L2CAP_CID_CONN_LESS;
331                 chan->dcid = L2CAP_CID_CONN_LESS;
332                 chan->omtu = L2CAP_DEFAULT_MTU;
333         } else {
334                 /* Raw socket can send/recv signalling messages only */
335                 chan->scid = L2CAP_CID_SIGNALING;
336                 chan->dcid = L2CAP_CID_SIGNALING;
337                 chan->omtu = L2CAP_DEFAULT_MTU;
338         }
339
340         chan_hold(chan);
341
342         list_add(&chan->list, &conn->chan_l);
343 }
344
345 /* Delete channel.
346  * Must be called on the locked socket. */
347 static void l2cap_chan_del(struct l2cap_chan *chan, int err)
348 {
349         struct sock *sk = chan->sk;
350         struct l2cap_conn *conn = chan->conn;
351         struct sock *parent = bt_sk(sk)->parent;
352
353         __clear_chan_timer(chan);
354
355         BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
356
357         if (conn) {
358                 /* Delete from channel list */
359                 write_lock_bh(&conn->chan_lock);
360                 list_del(&chan->list);
361                 write_unlock_bh(&conn->chan_lock);
362                 chan_put(chan);
363
364                 chan->conn = NULL;
365                 hci_conn_put(conn->hcon);
366         }
367
368         l2cap_state_change(chan, BT_CLOSED);
369         sock_set_flag(sk, SOCK_ZAPPED);
370
371         if (err)
372                 sk->sk_err = err;
373
374         if (parent) {
375                 bt_accept_unlink(sk);
376                 parent->sk_data_ready(parent, 0);
377         } else
378                 sk->sk_state_change(sk);
379
380         if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
381                         test_bit(CONF_INPUT_DONE, &chan->conf_state)))
382                 return;
383
384         skb_queue_purge(&chan->tx_q);
385
386         if (chan->mode == L2CAP_MODE_ERTM) {
387                 struct srej_list *l, *tmp;
388
389                 __clear_retrans_timer(chan);
390                 __clear_monitor_timer(chan);
391                 __clear_ack_timer(chan);
392
393                 skb_queue_purge(&chan->srej_q);
394
395                 list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
396                         list_del(&l->list);
397                         kfree(l);
398                 }
399         }
400 }
401
402 static void l2cap_chan_cleanup_listen(struct sock *parent)
403 {
404         struct sock *sk;
405
406         BT_DBG("parent %p", parent);
407
408         /* Close not yet accepted channels */
409         while ((sk = bt_accept_dequeue(parent, NULL))) {
410                 struct l2cap_chan *chan = l2cap_pi(sk)->chan;
411                 __clear_chan_timer(chan);
412                 lock_sock(sk);
413                 l2cap_chan_close(chan, ECONNRESET);
414                 release_sock(sk);
415                 chan->ops->close(chan->data);
416         }
417 }
418
419 void l2cap_chan_close(struct l2cap_chan *chan, int reason)
420 {
421         struct l2cap_conn *conn = chan->conn;
422         struct sock *sk = chan->sk;
423
424         BT_DBG("chan %p state %d socket %p", chan, chan->state, sk->sk_socket);
425
426         switch (chan->state) {
427         case BT_LISTEN:
428                 l2cap_chan_cleanup_listen(sk);
429
430                 l2cap_state_change(chan, BT_CLOSED);
431                 sock_set_flag(sk, SOCK_ZAPPED);
432                 break;
433
434         case BT_CONNECTED:
435         case BT_CONFIG:
436                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
437                                         conn->hcon->type == ACL_LINK) {
438                         __clear_chan_timer(chan);
439                         __set_chan_timer(chan, sk->sk_sndtimeo);
440                         l2cap_send_disconn_req(conn, chan, reason);
441                 } else
442                         l2cap_chan_del(chan, reason);
443                 break;
444
445         case BT_CONNECT2:
446                 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
447                                         conn->hcon->type == ACL_LINK) {
448                         struct l2cap_conn_rsp rsp;
449                         __u16 result;
450
451                         if (bt_sk(sk)->defer_setup)
452                                 result = L2CAP_CR_SEC_BLOCK;
453                         else
454                                 result = L2CAP_CR_BAD_PSM;
455                         l2cap_state_change(chan, BT_DISCONN);
456
457                         rsp.scid   = cpu_to_le16(chan->dcid);
458                         rsp.dcid   = cpu_to_le16(chan->scid);
459                         rsp.result = cpu_to_le16(result);
460                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
461                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
462                                                         sizeof(rsp), &rsp);
463                 }
464
465                 l2cap_chan_del(chan, reason);
466                 break;
467
468         case BT_CONNECT:
469         case BT_DISCONN:
470                 l2cap_chan_del(chan, reason);
471                 break;
472
473         default:
474                 sock_set_flag(sk, SOCK_ZAPPED);
475                 break;
476         }
477 }
478
479 static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
480 {
481         if (chan->chan_type == L2CAP_CHAN_RAW) {
482                 switch (chan->sec_level) {
483                 case BT_SECURITY_HIGH:
484                         return HCI_AT_DEDICATED_BONDING_MITM;
485                 case BT_SECURITY_MEDIUM:
486                         return HCI_AT_DEDICATED_BONDING;
487                 default:
488                         return HCI_AT_NO_BONDING;
489                 }
490         } else if (chan->psm == cpu_to_le16(0x0001)) {
491                 if (chan->sec_level == BT_SECURITY_LOW)
492                         chan->sec_level = BT_SECURITY_SDP;
493
494                 if (chan->sec_level == BT_SECURITY_HIGH)
495                         return HCI_AT_NO_BONDING_MITM;
496                 else
497                         return HCI_AT_NO_BONDING;
498         } else {
499                 switch (chan->sec_level) {
500                 case BT_SECURITY_HIGH:
501                         return HCI_AT_GENERAL_BONDING_MITM;
502                 case BT_SECURITY_MEDIUM:
503                         return HCI_AT_GENERAL_BONDING;
504                 default:
505                         return HCI_AT_NO_BONDING;
506                 }
507         }
508 }
509
510 /* Service level security */
511 static inline int l2cap_check_security(struct l2cap_chan *chan)
512 {
513         struct l2cap_conn *conn = chan->conn;
514         __u8 auth_type;
515
516         auth_type = l2cap_get_auth_type(chan);
517
518         return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
519 }
520
521 static u8 l2cap_get_ident(struct l2cap_conn *conn)
522 {
523         u8 id;
524
525         /* Get next available identificator.
526          *    1 - 128 are used by kernel.
527          *  129 - 199 are reserved.
528          *  200 - 254 are used by utilities like l2ping, etc.
529          */
530
531         spin_lock_bh(&conn->lock);
532
533         if (++conn->tx_ident > 128)
534                 conn->tx_ident = 1;
535
536         id = conn->tx_ident;
537
538         spin_unlock_bh(&conn->lock);
539
540         return id;
541 }
542
543 static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
544 {
545         struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
546         u8 flags;
547
548         BT_DBG("code 0x%2.2x", code);
549
550         if (!skb)
551                 return;
552
553         if (lmp_no_flush_capable(conn->hcon->hdev))
554                 flags = ACL_START_NO_FLUSH;
555         else
556                 flags = ACL_START;
557
558         bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
559
560         hci_send_acl(conn->hcon, skb, flags);
561 }
562
563 static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
564 {
565         struct sk_buff *skb;
566         struct l2cap_hdr *lh;
567         struct l2cap_conn *conn = chan->conn;
568         int count, hlen = L2CAP_HDR_SIZE + 2;
569         u8 flags;
570
571         if (chan->state != BT_CONNECTED)
572                 return;
573
574         if (chan->fcs == L2CAP_FCS_CRC16)
575                 hlen += 2;
576
577         BT_DBG("chan %p, control 0x%2.2x", chan, control);
578
579         count = min_t(unsigned int, conn->mtu, hlen);
580         control |= L2CAP_CTRL_FRAME_TYPE;
581
582         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
583                 control |= L2CAP_CTRL_FINAL;
584
585         if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
586                 control |= L2CAP_CTRL_POLL;
587
588         skb = bt_skb_alloc(count, GFP_ATOMIC);
589         if (!skb)
590                 return;
591
592         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
593         lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
594         lh->cid = cpu_to_le16(chan->dcid);
595         put_unaligned_le16(control, skb_put(skb, 2));
596
597         if (chan->fcs == L2CAP_FCS_CRC16) {
598                 u16 fcs = crc16(0, (u8 *)lh, count - 2);
599                 put_unaligned_le16(fcs, skb_put(skb, 2));
600         }
601
602         if (lmp_no_flush_capable(conn->hcon->hdev))
603                 flags = ACL_START_NO_FLUSH;
604         else
605                 flags = ACL_START;
606
607         bt_cb(skb)->force_active = chan->force_active;
608
609         hci_send_acl(chan->conn->hcon, skb, flags);
610 }
611
612 static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
613 {
614         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
615                 control |= L2CAP_SUPER_RCV_NOT_READY;
616                 set_bit(CONN_RNR_SENT, &chan->conn_state);
617         } else
618                 control |= L2CAP_SUPER_RCV_READY;
619
620         control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
621
622         l2cap_send_sframe(chan, control);
623 }
624
625 static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
626 {
627         return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
628 }
629
630 static void l2cap_do_start(struct l2cap_chan *chan)
631 {
632         struct l2cap_conn *conn = chan->conn;
633
634         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
635                 if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
636                         return;
637
638                 if (l2cap_check_security(chan) &&
639                                 __l2cap_no_conn_pending(chan)) {
640                         struct l2cap_conn_req req;
641                         req.scid = cpu_to_le16(chan->scid);
642                         req.psm  = chan->psm;
643
644                         chan->ident = l2cap_get_ident(conn);
645                         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
646
647                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
648                                                         sizeof(req), &req);
649                 }
650         } else {
651                 struct l2cap_info_req req;
652                 req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
653
654                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
655                 conn->info_ident = l2cap_get_ident(conn);
656
657                 mod_timer(&conn->info_timer, jiffies +
658                                         msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
659
660                 l2cap_send_cmd(conn, conn->info_ident,
661                                         L2CAP_INFO_REQ, sizeof(req), &req);
662         }
663 }
664
665 static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
666 {
667         u32 local_feat_mask = l2cap_feat_mask;
668         if (!disable_ertm)
669                 local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
670
671         switch (mode) {
672         case L2CAP_MODE_ERTM:
673                 return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
674         case L2CAP_MODE_STREAMING:
675                 return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
676         default:
677                 return 0x00;
678         }
679 }
680
681 static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
682 {
683         struct sock *sk;
684         struct l2cap_disconn_req req;
685
686         if (!conn)
687                 return;
688
689         sk = chan->sk;
690
691         if (chan->mode == L2CAP_MODE_ERTM) {
692                 __clear_retrans_timer(chan);
693                 __clear_monitor_timer(chan);
694                 __clear_ack_timer(chan);
695         }
696
697         req.dcid = cpu_to_le16(chan->dcid);
698         req.scid = cpu_to_le16(chan->scid);
699         l2cap_send_cmd(conn, l2cap_get_ident(conn),
700                         L2CAP_DISCONN_REQ, sizeof(req), &req);
701
702         l2cap_state_change(chan, BT_DISCONN);
703         sk->sk_err = err;
704 }
705
706 /* ---- L2CAP connections ---- */
707 static void l2cap_conn_start(struct l2cap_conn *conn)
708 {
709         struct l2cap_chan *chan, *tmp;
710
711         BT_DBG("conn %p", conn);
712
713         read_lock(&conn->chan_lock);
714
715         list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
716                 struct sock *sk = chan->sk;
717
718                 bh_lock_sock(sk);
719
720                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
721                         bh_unlock_sock(sk);
722                         continue;
723                 }
724
725                 if (chan->state == BT_CONNECT) {
726                         struct l2cap_conn_req req;
727
728                         if (!l2cap_check_security(chan) ||
729                                         !__l2cap_no_conn_pending(chan)) {
730                                 bh_unlock_sock(sk);
731                                 continue;
732                         }
733
734                         if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
735                                         && test_bit(CONF_STATE2_DEVICE,
736                                         &chan->conf_state)) {
737                                 /* l2cap_chan_close() calls list_del(chan)
738                                  * so release the lock */
739                                 read_unlock(&conn->chan_lock);
740                                 l2cap_chan_close(chan, ECONNRESET);
741                                 read_lock(&conn->chan_lock);
742                                 bh_unlock_sock(sk);
743                                 continue;
744                         }
745
746                         req.scid = cpu_to_le16(chan->scid);
747                         req.psm  = chan->psm;
748
749                         chan->ident = l2cap_get_ident(conn);
750                         set_bit(CONF_CONNECT_PEND, &chan->conf_state);
751
752                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
753                                                         sizeof(req), &req);
754
755                 } else if (chan->state == BT_CONNECT2) {
756                         struct l2cap_conn_rsp rsp;
757                         char buf[128];
758                         rsp.scid = cpu_to_le16(chan->dcid);
759                         rsp.dcid = cpu_to_le16(chan->scid);
760
761                         if (l2cap_check_security(chan)) {
762                                 if (bt_sk(sk)->defer_setup) {
763                                         struct sock *parent = bt_sk(sk)->parent;
764                                         rsp.result = cpu_to_le16(L2CAP_CR_PEND);
765                                         rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
766                                         if (parent)
767                                                 parent->sk_data_ready(parent, 0);
768
769                                 } else {
770                                         l2cap_state_change(chan, BT_CONFIG);
771                                         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
772                                         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
773                                 }
774                         } else {
775                                 rsp.result = cpu_to_le16(L2CAP_CR_PEND);
776                                 rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
777                         }
778
779                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
780                                                         sizeof(rsp), &rsp);
781
782                         if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
783                                         rsp.result != L2CAP_CR_SUCCESS) {
784                                 bh_unlock_sock(sk);
785                                 continue;
786                         }
787
788                         set_bit(CONF_REQ_SENT, &chan->conf_state);
789                         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
790                                                 l2cap_build_conf_req(chan, buf), buf);
791                         chan->num_conf_req++;
792                 }
793
794                 bh_unlock_sock(sk);
795         }
796
797         read_unlock(&conn->chan_lock);
798 }
799
800 /* Find socket with cid and source bdaddr.
801  * Returns closest match, locked.
802  */
803 static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
804 {
805         struct l2cap_chan *c, *c1 = NULL;
806
807         read_lock(&chan_list_lock);
808
809         list_for_each_entry(c, &chan_list, global_l) {
810                 struct sock *sk = c->sk;
811
812                 if (state && c->state != state)
813                         continue;
814
815                 if (c->scid == cid) {
816                         /* Exact match. */
817                         if (!bacmp(&bt_sk(sk)->src, src)) {
818                                 read_unlock(&chan_list_lock);
819                                 return c;
820                         }
821
822                         /* Closest match */
823                         if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
824                                 c1 = c;
825                 }
826         }
827
828         read_unlock(&chan_list_lock);
829
830         return c1;
831 }
832
833 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
834 {
835         struct sock *parent, *sk;
836         struct l2cap_chan *chan, *pchan;
837
838         BT_DBG("");
839
840         /* Check if we have socket listening on cid */
841         pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
842                                                         conn->src);
843         if (!pchan)
844                 return;
845
846         parent = pchan->sk;
847
848         bh_lock_sock(parent);
849
850         /* Check for backlog size */
851         if (sk_acceptq_is_full(parent)) {
852                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
853                 goto clean;
854         }
855
856         chan = pchan->ops->new_connection(pchan->data);
857         if (!chan)
858                 goto clean;
859
860         sk = chan->sk;
861
862         write_lock_bh(&conn->chan_lock);
863
864         hci_conn_hold(conn->hcon);
865
866         bacpy(&bt_sk(sk)->src, conn->src);
867         bacpy(&bt_sk(sk)->dst, conn->dst);
868
869         bt_accept_enqueue(parent, sk);
870
871         __l2cap_chan_add(conn, chan);
872
873         __set_chan_timer(chan, sk->sk_sndtimeo);
874
875         l2cap_state_change(chan, BT_CONNECTED);
876         parent->sk_data_ready(parent, 0);
877
878         write_unlock_bh(&conn->chan_lock);
879
880 clean:
881         bh_unlock_sock(parent);
882 }
883
884 static void l2cap_chan_ready(struct sock *sk)
885 {
886         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
887         struct sock *parent = bt_sk(sk)->parent;
888
889         BT_DBG("sk %p, parent %p", sk, parent);
890
891         chan->conf_state = 0;
892         __clear_chan_timer(chan);
893
894         l2cap_state_change(chan, BT_CONNECTED);
895         sk->sk_state_change(sk);
896
897         if (parent)
898                 parent->sk_data_ready(parent, 0);
899 }
900
901 static void l2cap_conn_ready(struct l2cap_conn *conn)
902 {
903         struct l2cap_chan *chan;
904
905         BT_DBG("conn %p", conn);
906
907         if (!conn->hcon->out && conn->hcon->type == LE_LINK)
908                 l2cap_le_conn_ready(conn);
909
910         if (conn->hcon->out && conn->hcon->type == LE_LINK)
911                 smp_conn_security(conn, conn->hcon->pending_sec_level);
912
913         read_lock(&conn->chan_lock);
914
915         list_for_each_entry(chan, &conn->chan_l, list) {
916                 struct sock *sk = chan->sk;
917
918                 bh_lock_sock(sk);
919
920                 if (conn->hcon->type == LE_LINK) {
921                         if (smp_conn_security(conn, chan->sec_level))
922                                 l2cap_chan_ready(sk);
923
924                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
925                         __clear_chan_timer(chan);
926                         l2cap_state_change(chan, BT_CONNECTED);
927                         sk->sk_state_change(sk);
928
929                 } else if (chan->state == BT_CONNECT)
930                         l2cap_do_start(chan);
931
932                 bh_unlock_sock(sk);
933         }
934
935         read_unlock(&conn->chan_lock);
936 }
937
938 /* Notify sockets that we cannot guaranty reliability anymore */
939 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
940 {
941         struct l2cap_chan *chan;
942
943         BT_DBG("conn %p", conn);
944
945         read_lock(&conn->chan_lock);
946
947         list_for_each_entry(chan, &conn->chan_l, list) {
948                 struct sock *sk = chan->sk;
949
950                 if (chan->force_reliable)
951                         sk->sk_err = err;
952         }
953
954         read_unlock(&conn->chan_lock);
955 }
956
957 static void l2cap_info_timeout(unsigned long arg)
958 {
959         struct l2cap_conn *conn = (void *) arg;
960
961         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
962         conn->info_ident = 0;
963
964         l2cap_conn_start(conn);
965 }
966
967 static void l2cap_conn_del(struct hci_conn *hcon, int err)
968 {
969         struct l2cap_conn *conn = hcon->l2cap_data;
970         struct l2cap_chan *chan, *l;
971         struct sock *sk;
972
973         if (!conn)
974                 return;
975
976         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
977
978         kfree_skb(conn->rx_skb);
979
980         /* Kill channels */
981         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
982                 sk = chan->sk;
983                 bh_lock_sock(sk);
984                 l2cap_chan_del(chan, err);
985                 bh_unlock_sock(sk);
986                 chan->ops->close(chan->data);
987         }
988
989         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
990                 del_timer_sync(&conn->info_timer);
991
992         if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend)) {
993                 del_timer(&conn->security_timer);
994                 smp_chan_destroy(conn);
995         }
996
997         hcon->l2cap_data = NULL;
998         kfree(conn);
999 }
1000
1001 static void security_timeout(unsigned long arg)
1002 {
1003         struct l2cap_conn *conn = (void *) arg;
1004
1005         l2cap_conn_del(conn->hcon, ETIMEDOUT);
1006 }
1007
1008 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
1009 {
1010         struct l2cap_conn *conn = hcon->l2cap_data;
1011
1012         if (conn || status)
1013                 return conn;
1014
1015         conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1016         if (!conn)
1017                 return NULL;
1018
1019         hcon->l2cap_data = conn;
1020         conn->hcon = hcon;
1021
1022         BT_DBG("hcon %p conn %p", hcon, conn);
1023
1024         if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
1025                 conn->mtu = hcon->hdev->le_mtu;
1026         else
1027                 conn->mtu = hcon->hdev->acl_mtu;
1028
1029         conn->src = &hcon->hdev->bdaddr;
1030         conn->dst = &hcon->dst;
1031
1032         conn->feat_mask = 0;
1033
1034         spin_lock_init(&conn->lock);
1035         rwlock_init(&conn->chan_lock);
1036
1037         INIT_LIST_HEAD(&conn->chan_l);
1038
1039         if (hcon->type == LE_LINK)
1040                 setup_timer(&conn->security_timer, security_timeout,
1041                                                 (unsigned long) conn);
1042         else
1043                 setup_timer(&conn->info_timer, l2cap_info_timeout,
1044                                                 (unsigned long) conn);
1045
1046         conn->disc_reason = 0x13;
1047
1048         return conn;
1049 }
1050
1051 static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
1052 {
1053         write_lock_bh(&conn->chan_lock);
1054         __l2cap_chan_add(conn, chan);
1055         write_unlock_bh(&conn->chan_lock);
1056 }
1057
1058 /* ---- Socket interface ---- */
1059
1060 /* Find socket with psm and source bdaddr.
1061  * Returns closest match.
1062  */
1063 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, bdaddr_t *src)
1064 {
1065         struct l2cap_chan *c, *c1 = NULL;
1066
1067         read_lock(&chan_list_lock);
1068
1069         list_for_each_entry(c, &chan_list, global_l) {
1070                 struct sock *sk = c->sk;
1071
1072                 if (state && c->state != state)
1073                         continue;
1074
1075                 if (c->psm == psm) {
1076                         /* Exact match. */
1077                         if (!bacmp(&bt_sk(sk)->src, src)) {
1078                                 read_unlock(&chan_list_lock);
1079                                 return c;
1080                         }
1081
1082                         /* Closest match */
1083                         if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1084                                 c1 = c;
1085                 }
1086         }
1087
1088         read_unlock(&chan_list_lock);
1089
1090         return c1;
1091 }
1092
1093 int l2cap_chan_connect(struct l2cap_chan *chan)
1094 {
1095         struct sock *sk = chan->sk;
1096         bdaddr_t *src = &bt_sk(sk)->src;
1097         bdaddr_t *dst = &bt_sk(sk)->dst;
1098         struct l2cap_conn *conn;
1099         struct hci_conn *hcon;
1100         struct hci_dev *hdev;
1101         __u8 auth_type;
1102         int err;
1103
1104         BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
1105                                                         chan->psm);
1106
1107         hdev = hci_get_route(dst, src);
1108         if (!hdev)
1109                 return -EHOSTUNREACH;
1110
1111         hci_dev_lock_bh(hdev);
1112
1113         auth_type = l2cap_get_auth_type(chan);
1114
1115         if (chan->dcid == L2CAP_CID_LE_DATA)
1116                 hcon = hci_connect(hdev, LE_LINK, dst,
1117                                         chan->sec_level, auth_type);
1118         else
1119                 hcon = hci_connect(hdev, ACL_LINK, dst,
1120                                         chan->sec_level, auth_type);
1121
1122         if (IS_ERR(hcon)) {
1123                 err = PTR_ERR(hcon);
1124                 goto done;
1125         }
1126
1127         conn = l2cap_conn_add(hcon, 0);
1128         if (!conn) {
1129                 hci_conn_put(hcon);
1130                 err = -ENOMEM;
1131                 goto done;
1132         }
1133
1134         /* Update source addr of the socket */
1135         bacpy(src, conn->src);
1136
1137         l2cap_chan_add(conn, chan);
1138
1139         l2cap_state_change(chan, BT_CONNECT);
1140         __set_chan_timer(chan, sk->sk_sndtimeo);
1141
1142         if (hcon->state == BT_CONNECTED) {
1143                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1144                         __clear_chan_timer(chan);
1145                         if (l2cap_check_security(chan))
1146                                 l2cap_state_change(chan, BT_CONNECTED);
1147                 } else
1148                         l2cap_do_start(chan);
1149         }
1150
1151         err = 0;
1152
1153 done:
1154         hci_dev_unlock_bh(hdev);
1155         hci_dev_put(hdev);
1156         return err;
1157 }
1158
1159 int __l2cap_wait_ack(struct sock *sk)
1160 {
1161         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1162         DECLARE_WAITQUEUE(wait, current);
1163         int err = 0;
1164         int timeo = HZ/5;
1165
1166         add_wait_queue(sk_sleep(sk), &wait);
1167         set_current_state(TASK_INTERRUPTIBLE);
1168         while (chan->unacked_frames > 0 && chan->conn) {
1169                 if (!timeo)
1170                         timeo = HZ/5;
1171
1172                 if (signal_pending(current)) {
1173                         err = sock_intr_errno(timeo);
1174                         break;
1175                 }
1176
1177                 release_sock(sk);
1178                 timeo = schedule_timeout(timeo);
1179                 lock_sock(sk);
1180                 set_current_state(TASK_INTERRUPTIBLE);
1181
1182                 err = sock_error(sk);
1183                 if (err)
1184                         break;
1185         }
1186         set_current_state(TASK_RUNNING);
1187         remove_wait_queue(sk_sleep(sk), &wait);
1188         return err;
1189 }
1190
1191 static void l2cap_monitor_timeout(unsigned long arg)
1192 {
1193         struct l2cap_chan *chan = (void *) arg;
1194         struct sock *sk = chan->sk;
1195
1196         BT_DBG("chan %p", chan);
1197
1198         bh_lock_sock(sk);
1199         if (chan->retry_count >= chan->remote_max_tx) {
1200                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1201                 bh_unlock_sock(sk);
1202                 return;
1203         }
1204
1205         chan->retry_count++;
1206         __set_monitor_timer(chan);
1207
1208         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1209         bh_unlock_sock(sk);
1210 }
1211
1212 static void l2cap_retrans_timeout(unsigned long arg)
1213 {
1214         struct l2cap_chan *chan = (void *) arg;
1215         struct sock *sk = chan->sk;
1216
1217         BT_DBG("chan %p", chan);
1218
1219         bh_lock_sock(sk);
1220         chan->retry_count = 1;
1221         __set_monitor_timer(chan);
1222
1223         set_bit(CONN_WAIT_F, &chan->conn_state);
1224
1225         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1226         bh_unlock_sock(sk);
1227 }
1228
1229 static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
1230 {
1231         struct sk_buff *skb;
1232
1233         while ((skb = skb_peek(&chan->tx_q)) &&
1234                         chan->unacked_frames) {
1235                 if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1236                         break;
1237
1238                 skb = skb_dequeue(&chan->tx_q);
1239                 kfree_skb(skb);
1240
1241                 chan->unacked_frames--;
1242         }
1243
1244         if (!chan->unacked_frames)
1245                 __clear_retrans_timer(chan);
1246 }
1247
1248 static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1249 {
1250         struct hci_conn *hcon = chan->conn->hcon;
1251         u16 flags;
1252
1253         BT_DBG("chan %p, skb %p len %d", chan, skb, skb->len);
1254
1255         if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1256                 flags = ACL_START_NO_FLUSH;
1257         else
1258                 flags = ACL_START;
1259
1260         bt_cb(skb)->force_active = chan->force_active;
1261         hci_send_acl(hcon, skb, flags);
1262 }
1263
1264 static void l2cap_streaming_send(struct l2cap_chan *chan)
1265 {
1266         struct sk_buff *skb;
1267         u16 control, fcs;
1268
1269         while ((skb = skb_dequeue(&chan->tx_q))) {
1270                 control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1271                 control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1272                 put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1273
1274                 if (chan->fcs == L2CAP_FCS_CRC16) {
1275                         fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
1276                         put_unaligned_le16(fcs, skb->data + skb->len - 2);
1277                 }
1278
1279                 l2cap_do_send(chan, skb);
1280
1281                 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1282         }
1283 }
1284
1285 static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1286 {
1287         struct sk_buff *skb, *tx_skb;
1288         u16 control, fcs;
1289
1290         skb = skb_peek(&chan->tx_q);
1291         if (!skb)
1292                 return;
1293
1294         do {
1295                 if (bt_cb(skb)->tx_seq == tx_seq)
1296                         break;
1297
1298                 if (skb_queue_is_last(&chan->tx_q, skb))
1299                         return;
1300
1301         } while ((skb = skb_queue_next(&chan->tx_q, skb)));
1302
1303         if (chan->remote_max_tx &&
1304                         bt_cb(skb)->retries == chan->remote_max_tx) {
1305                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1306                 return;
1307         }
1308
1309         tx_skb = skb_clone(skb, GFP_ATOMIC);
1310         bt_cb(skb)->retries++;
1311         control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1312         control &= L2CAP_CTRL_SAR;
1313
1314         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1315                 control |= L2CAP_CTRL_FINAL;
1316
1317         control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1318                         | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1319
1320         put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1321
1322         if (chan->fcs == L2CAP_FCS_CRC16) {
1323                 fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
1324                 put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
1325         }
1326
1327         l2cap_do_send(chan, tx_skb);
1328 }
1329
1330 static int l2cap_ertm_send(struct l2cap_chan *chan)
1331 {
1332         struct sk_buff *skb, *tx_skb;
1333         u16 control, fcs;
1334         int nsent = 0;
1335
1336         if (chan->state != BT_CONNECTED)
1337                 return -ENOTCONN;
1338
1339         while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1340
1341                 if (chan->remote_max_tx &&
1342                                 bt_cb(skb)->retries == chan->remote_max_tx) {
1343                         l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1344                         break;
1345                 }
1346
1347                 tx_skb = skb_clone(skb, GFP_ATOMIC);
1348
1349                 bt_cb(skb)->retries++;
1350
1351                 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1352                 control &= L2CAP_CTRL_SAR;
1353
1354                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1355                         control |= L2CAP_CTRL_FINAL;
1356
1357                 control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1358                                 | (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1359                 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1360
1361
1362                 if (chan->fcs == L2CAP_FCS_CRC16) {
1363                         fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
1364                         put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
1365                 }
1366
1367                 l2cap_do_send(chan, tx_skb);
1368
1369                 __set_retrans_timer(chan);
1370
1371                 bt_cb(skb)->tx_seq = chan->next_tx_seq;
1372                 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1373
1374                 if (bt_cb(skb)->retries == 1)
1375                         chan->unacked_frames++;
1376
1377                 chan->frames_sent++;
1378
1379                 if (skb_queue_is_last(&chan->tx_q, skb))
1380                         chan->tx_send_head = NULL;
1381                 else
1382                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1383
1384                 nsent++;
1385         }
1386
1387         return nsent;
1388 }
1389
1390 static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1391 {
1392         int ret;
1393
1394         if (!skb_queue_empty(&chan->tx_q))
1395                 chan->tx_send_head = chan->tx_q.next;
1396
1397         chan->next_tx_seq = chan->expected_ack_seq;
1398         ret = l2cap_ertm_send(chan);
1399         return ret;
1400 }
1401
1402 static void l2cap_send_ack(struct l2cap_chan *chan)
1403 {
1404         u16 control = 0;
1405
1406         control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1407
1408         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1409                 control |= L2CAP_SUPER_RCV_NOT_READY;
1410                 set_bit(CONN_RNR_SENT, &chan->conn_state);
1411                 l2cap_send_sframe(chan, control);
1412                 return;
1413         }
1414
1415         if (l2cap_ertm_send(chan) > 0)
1416                 return;
1417
1418         control |= L2CAP_SUPER_RCV_READY;
1419         l2cap_send_sframe(chan, control);
1420 }
1421
1422 static void l2cap_send_srejtail(struct l2cap_chan *chan)
1423 {
1424         struct srej_list *tail;
1425         u16 control;
1426
1427         control = L2CAP_SUPER_SELECT_REJECT;
1428         control |= L2CAP_CTRL_FINAL;
1429
1430         tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1431         control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1432
1433         l2cap_send_sframe(chan, control);
1434 }
1435
1436 static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
1437 {
1438         struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1439         struct sk_buff **frag;
1440         int err, sent = 0;
1441
1442         if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1443                 return -EFAULT;
1444
1445         sent += count;
1446         len  -= count;
1447
1448         /* Continuation fragments (no L2CAP header) */
1449         frag = &skb_shinfo(skb)->frag_list;
1450         while (len) {
1451                 count = min_t(unsigned int, conn->mtu, len);
1452
1453                 *frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
1454                 if (!*frag)
1455                         return err;
1456                 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1457                         return -EFAULT;
1458
1459                 sent += count;
1460                 len  -= count;
1461
1462                 frag = &(*frag)->next;
1463         }
1464
1465         return sent;
1466 }
1467
1468 static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1469 {
1470         struct sock *sk = chan->sk;
1471         struct l2cap_conn *conn = chan->conn;
1472         struct sk_buff *skb;
1473         int err, count, hlen = L2CAP_HDR_SIZE + 2;
1474         struct l2cap_hdr *lh;
1475
1476         BT_DBG("sk %p len %d", sk, (int)len);
1477
1478         count = min_t(unsigned int, (conn->mtu - hlen), len);
1479         skb = bt_skb_send_alloc(sk, count + hlen,
1480                         msg->msg_flags & MSG_DONTWAIT, &err);
1481         if (!skb)
1482                 return ERR_PTR(err);
1483
1484         /* Create L2CAP header */
1485         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1486         lh->cid = cpu_to_le16(chan->dcid);
1487         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1488         put_unaligned_le16(chan->psm, skb_put(skb, 2));
1489
1490         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1491         if (unlikely(err < 0)) {
1492                 kfree_skb(skb);
1493                 return ERR_PTR(err);
1494         }
1495         return skb;
1496 }
1497
1498 static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1499 {
1500         struct sock *sk = chan->sk;
1501         struct l2cap_conn *conn = chan->conn;
1502         struct sk_buff *skb;
1503         int err, count, hlen = L2CAP_HDR_SIZE;
1504         struct l2cap_hdr *lh;
1505
1506         BT_DBG("sk %p len %d", sk, (int)len);
1507
1508         count = min_t(unsigned int, (conn->mtu - hlen), len);
1509         skb = bt_skb_send_alloc(sk, count + hlen,
1510                         msg->msg_flags & MSG_DONTWAIT, &err);
1511         if (!skb)
1512                 return ERR_PTR(err);
1513
1514         /* Create L2CAP header */
1515         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1516         lh->cid = cpu_to_le16(chan->dcid);
1517         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1518
1519         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1520         if (unlikely(err < 0)) {
1521                 kfree_skb(skb);
1522                 return ERR_PTR(err);
1523         }
1524         return skb;
1525 }
1526
1527 static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
1528                                                 struct msghdr *msg, size_t len,
1529                                                 u16 control, u16 sdulen)
1530 {
1531         struct sock *sk = chan->sk;
1532         struct l2cap_conn *conn = chan->conn;
1533         struct sk_buff *skb;
1534         int err, count, hlen = L2CAP_HDR_SIZE + 2;
1535         struct l2cap_hdr *lh;
1536
1537         BT_DBG("sk %p len %d", sk, (int)len);
1538
1539         if (!conn)
1540                 return ERR_PTR(-ENOTCONN);
1541
1542         if (sdulen)
1543                 hlen += 2;
1544
1545         if (chan->fcs == L2CAP_FCS_CRC16)
1546                 hlen += 2;
1547
1548         count = min_t(unsigned int, (conn->mtu - hlen), len);
1549         skb = bt_skb_send_alloc(sk, count + hlen,
1550                         msg->msg_flags & MSG_DONTWAIT, &err);
1551         if (!skb)
1552                 return ERR_PTR(err);
1553
1554         /* Create L2CAP header */
1555         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1556         lh->cid = cpu_to_le16(chan->dcid);
1557         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1558         put_unaligned_le16(control, skb_put(skb, 2));
1559         if (sdulen)
1560                 put_unaligned_le16(sdulen, skb_put(skb, 2));
1561
1562         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1563         if (unlikely(err < 0)) {
1564                 kfree_skb(skb);
1565                 return ERR_PTR(err);
1566         }
1567
1568         if (chan->fcs == L2CAP_FCS_CRC16)
1569                 put_unaligned_le16(0, skb_put(skb, 2));
1570
1571         bt_cb(skb)->retries = 0;
1572         return skb;
1573 }
1574
1575 static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1576 {
1577         struct sk_buff *skb;
1578         struct sk_buff_head sar_queue;
1579         u16 control;
1580         size_t size = 0;
1581
1582         skb_queue_head_init(&sar_queue);
1583         control = L2CAP_SDU_START;
1584         skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1585         if (IS_ERR(skb))
1586                 return PTR_ERR(skb);
1587
1588         __skb_queue_tail(&sar_queue, skb);
1589         len -= chan->remote_mps;
1590         size += chan->remote_mps;
1591
1592         while (len > 0) {
1593                 size_t buflen;
1594
1595                 if (len > chan->remote_mps) {
1596                         control = L2CAP_SDU_CONTINUE;
1597                         buflen = chan->remote_mps;
1598                 } else {
1599                         control = L2CAP_SDU_END;
1600                         buflen = len;
1601                 }
1602
1603                 skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1604                 if (IS_ERR(skb)) {
1605                         skb_queue_purge(&sar_queue);
1606                         return PTR_ERR(skb);
1607                 }
1608
1609                 __skb_queue_tail(&sar_queue, skb);
1610                 len -= buflen;
1611                 size += buflen;
1612         }
1613         skb_queue_splice_tail(&sar_queue, &chan->tx_q);
1614         if (chan->tx_send_head == NULL)
1615                 chan->tx_send_head = sar_queue.next;
1616
1617         return size;
1618 }
1619
1620 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1621 {
1622         struct sk_buff *skb;
1623         u16 control;
1624         int err;
1625
1626         /* Connectionless channel */
1627         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1628                 skb = l2cap_create_connless_pdu(chan, msg, len);
1629                 if (IS_ERR(skb))
1630                         return PTR_ERR(skb);
1631
1632                 l2cap_do_send(chan, skb);
1633                 return len;
1634         }
1635
1636         switch (chan->mode) {
1637         case L2CAP_MODE_BASIC:
1638                 /* Check outgoing MTU */
1639                 if (len > chan->omtu)
1640                         return -EMSGSIZE;
1641
1642                 /* Create a basic PDU */
1643                 skb = l2cap_create_basic_pdu(chan, msg, len);
1644                 if (IS_ERR(skb))
1645                         return PTR_ERR(skb);
1646
1647                 l2cap_do_send(chan, skb);
1648                 err = len;
1649                 break;
1650
1651         case L2CAP_MODE_ERTM:
1652         case L2CAP_MODE_STREAMING:
1653                 /* Entire SDU fits into one PDU */
1654                 if (len <= chan->remote_mps) {
1655                         control = L2CAP_SDU_UNSEGMENTED;
1656                         skb = l2cap_create_iframe_pdu(chan, msg, len, control,
1657                                                                         0);
1658                         if (IS_ERR(skb))
1659                                 return PTR_ERR(skb);
1660
1661                         __skb_queue_tail(&chan->tx_q, skb);
1662
1663                         if (chan->tx_send_head == NULL)
1664                                 chan->tx_send_head = skb;
1665
1666                 } else {
1667                         /* Segment SDU into multiples PDUs */
1668                         err = l2cap_sar_segment_sdu(chan, msg, len);
1669                         if (err < 0)
1670                                 return err;
1671                 }
1672
1673                 if (chan->mode == L2CAP_MODE_STREAMING) {
1674                         l2cap_streaming_send(chan);
1675                         err = len;
1676                         break;
1677                 }
1678
1679                 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
1680                                 test_bit(CONN_WAIT_F, &chan->conn_state)) {
1681                         err = len;
1682                         break;
1683                 }
1684
1685                 err = l2cap_ertm_send(chan);
1686                 if (err >= 0)
1687                         err = len;
1688
1689                 break;
1690
1691         default:
1692                 BT_DBG("bad state %1.1x", chan->mode);
1693                 err = -EBADFD;
1694         }
1695
1696         return err;
1697 }
1698
1699 /* Copy frame to all raw sockets on that connection */
1700 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
1701 {
1702         struct sk_buff *nskb;
1703         struct l2cap_chan *chan;
1704
1705         BT_DBG("conn %p", conn);
1706
1707         read_lock(&conn->chan_lock);
1708         list_for_each_entry(chan, &conn->chan_l, list) {
1709                 struct sock *sk = chan->sk;
1710                 if (chan->chan_type != L2CAP_CHAN_RAW)
1711                         continue;
1712
1713                 /* Don't send frame to the socket it came from */
1714                 if (skb->sk == sk)
1715                         continue;
1716                 nskb = skb_clone(skb, GFP_ATOMIC);
1717                 if (!nskb)
1718                         continue;
1719
1720                 if (chan->ops->recv(chan->data, nskb))
1721                         kfree_skb(nskb);
1722         }
1723         read_unlock(&conn->chan_lock);
1724 }
1725
1726 /* ---- L2CAP signalling commands ---- */
1727 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
1728                                 u8 code, u8 ident, u16 dlen, void *data)
1729 {
1730         struct sk_buff *skb, **frag;
1731         struct l2cap_cmd_hdr *cmd;
1732         struct l2cap_hdr *lh;
1733         int len, count;
1734
1735         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1736                         conn, code, ident, dlen);
1737
1738         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
1739         count = min_t(unsigned int, conn->mtu, len);
1740
1741         skb = bt_skb_alloc(count, GFP_ATOMIC);
1742         if (!skb)
1743                 return NULL;
1744
1745         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1746         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1747
1748         if (conn->hcon->type == LE_LINK)
1749                 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
1750         else
1751                 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
1752
1753         cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
1754         cmd->code  = code;
1755         cmd->ident = ident;
1756         cmd->len   = cpu_to_le16(dlen);
1757
1758         if (dlen) {
1759                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
1760                 memcpy(skb_put(skb, count), data, count);
1761                 data += count;
1762         }
1763
1764         len -= skb->len;
1765
1766         /* Continuation fragments (no L2CAP header) */
1767         frag = &skb_shinfo(skb)->frag_list;
1768         while (len) {
1769                 count = min_t(unsigned int, conn->mtu, len);
1770
1771                 *frag = bt_skb_alloc(count, GFP_ATOMIC);
1772                 if (!*frag)
1773                         goto fail;
1774
1775                 memcpy(skb_put(*frag, count), data, count);
1776
1777                 len  -= count;
1778                 data += count;
1779
1780                 frag = &(*frag)->next;
1781         }
1782
1783         return skb;
1784
1785 fail:
1786         kfree_skb(skb);
1787         return NULL;
1788 }
1789
1790 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
1791 {
1792         struct l2cap_conf_opt *opt = *ptr;
1793         int len;
1794
1795         len = L2CAP_CONF_OPT_SIZE + opt->len;
1796         *ptr += len;
1797
1798         *type = opt->type;
1799         *olen = opt->len;
1800
1801         switch (opt->len) {
1802         case 1:
1803                 *val = *((u8 *) opt->val);
1804                 break;
1805
1806         case 2:
1807                 *val = get_unaligned_le16(opt->val);
1808                 break;
1809
1810         case 4:
1811                 *val = get_unaligned_le32(opt->val);
1812                 break;
1813
1814         default:
1815                 *val = (unsigned long) opt->val;
1816                 break;
1817         }
1818
1819         BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
1820         return len;
1821 }
1822
1823 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
1824 {
1825         struct l2cap_conf_opt *opt = *ptr;
1826
1827         BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
1828
1829         opt->type = type;
1830         opt->len  = len;
1831
1832         switch (len) {
1833         case 1:
1834                 *((u8 *) opt->val)  = val;
1835                 break;
1836
1837         case 2:
1838                 put_unaligned_le16(val, opt->val);
1839                 break;
1840
1841         case 4:
1842                 put_unaligned_le32(val, opt->val);
1843                 break;
1844
1845         default:
1846                 memcpy(opt->val, (void *) val, len);
1847                 break;
1848         }
1849
1850         *ptr += L2CAP_CONF_OPT_SIZE + len;
1851 }
1852
1853 static void l2cap_ack_timeout(unsigned long arg)
1854 {
1855         struct l2cap_chan *chan = (void *) arg;
1856
1857         bh_lock_sock(chan->sk);
1858         l2cap_send_ack(chan);
1859         bh_unlock_sock(chan->sk);
1860 }
1861
1862 static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1863 {
1864         struct sock *sk = chan->sk;
1865
1866         chan->expected_ack_seq = 0;
1867         chan->unacked_frames = 0;
1868         chan->buffer_seq = 0;
1869         chan->num_acked = 0;
1870         chan->frames_sent = 0;
1871
1872         setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
1873                                                         (unsigned long) chan);
1874         setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
1875                                                         (unsigned long) chan);
1876         setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1877
1878         skb_queue_head_init(&chan->srej_q);
1879
1880         INIT_LIST_HEAD(&chan->srej_l);
1881
1882
1883         sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1884 }
1885
1886 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
1887 {
1888         switch (mode) {
1889         case L2CAP_MODE_STREAMING:
1890         case L2CAP_MODE_ERTM:
1891                 if (l2cap_mode_supported(mode, remote_feat_mask))
1892                         return mode;
1893                 /* fall through */
1894         default:
1895                 return L2CAP_MODE_BASIC;
1896         }
1897 }
1898
1899 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
1900 {
1901         struct l2cap_conf_req *req = data;
1902         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
1903         void *ptr = req->data;
1904
1905         BT_DBG("chan %p", chan);
1906
1907         if (chan->num_conf_req || chan->num_conf_rsp)
1908                 goto done;
1909
1910         switch (chan->mode) {
1911         case L2CAP_MODE_STREAMING:
1912         case L2CAP_MODE_ERTM:
1913                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
1914                         break;
1915
1916                 /* fall through */
1917         default:
1918                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1919                 break;
1920         }
1921
1922 done:
1923         if (chan->imtu != L2CAP_DEFAULT_MTU)
1924                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1925
1926         switch (chan->mode) {
1927         case L2CAP_MODE_BASIC:
1928                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
1929                                 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1930                         break;
1931
1932                 rfc.mode            = L2CAP_MODE_BASIC;
1933                 rfc.txwin_size      = 0;
1934                 rfc.max_transmit    = 0;
1935                 rfc.retrans_timeout = 0;
1936                 rfc.monitor_timeout = 0;
1937                 rfc.max_pdu_size    = 0;
1938
1939                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1940                                                         (unsigned long) &rfc);
1941                 break;
1942
1943         case L2CAP_MODE_ERTM:
1944                 rfc.mode            = L2CAP_MODE_ERTM;
1945                 rfc.txwin_size      = chan->tx_win;
1946                 rfc.max_transmit    = chan->max_tx;
1947                 rfc.retrans_timeout = 0;
1948                 rfc.monitor_timeout = 0;
1949                 rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1950                 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1951                         rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1952
1953                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1954                                                         (unsigned long) &rfc);
1955
1956                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1957                         break;
1958
1959                 if (chan->fcs == L2CAP_FCS_NONE ||
1960                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1961                         chan->fcs = L2CAP_FCS_NONE;
1962                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1963                 }
1964                 break;
1965
1966         case L2CAP_MODE_STREAMING:
1967                 rfc.mode            = L2CAP_MODE_STREAMING;
1968                 rfc.txwin_size      = 0;
1969                 rfc.max_transmit    = 0;
1970                 rfc.retrans_timeout = 0;
1971                 rfc.monitor_timeout = 0;
1972                 rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1973                 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1974                         rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1975
1976                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1977                                                         (unsigned long) &rfc);
1978
1979                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1980                         break;
1981
1982                 if (chan->fcs == L2CAP_FCS_NONE ||
1983                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1984                         chan->fcs = L2CAP_FCS_NONE;
1985                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1986                 }
1987                 break;
1988         }
1989
1990         req->dcid  = cpu_to_le16(chan->dcid);
1991         req->flags = cpu_to_le16(0);
1992
1993         return ptr - data;
1994 }
1995
1996 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
1997 {
1998         struct l2cap_conf_rsp *rsp = data;
1999         void *ptr = rsp->data;
2000         void *req = chan->conf_req;
2001         int len = chan->conf_len;
2002         int type, hint, olen;
2003         unsigned long val;
2004         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2005         u16 mtu = L2CAP_DEFAULT_MTU;
2006         u16 result = L2CAP_CONF_SUCCESS;
2007
2008         BT_DBG("chan %p", chan);
2009
2010         while (len >= L2CAP_CONF_OPT_SIZE) {
2011                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2012
2013                 hint  = type & L2CAP_CONF_HINT;
2014                 type &= L2CAP_CONF_MASK;
2015
2016                 switch (type) {
2017                 case L2CAP_CONF_MTU:
2018                         mtu = val;
2019                         break;
2020
2021                 case L2CAP_CONF_FLUSH_TO:
2022                         chan->flush_to = val;
2023                         break;
2024
2025                 case L2CAP_CONF_QOS:
2026                         break;
2027
2028                 case L2CAP_CONF_RFC:
2029                         if (olen == sizeof(rfc))
2030                                 memcpy(&rfc, (void *) val, olen);
2031                         break;
2032
2033                 case L2CAP_CONF_FCS:
2034                         if (val == L2CAP_FCS_NONE)
2035                                 set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2036
2037                         break;
2038
2039                 default:
2040                         if (hint)
2041                                 break;
2042
2043                         result = L2CAP_CONF_UNKNOWN;
2044                         *((u8 *) ptr++) = type;
2045                         break;
2046                 }
2047         }
2048
2049         if (chan->num_conf_rsp || chan->num_conf_req > 1)
2050                 goto done;
2051
2052         switch (chan->mode) {
2053         case L2CAP_MODE_STREAMING:
2054         case L2CAP_MODE_ERTM:
2055                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2056                         chan->mode = l2cap_select_mode(rfc.mode,
2057                                         chan->conn->feat_mask);
2058                         break;
2059                 }
2060
2061                 if (chan->mode != rfc.mode)
2062                         return -ECONNREFUSED;
2063
2064                 break;
2065         }
2066
2067 done:
2068         if (chan->mode != rfc.mode) {
2069                 result = L2CAP_CONF_UNACCEPT;
2070                 rfc.mode = chan->mode;
2071
2072                 if (chan->num_conf_rsp == 1)
2073                         return -ECONNREFUSED;
2074
2075                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2076                                         sizeof(rfc), (unsigned long) &rfc);
2077         }
2078
2079
2080         if (result == L2CAP_CONF_SUCCESS) {
2081                 /* Configure output options and let the other side know
2082                  * which ones we don't like. */
2083
2084                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
2085                         result = L2CAP_CONF_UNACCEPT;
2086                 else {
2087                         chan->omtu = mtu;
2088                         set_bit(CONF_MTU_DONE, &chan->conf_state);
2089                 }
2090                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2091
2092                 switch (rfc.mode) {
2093                 case L2CAP_MODE_BASIC:
2094                         chan->fcs = L2CAP_FCS_NONE;
2095                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2096                         break;
2097
2098                 case L2CAP_MODE_ERTM:
2099                         chan->remote_tx_win = rfc.txwin_size;
2100                         chan->remote_max_tx = rfc.max_transmit;
2101
2102                         if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2103                                 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2104
2105                         chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2106
2107                         rfc.retrans_timeout =
2108                                 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
2109                         rfc.monitor_timeout =
2110                                 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2111
2112                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2113
2114                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2115                                         sizeof(rfc), (unsigned long) &rfc);
2116
2117                         break;
2118
2119                 case L2CAP_MODE_STREAMING:
2120                         if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2121                                 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2122
2123                         chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2124
2125                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2126
2127                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2128                                         sizeof(rfc), (unsigned long) &rfc);
2129
2130                         break;
2131
2132                 default:
2133                         result = L2CAP_CONF_UNACCEPT;
2134
2135                         memset(&rfc, 0, sizeof(rfc));
2136                         rfc.mode = chan->mode;
2137                 }
2138
2139                 if (result == L2CAP_CONF_SUCCESS)
2140                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2141         }
2142         rsp->scid   = cpu_to_le16(chan->dcid);
2143         rsp->result = cpu_to_le16(result);
2144         rsp->flags  = cpu_to_le16(0x0000);
2145
2146         return ptr - data;
2147 }
2148
2149 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2150 {
2151         struct l2cap_conf_req *req = data;
2152         void *ptr = req->data;
2153         int type, olen;
2154         unsigned long val;
2155         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2156
2157         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2158
2159         while (len >= L2CAP_CONF_OPT_SIZE) {
2160                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2161
2162                 switch (type) {
2163                 case L2CAP_CONF_MTU:
2164                         if (val < L2CAP_DEFAULT_MIN_MTU) {
2165                                 *result = L2CAP_CONF_UNACCEPT;
2166                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2167                         } else
2168                                 chan->imtu = val;
2169                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2170                         break;
2171
2172                 case L2CAP_CONF_FLUSH_TO:
2173                         chan->flush_to = val;
2174                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2175                                                         2, chan->flush_to);
2176                         break;
2177
2178                 case L2CAP_CONF_RFC:
2179                         if (olen == sizeof(rfc))
2180                                 memcpy(&rfc, (void *)val, olen);
2181
2182                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2183                                                         rfc.mode != chan->mode)
2184                                 return -ECONNREFUSED;
2185
2186                         chan->fcs = 0;
2187
2188                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2189                                         sizeof(rfc), (unsigned long) &rfc);
2190                         break;
2191                 }
2192         }
2193
2194         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2195                 return -ECONNREFUSED;
2196
2197         chan->mode = rfc.mode;
2198
2199         if (*result == L2CAP_CONF_SUCCESS) {
2200                 switch (rfc.mode) {
2201                 case L2CAP_MODE_ERTM:
2202                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2203                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2204                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2205                         break;
2206                 case L2CAP_MODE_STREAMING:
2207                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2208                 }
2209         }
2210
2211         req->dcid   = cpu_to_le16(chan->dcid);
2212         req->flags  = cpu_to_le16(0x0000);
2213
2214         return ptr - data;
2215 }
2216
2217 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
2218 {
2219         struct l2cap_conf_rsp *rsp = data;
2220         void *ptr = rsp->data;
2221
2222         BT_DBG("chan %p", chan);
2223
2224         rsp->scid   = cpu_to_le16(chan->dcid);
2225         rsp->result = cpu_to_le16(result);
2226         rsp->flags  = cpu_to_le16(flags);
2227
2228         return ptr - data;
2229 }
2230
2231 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2232 {
2233         struct l2cap_conn_rsp rsp;
2234         struct l2cap_conn *conn = chan->conn;
2235         u8 buf[128];
2236
2237         rsp.scid   = cpu_to_le16(chan->dcid);
2238         rsp.dcid   = cpu_to_le16(chan->scid);
2239         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
2240         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
2241         l2cap_send_cmd(conn, chan->ident,
2242                                 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2243
2244         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2245                 return;
2246
2247         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2248                         l2cap_build_conf_req(chan, buf), buf);
2249         chan->num_conf_req++;
2250 }
2251
2252 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2253 {
2254         int type, olen;
2255         unsigned long val;
2256         struct l2cap_conf_rfc rfc;
2257
2258         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2259
2260         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2261                 return;
2262
2263         while (len >= L2CAP_CONF_OPT_SIZE) {
2264                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2265
2266                 switch (type) {
2267                 case L2CAP_CONF_RFC:
2268                         if (olen == sizeof(rfc))
2269                                 memcpy(&rfc, (void *)val, olen);
2270                         goto done;
2271                 }
2272         }
2273
2274         /* Use sane default values in case a misbehaving remote device
2275          * did not send an RFC option.
2276          */
2277         rfc.mode = chan->mode;
2278         rfc.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2279         rfc.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2280         rfc.max_pdu_size = cpu_to_le16(chan->imtu);
2281
2282         BT_ERR("Expected RFC option was not found, using defaults");
2283
2284 done:
2285         switch (rfc.mode) {
2286         case L2CAP_MODE_ERTM:
2287                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2288                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2289                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2290                 break;
2291         case L2CAP_MODE_STREAMING:
2292                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2293         }
2294 }
2295
2296 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2297 {
2298         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2299
2300         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2301                 return 0;
2302
2303         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2304                                         cmd->ident == conn->info_ident) {
2305                 del_timer(&conn->info_timer);
2306
2307                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2308                 conn->info_ident = 0;
2309
2310                 l2cap_conn_start(conn);
2311         }
2312
2313         return 0;
2314 }
2315
2316 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2317 {
2318         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
2319         struct l2cap_conn_rsp rsp;
2320         struct l2cap_chan *chan = NULL, *pchan;
2321         struct sock *parent, *sk = NULL;
2322         int result, status = L2CAP_CS_NO_INFO;
2323
2324         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2325         __le16 psm = req->psm;
2326
2327         BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
2328
2329         /* Check if we have socket listening on psm */
2330         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
2331         if (!pchan) {
2332                 result = L2CAP_CR_BAD_PSM;
2333                 goto sendresp;
2334         }
2335
2336         parent = pchan->sk;
2337
2338         bh_lock_sock(parent);
2339
2340         /* Check if the ACL is secure enough (if not SDP) */
2341         if (psm != cpu_to_le16(0x0001) &&
2342                                 !hci_conn_check_link_mode(conn->hcon)) {
2343                 conn->disc_reason = 0x05;
2344                 result = L2CAP_CR_SEC_BLOCK;
2345                 goto response;
2346         }
2347
2348         result = L2CAP_CR_NO_MEM;
2349
2350         /* Check for backlog size */
2351         if (sk_acceptq_is_full(parent)) {
2352                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
2353                 goto response;
2354         }
2355
2356         chan = pchan->ops->new_connection(pchan->data);
2357         if (!chan)
2358                 goto response;
2359
2360         sk = chan->sk;
2361
2362         write_lock_bh(&conn->chan_lock);
2363
2364         /* Check if we already have channel with that dcid */
2365         if (__l2cap_get_chan_by_dcid(conn, scid)) {
2366                 write_unlock_bh(&conn->chan_lock);
2367                 sock_set_flag(sk, SOCK_ZAPPED);
2368                 chan->ops->close(chan->data);
2369                 goto response;
2370         }
2371
2372         hci_conn_hold(conn->hcon);
2373
2374         bacpy(&bt_sk(sk)->src, conn->src);
2375         bacpy(&bt_sk(sk)->dst, conn->dst);
2376         chan->psm  = psm;
2377         chan->dcid = scid;
2378
2379         bt_accept_enqueue(parent, sk);
2380
2381         __l2cap_chan_add(conn, chan);
2382
2383         dcid = chan->scid;
2384
2385         __set_chan_timer(chan, sk->sk_sndtimeo);
2386
2387         chan->ident = cmd->ident;
2388
2389         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2390                 if (l2cap_check_security(chan)) {
2391                         if (bt_sk(sk)->defer_setup) {
2392                                 l2cap_state_change(chan, BT_CONNECT2);
2393                                 result = L2CAP_CR_PEND;
2394                                 status = L2CAP_CS_AUTHOR_PEND;
2395                                 parent->sk_data_ready(parent, 0);
2396                         } else {
2397                                 l2cap_state_change(chan, BT_CONFIG);
2398                                 result = L2CAP_CR_SUCCESS;
2399                                 status = L2CAP_CS_NO_INFO;
2400                         }
2401                 } else {
2402                         l2cap_state_change(chan, BT_CONNECT2);
2403                         result = L2CAP_CR_PEND;
2404                         status = L2CAP_CS_AUTHEN_PEND;
2405                 }
2406         } else {
2407                 l2cap_state_change(chan, BT_CONNECT2);
2408                 result = L2CAP_CR_PEND;
2409                 status = L2CAP_CS_NO_INFO;
2410         }
2411
2412         write_unlock_bh(&conn->chan_lock);
2413
2414 response:
2415         bh_unlock_sock(parent);
2416
2417 sendresp:
2418         rsp.scid   = cpu_to_le16(scid);
2419         rsp.dcid   = cpu_to_le16(dcid);
2420         rsp.result = cpu_to_le16(result);
2421         rsp.status = cpu_to_le16(status);
2422         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2423
2424         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
2425                 struct l2cap_info_req info;
2426                 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2427
2428                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
2429                 conn->info_ident = l2cap_get_ident(conn);
2430
2431                 mod_timer(&conn->info_timer, jiffies +
2432                                         msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
2433
2434                 l2cap_send_cmd(conn, conn->info_ident,
2435                                         L2CAP_INFO_REQ, sizeof(info), &info);
2436         }
2437
2438         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2439                                 result == L2CAP_CR_SUCCESS) {
2440                 u8 buf[128];
2441                 set_bit(CONF_REQ_SENT, &chan->conf_state);
2442                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2443                                         l2cap_build_conf_req(chan, buf), buf);
2444                 chan->num_conf_req++;
2445         }
2446
2447         return 0;
2448 }
2449
2450 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2451 {
2452         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
2453         u16 scid, dcid, result, status;
2454         struct l2cap_chan *chan;
2455         struct sock *sk;
2456         u8 req[128];
2457
2458         scid   = __le16_to_cpu(rsp->scid);
2459         dcid   = __le16_to_cpu(rsp->dcid);
2460         result = __le16_to_cpu(rsp->result);
2461         status = __le16_to_cpu(rsp->status);
2462
2463         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
2464
2465         if (scid) {
2466                 chan = l2cap_get_chan_by_scid(conn, scid);
2467                 if (!chan)
2468                         return -EFAULT;
2469         } else {
2470                 chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2471                 if (!chan)
2472                         return -EFAULT;
2473         }
2474
2475         sk = chan->sk;
2476
2477         switch (result) {
2478         case L2CAP_CR_SUCCESS:
2479                 l2cap_state_change(chan, BT_CONFIG);
2480                 chan->ident = 0;
2481                 chan->dcid = dcid;
2482                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2483
2484                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2485                         break;
2486
2487                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2488                                         l2cap_build_conf_req(chan, req), req);
2489                 chan->num_conf_req++;
2490                 break;
2491
2492         case L2CAP_CR_PEND:
2493                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
2494                 break;
2495
2496         default:
2497                 /* don't delete l2cap channel if sk is owned by user */
2498                 if (sock_owned_by_user(sk)) {
2499                         l2cap_state_change(chan, BT_DISCONN);
2500                         __clear_chan_timer(chan);
2501                         __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
2502                         break;
2503                 }
2504
2505                 l2cap_chan_del(chan, ECONNREFUSED);
2506                 break;
2507         }
2508
2509         bh_unlock_sock(sk);
2510         return 0;
2511 }
2512
2513 static inline void set_default_fcs(struct l2cap_chan *chan)
2514 {
2515         /* FCS is enabled only in ERTM or streaming mode, if one or both
2516          * sides request it.
2517          */
2518         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2519                 chan->fcs = L2CAP_FCS_NONE;
2520         else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2521                 chan->fcs = L2CAP_FCS_CRC16;
2522 }
2523
2524 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2525 {
2526         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
2527         u16 dcid, flags;
2528         u8 rsp[64];
2529         struct l2cap_chan *chan;
2530         struct sock *sk;
2531         int len;
2532
2533         dcid  = __le16_to_cpu(req->dcid);
2534         flags = __le16_to_cpu(req->flags);
2535
2536         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
2537
2538         chan = l2cap_get_chan_by_scid(conn, dcid);
2539         if (!chan)
2540                 return -ENOENT;
2541
2542         sk = chan->sk;
2543
2544         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2545                 struct l2cap_cmd_rej_cid rej;
2546
2547                 rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
2548                 rej.scid = cpu_to_le16(chan->scid);
2549                 rej.dcid = cpu_to_le16(chan->dcid);
2550
2551                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
2552                                 sizeof(rej), &rej);
2553                 goto unlock;
2554         }
2555
2556         /* Reject if config buffer is too small. */
2557         len = cmd_len - sizeof(*req);
2558         if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2559                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2560                                 l2cap_build_conf_rsp(chan, rsp,
2561                                         L2CAP_CONF_REJECT, flags), rsp);
2562                 goto unlock;
2563         }
2564
2565         /* Store config. */
2566         memcpy(chan->conf_req + chan->conf_len, req->data, len);
2567         chan->conf_len += len;
2568
2569         if (flags & 0x0001) {
2570                 /* Incomplete config. Send empty response. */
2571                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2572                                 l2cap_build_conf_rsp(chan, rsp,
2573                                         L2CAP_CONF_SUCCESS, 0x0001), rsp);
2574                 goto unlock;
2575         }
2576
2577         /* Complete config. */
2578         len = l2cap_parse_conf_req(chan, rsp);
2579         if (len < 0) {
2580                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2581                 goto unlock;
2582         }
2583
2584         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2585         chan->num_conf_rsp++;
2586
2587         /* Reset config buffer. */
2588         chan->conf_len = 0;
2589
2590         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2591                 goto unlock;
2592
2593         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2594                 set_default_fcs(chan);
2595
2596                 l2cap_state_change(chan, BT_CONNECTED);
2597
2598                 chan->next_tx_seq = 0;
2599                 chan->expected_tx_seq = 0;
2600                 skb_queue_head_init(&chan->tx_q);
2601                 if (chan->mode == L2CAP_MODE_ERTM)
2602                         l2cap_ertm_init(chan);
2603
2604                 l2cap_chan_ready(sk);
2605                 goto unlock;
2606         }
2607
2608         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2609                 u8 buf[64];
2610                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2611                                         l2cap_build_conf_req(chan, buf), buf);
2612                 chan->num_conf_req++;
2613         }
2614
2615 unlock:
2616         bh_unlock_sock(sk);
2617         return 0;
2618 }
2619
2620 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2621 {
2622         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
2623         u16 scid, flags, result;
2624         struct l2cap_chan *chan;
2625         struct sock *sk;
2626         int len = cmd->len - sizeof(*rsp);
2627
2628         scid   = __le16_to_cpu(rsp->scid);
2629         flags  = __le16_to_cpu(rsp->flags);
2630         result = __le16_to_cpu(rsp->result);
2631
2632         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2633                         scid, flags, result);
2634
2635         chan = l2cap_get_chan_by_scid(conn, scid);
2636         if (!chan)
2637                 return 0;
2638
2639         sk = chan->sk;
2640
2641         switch (result) {
2642         case L2CAP_CONF_SUCCESS:
2643                 l2cap_conf_rfc_get(chan, rsp->data, len);
2644                 break;
2645
2646         case L2CAP_CONF_UNACCEPT:
2647                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2648                         char req[64];
2649
2650                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2651                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2652                                 goto done;
2653                         }
2654
2655                         /* throw out any old stored conf requests */
2656                         result = L2CAP_CONF_SUCCESS;
2657                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
2658                                                                 req, &result);
2659                         if (len < 0) {
2660                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2661                                 goto done;
2662                         }
2663
2664                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
2665                                                 L2CAP_CONF_REQ, len, req);
2666                         chan->num_conf_req++;
2667                         if (result != L2CAP_CONF_SUCCESS)
2668                                 goto done;
2669                         break;
2670                 }
2671
2672         default:
2673                 sk->sk_err = ECONNRESET;
2674                 __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
2675                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2676                 goto done;
2677         }
2678
2679         if (flags & 0x01)
2680                 goto done;
2681
2682         set_bit(CONF_INPUT_DONE, &chan->conf_state);
2683
2684         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2685                 set_default_fcs(chan);
2686
2687                 l2cap_state_change(chan, BT_CONNECTED);
2688                 chan->next_tx_seq = 0;
2689                 chan->expected_tx_seq = 0;
2690                 skb_queue_head_init(&chan->tx_q);
2691                 if (chan->mode ==  L2CAP_MODE_ERTM)
2692                         l2cap_ertm_init(chan);
2693
2694                 l2cap_chan_ready(sk);
2695         }
2696
2697 done:
2698         bh_unlock_sock(sk);
2699         return 0;
2700 }
2701
2702 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2703 {
2704         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
2705         struct l2cap_disconn_rsp rsp;
2706         u16 dcid, scid;
2707         struct l2cap_chan *chan;
2708         struct sock *sk;
2709
2710         scid = __le16_to_cpu(req->scid);
2711         dcid = __le16_to_cpu(req->dcid);
2712
2713         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
2714
2715         chan = l2cap_get_chan_by_scid(conn, dcid);
2716         if (!chan)
2717                 return 0;
2718
2719         sk = chan->sk;
2720
2721         rsp.dcid = cpu_to_le16(chan->scid);
2722         rsp.scid = cpu_to_le16(chan->dcid);
2723         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
2724
2725         sk->sk_shutdown = SHUTDOWN_MASK;
2726
2727         /* don't delete l2cap channel if sk is owned by user */
2728         if (sock_owned_by_user(sk)) {
2729                 l2cap_state_change(chan, BT_DISCONN);
2730                 __clear_chan_timer(chan);
2731                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
2732                 bh_unlock_sock(sk);
2733                 return 0;
2734         }
2735
2736         l2cap_chan_del(chan, ECONNRESET);
2737         bh_unlock_sock(sk);
2738
2739         chan->ops->close(chan->data);
2740         return 0;
2741 }
2742
2743 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2744 {
2745         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
2746         u16 dcid, scid;
2747         struct l2cap_chan *chan;
2748         struct sock *sk;
2749
2750         scid = __le16_to_cpu(rsp->scid);
2751         dcid = __le16_to_cpu(rsp->dcid);
2752
2753         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
2754
2755         chan = l2cap_get_chan_by_scid(conn, scid);
2756         if (!chan)
2757                 return 0;
2758
2759         sk = chan->sk;
2760
2761         /* don't delete l2cap channel if sk is owned by user */
2762         if (sock_owned_by_user(sk)) {
2763                 l2cap_state_change(chan,BT_DISCONN);
2764                 __clear_chan_timer(chan);
2765                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
2766                 bh_unlock_sock(sk);
2767                 return 0;
2768         }
2769
2770         l2cap_chan_del(chan, 0);
2771         bh_unlock_sock(sk);
2772
2773         chan->ops->close(chan->data);
2774         return 0;
2775 }
2776
2777 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2778 {
2779         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
2780         u16 type;
2781
2782         type = __le16_to_cpu(req->type);
2783
2784         BT_DBG("type 0x%4.4x", type);
2785
2786         if (type == L2CAP_IT_FEAT_MASK) {
2787                 u8 buf[8];
2788                 u32 feat_mask = l2cap_feat_mask;
2789                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2790                 rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2791                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2792                 if (!disable_ertm)
2793                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
2794                                                          | L2CAP_FEAT_FCS;
2795                 put_unaligned_le32(feat_mask, rsp->data);
2796                 l2cap_send_cmd(conn, cmd->ident,
2797                                         L2CAP_INFO_RSP, sizeof(buf), buf);
2798         } else if (type == L2CAP_IT_FIXED_CHAN) {
2799                 u8 buf[12];
2800                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2801                 rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2802                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2803                 memcpy(buf + 4, l2cap_fixed_chan, 8);
2804                 l2cap_send_cmd(conn, cmd->ident,
2805                                         L2CAP_INFO_RSP, sizeof(buf), buf);
2806         } else {
2807                 struct l2cap_info_rsp rsp;
2808                 rsp.type   = cpu_to_le16(type);
2809                 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
2810                 l2cap_send_cmd(conn, cmd->ident,
2811                                         L2CAP_INFO_RSP, sizeof(rsp), &rsp);
2812         }
2813
2814         return 0;
2815 }
2816
2817 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2818 {
2819         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
2820         u16 type, result;
2821
2822         type   = __le16_to_cpu(rsp->type);
2823         result = __le16_to_cpu(rsp->result);
2824
2825         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
2826
2827         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
2828         if (cmd->ident != conn->info_ident ||
2829                         conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
2830                 return 0;
2831
2832         del_timer(&conn->info_timer);
2833
2834         if (result != L2CAP_IR_SUCCESS) {
2835                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2836                 conn->info_ident = 0;
2837
2838                 l2cap_conn_start(conn);
2839
2840                 return 0;
2841         }
2842
2843         if (type == L2CAP_IT_FEAT_MASK) {
2844                 conn->feat_mask = get_unaligned_le32(rsp->data);
2845
2846                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2847                         struct l2cap_info_req req;
2848                         req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2849
2850                         conn->info_ident = l2cap_get_ident(conn);
2851
2852                         l2cap_send_cmd(conn, conn->info_ident,
2853                                         L2CAP_INFO_REQ, sizeof(req), &req);
2854                 } else {
2855                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2856                         conn->info_ident = 0;
2857
2858                         l2cap_conn_start(conn);
2859                 }
2860         } else if (type == L2CAP_IT_FIXED_CHAN) {
2861                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2862                 conn->info_ident = 0;
2863
2864                 l2cap_conn_start(conn);
2865         }
2866
2867         return 0;
2868 }
2869
2870 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2871                                                         u16 to_multiplier)
2872 {
2873         u16 max_latency;
2874
2875         if (min > max || min < 6 || max > 3200)
2876                 return -EINVAL;
2877
2878         if (to_multiplier < 10 || to_multiplier > 3200)
2879                 return -EINVAL;
2880
2881         if (max >= to_multiplier * 8)
2882                 return -EINVAL;
2883
2884         max_latency = (to_multiplier * 8 / max) - 1;
2885         if (latency > 499 || latency > max_latency)
2886                 return -EINVAL;
2887
2888         return 0;
2889 }
2890
2891 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
2892                                         struct l2cap_cmd_hdr *cmd, u8 *data)
2893 {
2894         struct hci_conn *hcon = conn->hcon;
2895         struct l2cap_conn_param_update_req *req;
2896         struct l2cap_conn_param_update_rsp rsp;
2897         u16 min, max, latency, to_multiplier, cmd_len;
2898         int err;
2899
2900         if (!(hcon->link_mode & HCI_LM_MASTER))
2901                 return -EINVAL;
2902
2903         cmd_len = __le16_to_cpu(cmd->len);
2904         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
2905                 return -EPROTO;
2906
2907         req = (struct l2cap_conn_param_update_req *) data;
2908         min             = __le16_to_cpu(req->min);
2909         max             = __le16_to_cpu(req->max);
2910         latency         = __le16_to_cpu(req->latency);
2911         to_multiplier   = __le16_to_cpu(req->to_multiplier);
2912
2913         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
2914                                                 min, max, latency, to_multiplier);
2915
2916         memset(&rsp, 0, sizeof(rsp));
2917
2918         err = l2cap_check_conn_param(min, max, latency, to_multiplier);
2919         if (err)
2920                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
2921         else
2922                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
2923
2924         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
2925                                                         sizeof(rsp), &rsp);
2926
2927         if (!err)
2928                 hci_le_conn_update(hcon, min, max, latency, to_multiplier);
2929
2930         return 0;
2931 }
2932
2933 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
2934                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2935 {
2936         int err = 0;
2937
2938         switch (cmd->code) {
2939         case L2CAP_COMMAND_REJ:
2940                 l2cap_command_rej(conn, cmd, data);
2941                 break;
2942
2943         case L2CAP_CONN_REQ:
2944                 err = l2cap_connect_req(conn, cmd, data);
2945                 break;
2946
2947         case L2CAP_CONN_RSP:
2948                 err = l2cap_connect_rsp(conn, cmd, data);
2949                 break;
2950
2951         case L2CAP_CONF_REQ:
2952                 err = l2cap_config_req(conn, cmd, cmd_len, data);
2953                 break;
2954
2955         case L2CAP_CONF_RSP:
2956                 err = l2cap_config_rsp(conn, cmd, data);
2957                 break;
2958
2959         case L2CAP_DISCONN_REQ:
2960                 err = l2cap_disconnect_req(conn, cmd, data);
2961                 break;
2962
2963         case L2CAP_DISCONN_RSP:
2964                 err = l2cap_disconnect_rsp(conn, cmd, data);
2965                 break;
2966
2967         case L2CAP_ECHO_REQ:
2968                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
2969                 break;
2970
2971         case L2CAP_ECHO_RSP:
2972                 break;
2973
2974         case L2CAP_INFO_REQ:
2975                 err = l2cap_information_req(conn, cmd, data);
2976                 break;
2977
2978         case L2CAP_INFO_RSP:
2979                 err = l2cap_information_rsp(conn, cmd, data);
2980                 break;
2981
2982         default:
2983                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
2984                 err = -EINVAL;
2985                 break;
2986         }
2987
2988         return err;
2989 }
2990
2991 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
2992                                         struct l2cap_cmd_hdr *cmd, u8 *data)
2993 {
2994         switch (cmd->code) {
2995         case L2CAP_COMMAND_REJ:
2996                 return 0;
2997
2998         case L2CAP_CONN_PARAM_UPDATE_REQ:
2999                 return l2cap_conn_param_update_req(conn, cmd, data);
3000
3001         case L2CAP_CONN_PARAM_UPDATE_RSP:
3002                 return 0;
3003
3004         default:
3005                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
3006                 return -EINVAL;
3007         }
3008 }
3009
3010 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
3011                                                         struct sk_buff *skb)
3012 {
3013         u8 *data = skb->data;
3014         int len = skb->len;
3015         struct l2cap_cmd_hdr cmd;
3016         int err;
3017
3018         l2cap_raw_recv(conn, skb);
3019
3020         while (len >= L2CAP_CMD_HDR_SIZE) {
3021                 u16 cmd_len;
3022                 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
3023                 data += L2CAP_CMD_HDR_SIZE;
3024                 len  -= L2CAP_CMD_HDR_SIZE;
3025
3026                 cmd_len = le16_to_cpu(cmd.len);
3027
3028                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
3029
3030                 if (cmd_len > len || !cmd.ident) {
3031                         BT_DBG("corrupted command");
3032                         break;
3033                 }
3034
3035                 if (conn->hcon->type == LE_LINK)
3036                         err = l2cap_le_sig_cmd(conn, &cmd, data);
3037                 else
3038                         err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
3039
3040                 if (err) {
3041                         struct l2cap_cmd_rej_unk rej;
3042
3043                         BT_ERR("Wrong link type (%d)", err);
3044
3045                         /* FIXME: Map err to a valid reason */
3046                         rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
3047                         l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3048                 }
3049
3050                 data += cmd_len;
3051                 len  -= cmd_len;
3052         }
3053
3054         kfree_skb(skb);
3055 }
3056
3057 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3058 {
3059         u16 our_fcs, rcv_fcs;
3060         int hdr_size = L2CAP_HDR_SIZE + 2;
3061
3062         if (chan->fcs == L2CAP_FCS_CRC16) {
3063                 skb_trim(skb, skb->len - 2);
3064                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
3065                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
3066
3067                 if (our_fcs != rcv_fcs)
3068                         return -EBADMSG;
3069         }
3070         return 0;
3071 }
3072
3073 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3074 {
3075         u16 control = 0;
3076
3077         chan->frames_sent = 0;
3078
3079         control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3080
3081         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3082                 control |= L2CAP_SUPER_RCV_NOT_READY;
3083                 l2cap_send_sframe(chan, control);
3084                 set_bit(CONN_RNR_SENT, &chan->conn_state);
3085         }
3086
3087         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3088                 l2cap_retransmit_frames(chan);
3089
3090         l2cap_ertm_send(chan);
3091
3092         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3093                         chan->frames_sent == 0) {
3094                 control |= L2CAP_SUPER_RCV_READY;
3095                 l2cap_send_sframe(chan, control);
3096         }
3097 }
3098
3099 static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
3100 {
3101         struct sk_buff *next_skb;
3102         int tx_seq_offset, next_tx_seq_offset;
3103
3104         bt_cb(skb)->tx_seq = tx_seq;
3105         bt_cb(skb)->sar = sar;
3106
3107         next_skb = skb_peek(&chan->srej_q);
3108         if (!next_skb) {
3109                 __skb_queue_tail(&chan->srej_q, skb);
3110                 return 0;
3111         }
3112
3113         tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3114         if (tx_seq_offset < 0)
3115                 tx_seq_offset += 64;
3116
3117         do {
3118                 if (bt_cb(next_skb)->tx_seq == tx_seq)
3119                         return -EINVAL;
3120
3121                 next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
3122                                                 chan->buffer_seq) % 64;
3123                 if (next_tx_seq_offset < 0)
3124                         next_tx_seq_offset += 64;
3125
3126                 if (next_tx_seq_offset > tx_seq_offset) {
3127                         __skb_queue_before(&chan->srej_q, next_skb, skb);
3128                         return 0;
3129                 }
3130
3131                 if (skb_queue_is_last(&chan->srej_q, next_skb))
3132                         break;
3133
3134         } while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3135
3136         __skb_queue_tail(&chan->srej_q, skb);
3137
3138         return 0;
3139 }
3140
3141 static void append_skb_frag(struct sk_buff *skb,
3142                         struct sk_buff *new_frag, struct sk_buff **last_frag)
3143 {
3144         /* skb->len reflects data in skb as well as all fragments
3145          * skb->data_len reflects only data in fragments
3146          */
3147         if (!skb_has_frag_list(skb))
3148                 skb_shinfo(skb)->frag_list = new_frag;
3149
3150         new_frag->next = NULL;
3151
3152         (*last_frag)->next = new_frag;
3153         *last_frag = new_frag;
3154
3155         skb->len += new_frag->len;
3156         skb->data_len += new_frag->len;
3157         skb->truesize += new_frag->truesize;
3158 }
3159
3160 static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3161 {
3162         int err = -EINVAL;
3163
3164         switch (control & L2CAP_CTRL_SAR) {
3165         case L2CAP_SDU_UNSEGMENTED:
3166                 if (chan->sdu)
3167                         break;
3168
3169                 err = chan->ops->recv(chan->data, skb);
3170                 break;
3171
3172         case L2CAP_SDU_START:
3173                 if (chan->sdu)
3174                         break;
3175
3176                 chan->sdu_len = get_unaligned_le16(skb->data);
3177                 skb_pull(skb, 2);
3178
3179                 if (chan->sdu_len > chan->imtu) {
3180                         err = -EMSGSIZE;
3181                         break;
3182                 }
3183
3184                 if (skb->len >= chan->sdu_len)
3185                         break;
3186
3187                 chan->sdu = skb;
3188                 chan->sdu_last_frag = skb;
3189
3190                 skb = NULL;
3191                 err = 0;
3192                 break;
3193
3194         case L2CAP_SDU_CONTINUE:
3195                 if (!chan->sdu)
3196                         break;
3197
3198                 append_skb_frag(chan->sdu, skb,
3199                                 &chan->sdu_last_frag);
3200                 skb = NULL;
3201
3202                 if (chan->sdu->len >= chan->sdu_len)
3203                         break;
3204
3205                 err = 0;
3206                 break;
3207
3208         case L2CAP_SDU_END:
3209                 if (!chan->sdu)
3210                         break;
3211
3212                 append_skb_frag(chan->sdu, skb,
3213                                 &chan->sdu_last_frag);
3214                 skb = NULL;
3215
3216                 if (chan->sdu->len != chan->sdu_len)
3217                         break;
3218
3219                 err = chan->ops->recv(chan->data, chan->sdu);
3220
3221                 if (!err) {
3222                         /* Reassembly complete */
3223                         chan->sdu = NULL;
3224                         chan->sdu_last_frag = NULL;
3225                         chan->sdu_len = 0;
3226                 }
3227                 break;
3228         }
3229
3230         if (err) {
3231                 kfree_skb(skb);
3232                 kfree_skb(chan->sdu);
3233                 chan->sdu = NULL;
3234                 chan->sdu_last_frag = NULL;
3235                 chan->sdu_len = 0;
3236         }
3237
3238         return err;
3239 }
3240
3241 static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3242 {
3243         u16 control;
3244
3245         BT_DBG("chan %p, Enter local busy", chan);
3246
3247         set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3248
3249         control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3250         control |= L2CAP_SUPER_RCV_NOT_READY;
3251         l2cap_send_sframe(chan, control);
3252
3253         set_bit(CONN_RNR_SENT, &chan->conn_state);
3254
3255         __clear_ack_timer(chan);
3256 }
3257
3258 static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
3259 {
3260         u16 control;
3261
3262         if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3263                 goto done;
3264
3265         control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3266         control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3267         l2cap_send_sframe(chan, control);
3268         chan->retry_count = 1;
3269
3270         __clear_retrans_timer(chan);
3271         __set_monitor_timer(chan);
3272
3273         set_bit(CONN_WAIT_F, &chan->conn_state);
3274
3275 done:
3276         clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3277         clear_bit(CONN_RNR_SENT, &chan->conn_state);
3278
3279         BT_DBG("chan %p, Exit local busy", chan);
3280 }
3281
3282 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3283 {
3284         if (chan->mode == L2CAP_MODE_ERTM) {
3285                 if (busy)
3286                         l2cap_ertm_enter_local_busy(chan);
3287                 else
3288                         l2cap_ertm_exit_local_busy(chan);
3289         }
3290 }
3291
3292 static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3293 {
3294         struct sk_buff *skb;
3295         u16 control;
3296
3297         while ((skb = skb_peek(&chan->srej_q)) &&
3298                         !test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3299                 int err;
3300
3301                 if (bt_cb(skb)->tx_seq != tx_seq)
3302                         break;
3303
3304                 skb = skb_dequeue(&chan->srej_q);
3305                 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3306                 err = l2cap_reassemble_sdu(chan, skb, control);
3307
3308                 if (err < 0) {
3309                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3310                         break;
3311                 }
3312
3313                 chan->buffer_seq_srej =
3314                         (chan->buffer_seq_srej + 1) % 64;
3315                 tx_seq = (tx_seq + 1) % 64;
3316         }
3317 }
3318
3319 static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3320 {
3321         struct srej_list *l, *tmp;
3322         u16 control;
3323
3324         list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3325                 if (l->tx_seq == tx_seq) {
3326                         list_del(&l->list);
3327                         kfree(l);
3328                         return;
3329                 }
3330                 control = L2CAP_SUPER_SELECT_REJECT;
3331                 control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3332                 l2cap_send_sframe(chan, control);
3333                 list_del(&l->list);
3334                 list_add_tail(&l->list, &chan->srej_l);
3335         }
3336 }
3337
3338 static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3339 {
3340         struct srej_list *new;
3341         u16 control;
3342
3343         while (tx_seq != chan->expected_tx_seq) {
3344                 control = L2CAP_SUPER_SELECT_REJECT;
3345                 control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3346                 l2cap_send_sframe(chan, control);
3347
3348                 new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3349                 new->tx_seq = chan->expected_tx_seq;
3350                 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3351                 list_add_tail(&new->list, &chan->srej_l);
3352         }
3353         chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3354 }
3355
3356 static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3357 {
3358         u8 tx_seq = __get_txseq(rx_control);
3359         u8 req_seq = __get_reqseq(rx_control);
3360         u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3361         int tx_seq_offset, expected_tx_seq_offset;
3362         int num_to_ack = (chan->tx_win/6) + 1;
3363         int err = 0;
3364
3365         BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
3366                                                         tx_seq, rx_control);
3367
3368         if (L2CAP_CTRL_FINAL & rx_control &&
3369                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
3370                 __clear_monitor_timer(chan);
3371                 if (chan->unacked_frames > 0)
3372                         __set_retrans_timer(chan);
3373                 clear_bit(CONN_WAIT_F, &chan->conn_state);
3374         }
3375
3376         chan->expected_ack_seq = req_seq;
3377         l2cap_drop_acked_frames(chan);
3378
3379         tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3380         if (tx_seq_offset < 0)
3381                 tx_seq_offset += 64;
3382
3383         /* invalid tx_seq */
3384         if (tx_seq_offset >= chan->tx_win) {
3385                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3386                 goto drop;
3387         }
3388
3389         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
3390                 goto drop;
3391
3392         if (tx_seq == chan->expected_tx_seq)
3393                 goto expected;
3394
3395         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3396                 struct srej_list *first;
3397
3398                 first = list_first_entry(&chan->srej_l,
3399                                 struct srej_list, list);
3400                 if (tx_seq == first->tx_seq) {
3401                         l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3402                         l2cap_check_srej_gap(chan, tx_seq);
3403
3404                         list_del(&first->list);
3405                         kfree(first);
3406
3407                         if (list_empty(&chan->srej_l)) {
3408                                 chan->buffer_seq = chan->buffer_seq_srej;
3409                                 clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3410                                 l2cap_send_ack(chan);
3411                                 BT_DBG("chan %p, Exit SREJ_SENT", chan);
3412                         }
3413                 } else {
3414                         struct srej_list *l;
3415
3416                         /* duplicated tx_seq */
3417                         if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3418                                 goto drop;
3419
3420                         list_for_each_entry(l, &chan->srej_l, list) {
3421                                 if (l->tx_seq == tx_seq) {
3422                                         l2cap_resend_srejframe(chan, tx_seq);
3423                                         return 0;
3424                                 }
3425                         }
3426                         l2cap_send_srejframe(chan, tx_seq);
3427                 }
3428         } else {
3429                 expected_tx_seq_offset =
3430                         (chan->expected_tx_seq - chan->buffer_seq) % 64;
3431                 if (expected_tx_seq_offset < 0)
3432                         expected_tx_seq_offset += 64;
3433
3434                 /* duplicated tx_seq */
3435                 if (tx_seq_offset < expected_tx_seq_offset)
3436                         goto drop;
3437
3438                 set_bit(CONN_SREJ_SENT, &chan->conn_state);
3439
3440                 BT_DBG("chan %p, Enter SREJ", chan);
3441
3442                 INIT_LIST_HEAD(&chan->srej_l);
3443                 chan->buffer_seq_srej = chan->buffer_seq;
3444
3445                 __skb_queue_head_init(&chan->srej_q);
3446                 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3447
3448                 set_bit(CONN_SEND_PBIT, &chan->conn_state);
3449
3450                 l2cap_send_srejframe(chan, tx_seq);
3451
3452                 __clear_ack_timer(chan);
3453         }
3454         return 0;
3455
3456 expected:
3457         chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3458
3459         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3460                 bt_cb(skb)->tx_seq = tx_seq;
3461                 bt_cb(skb)->sar = sar;
3462                 __skb_queue_tail(&chan->srej_q, skb);
3463                 return 0;
3464         }
3465
3466         err = l2cap_reassemble_sdu(chan, skb, rx_control);
3467         chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3468         if (err < 0) {
3469                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3470                 return err;
3471         }
3472
3473         if (rx_control & L2CAP_CTRL_FINAL) {
3474                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3475                         l2cap_retransmit_frames(chan);
3476         }
3477
3478         __set_ack_timer(chan);
3479
3480         chan->num_acked = (chan->num_acked + 1) % num_to_ack;
3481         if (chan->num_acked == num_to_ack - 1)
3482                 l2cap_send_ack(chan);
3483
3484         return 0;
3485
3486 drop:
3487         kfree_skb(skb);
3488         return 0;
3489 }
3490
3491 static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3492 {
3493         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3494                                                 rx_control);
3495
3496         chan->expected_ack_seq = __get_reqseq(rx_control);
3497         l2cap_drop_acked_frames(chan);
3498
3499         if (rx_control & L2CAP_CTRL_POLL) {
3500                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3501                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3502                         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3503                                         (chan->unacked_frames > 0))
3504                                 __set_retrans_timer(chan);
3505
3506                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3507                         l2cap_send_srejtail(chan);
3508                 } else {
3509                         l2cap_send_i_or_rr_or_rnr(chan);
3510                 }
3511
3512         } else if (rx_control & L2CAP_CTRL_FINAL) {
3513                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3514
3515                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3516                         l2cap_retransmit_frames(chan);
3517
3518         } else {
3519                 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3520                                 (chan->unacked_frames > 0))
3521                         __set_retrans_timer(chan);
3522
3523                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3524                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
3525                         l2cap_send_ack(chan);
3526                 else
3527                         l2cap_ertm_send(chan);
3528         }
3529 }
3530
3531 static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3532 {
3533         u8 tx_seq = __get_reqseq(rx_control);
3534
3535         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3536
3537         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3538
3539         chan->expected_ack_seq = tx_seq;
3540         l2cap_drop_acked_frames(chan);
3541
3542         if (rx_control & L2CAP_CTRL_FINAL) {
3543                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3544                         l2cap_retransmit_frames(chan);
3545         } else {
3546                 l2cap_retransmit_frames(chan);
3547
3548                 if (test_bit(CONN_WAIT_F, &chan->conn_state))
3549                         set_bit(CONN_REJ_ACT, &chan->conn_state);
3550         }
3551 }
3552 static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3553 {
3554         u8 tx_seq = __get_reqseq(rx_control);
3555
3556         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3557
3558         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3559
3560         if (rx_control & L2CAP_CTRL_POLL) {
3561                 chan->expected_ack_seq = tx_seq;
3562                 l2cap_drop_acked_frames(chan);
3563
3564                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3565                 l2cap_retransmit_one_frame(chan, tx_seq);
3566
3567                 l2cap_ertm_send(chan);
3568
3569                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3570                         chan->srej_save_reqseq = tx_seq;
3571                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
3572                 }
3573         } else if (rx_control & L2CAP_CTRL_FINAL) {
3574                 if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
3575                                 chan->srej_save_reqseq == tx_seq)
3576                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
3577                 else
3578                         l2cap_retransmit_one_frame(chan, tx_seq);
3579         } else {
3580                 l2cap_retransmit_one_frame(chan, tx_seq);
3581                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3582                         chan->srej_save_reqseq = tx_seq;
3583                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
3584                 }
3585         }
3586 }
3587
3588 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3589 {
3590         u8 tx_seq = __get_reqseq(rx_control);
3591
3592         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3593
3594         set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3595         chan->expected_ack_seq = tx_seq;
3596         l2cap_drop_acked_frames(chan);
3597
3598         if (rx_control & L2CAP_CTRL_POLL)
3599                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3600
3601         if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3602                 __clear_retrans_timer(chan);
3603                 if (rx_control & L2CAP_CTRL_POLL)
3604                         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3605                 return;
3606         }
3607
3608         if (rx_control & L2CAP_CTRL_POLL)
3609                 l2cap_send_srejtail(chan);
3610         else
3611                 l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3612 }
3613
3614 static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3615 {
3616         BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3617
3618         if (L2CAP_CTRL_FINAL & rx_control &&
3619                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
3620                 __clear_monitor_timer(chan);
3621                 if (chan->unacked_frames > 0)
3622                         __set_retrans_timer(chan);
3623                 clear_bit(CONN_WAIT_F, &chan->conn_state);
3624         }
3625
3626         switch (rx_control & L2CAP_CTRL_SUPERVISE) {
3627         case L2CAP_SUPER_RCV_READY:
3628                 l2cap_data_channel_rrframe(chan, rx_control);
3629                 break;
3630
3631         case L2CAP_SUPER_REJECT:
3632                 l2cap_data_channel_rejframe(chan, rx_control);
3633                 break;
3634
3635         case L2CAP_SUPER_SELECT_REJECT:
3636                 l2cap_data_channel_srejframe(chan, rx_control);
3637                 break;
3638
3639         case L2CAP_SUPER_RCV_NOT_READY:
3640                 l2cap_data_channel_rnrframe(chan, rx_control);
3641                 break;
3642         }
3643
3644         kfree_skb(skb);
3645         return 0;
3646 }
3647
3648 static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
3649 {
3650         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3651         u16 control;
3652         u8 req_seq;
3653         int len, next_tx_seq_offset, req_seq_offset;
3654
3655         control = get_unaligned_le16(skb->data);
3656         skb_pull(skb, 2);
3657         len = skb->len;
3658
3659         /*
3660          * We can just drop the corrupted I-frame here.
3661          * Receiver will miss it and start proper recovery
3662          * procedures and ask retransmission.
3663          */
3664         if (l2cap_check_fcs(chan, skb))
3665                 goto drop;
3666
3667         if (__is_sar_start(control) && __is_iframe(control))
3668                 len -= 2;
3669
3670         if (chan->fcs == L2CAP_FCS_CRC16)
3671                 len -= 2;
3672
3673         if (len > chan->mps) {
3674                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3675                 goto drop;
3676         }
3677
3678         req_seq = __get_reqseq(control);
3679         req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3680         if (req_seq_offset < 0)
3681                 req_seq_offset += 64;
3682
3683         next_tx_seq_offset =
3684                 (chan->next_tx_seq - chan->expected_ack_seq) % 64;
3685         if (next_tx_seq_offset < 0)
3686                 next_tx_seq_offset += 64;
3687
3688         /* check for invalid req-seq */
3689         if (req_seq_offset > next_tx_seq_offset) {
3690                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3691                 goto drop;
3692         }
3693
3694         if (__is_iframe(control)) {
3695                 if (len < 0) {
3696                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3697                         goto drop;
3698                 }
3699
3700                 l2cap_data_channel_iframe(chan, control, skb);
3701         } else {
3702                 if (len != 0) {
3703                         BT_ERR("%d", len);
3704                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3705                         goto drop;
3706                 }
3707
3708                 l2cap_data_channel_sframe(chan, control, skb);
3709         }
3710
3711         return 0;
3712
3713 drop:
3714         kfree_skb(skb);
3715         return 0;
3716 }
3717
3718 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
3719 {
3720         struct l2cap_chan *chan;
3721         struct sock *sk = NULL;
3722         u16 control;
3723         u8 tx_seq;
3724         int len;
3725
3726         chan = l2cap_get_chan_by_scid(conn, cid);
3727         if (!chan) {
3728                 BT_DBG("unknown cid 0x%4.4x", cid);
3729                 goto drop;
3730         }
3731
3732         sk = chan->sk;
3733
3734         BT_DBG("chan %p, len %d", chan, skb->len);
3735
3736         if (chan->state != BT_CONNECTED)
3737                 goto drop;
3738
3739         switch (chan->mode) {
3740         case L2CAP_MODE_BASIC:
3741                 /* If socket recv buffers overflows we drop data here
3742                  * which is *bad* because L2CAP has to be reliable.
3743                  * But we don't have any other choice. L2CAP doesn't
3744                  * provide flow control mechanism. */
3745
3746                 if (chan->imtu < skb->len)
3747                         goto drop;
3748
3749                 if (!chan->ops->recv(chan->data, skb))
3750                         goto done;
3751                 break;
3752
3753         case L2CAP_MODE_ERTM:
3754                 if (!sock_owned_by_user(sk)) {
3755                         l2cap_ertm_data_rcv(sk, skb);
3756                 } else {
3757                         if (sk_add_backlog(sk, skb))
3758                                 goto drop;
3759                 }
3760
3761                 goto done;
3762
3763         case L2CAP_MODE_STREAMING:
3764                 control = get_unaligned_le16(skb->data);
3765                 skb_pull(skb, 2);
3766                 len = skb->len;
3767
3768                 if (l2cap_check_fcs(chan, skb))
3769                         goto drop;
3770
3771                 if (__is_sar_start(control))
3772                         len -= 2;
3773
3774                 if (chan->fcs == L2CAP_FCS_CRC16)
3775                         len -= 2;
3776
3777                 if (len > chan->mps || len < 0 || __is_sframe(control))
3778                         goto drop;
3779
3780                 tx_seq = __get_txseq(control);
3781
3782                 if (chan->expected_tx_seq != tx_seq) {
3783                         /* Frame(s) missing - must discard partial SDU */
3784                         kfree_skb(chan->sdu);
3785                         chan->sdu = NULL;
3786                         chan->sdu_last_frag = NULL;
3787                         chan->sdu_len = 0;
3788
3789                         /* TODO: Notify userland of missing data */
3790                 }
3791
3792                 chan->expected_tx_seq = (tx_seq + 1) % 64;
3793
3794                 if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
3795                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3796
3797                 goto done;
3798
3799         default:
3800                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3801                 break;
3802         }
3803
3804 drop:
3805         kfree_skb(skb);
3806
3807 done:
3808         if (sk)
3809                 bh_unlock_sock(sk);
3810
3811         return 0;
3812 }
3813
3814 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
3815 {
3816         struct sock *sk = NULL;
3817         struct l2cap_chan *chan;
3818
3819         chan = l2cap_global_chan_by_psm(0, psm, conn->src);
3820         if (!chan)
3821                 goto drop;
3822
3823         sk = chan->sk;
3824
3825         bh_lock_sock(sk);
3826
3827         BT_DBG("sk %p, len %d", sk, skb->len);
3828
3829         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3830                 goto drop;
3831
3832         if (chan->imtu < skb->len)
3833                 goto drop;
3834
3835         if (!chan->ops->recv(chan->data, skb))
3836                 goto done;
3837
3838 drop:
3839         kfree_skb(skb);
3840
3841 done:
3842         if (sk)
3843                 bh_unlock_sock(sk);
3844         return 0;
3845 }
3846
3847 static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
3848 {
3849         struct sock *sk = NULL;
3850         struct l2cap_chan *chan;
3851
3852         chan = l2cap_global_chan_by_scid(0, cid, conn->src);
3853         if (!chan)
3854                 goto drop;
3855
3856         sk = chan->sk;
3857
3858         bh_lock_sock(sk);
3859
3860         BT_DBG("sk %p, len %d", sk, skb->len);
3861
3862         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3863                 goto drop;
3864
3865         if (chan->imtu < skb->len)
3866                 goto drop;
3867
3868         if (!chan->ops->recv(chan->data, skb))
3869                 goto done;
3870
3871 drop:
3872         kfree_skb(skb);
3873
3874 done:
3875         if (sk)
3876                 bh_unlock_sock(sk);
3877         return 0;
3878 }
3879
3880 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
3881 {
3882         struct l2cap_hdr *lh = (void *) skb->data;
3883         u16 cid, len;
3884         __le16 psm;
3885
3886         skb_pull(skb, L2CAP_HDR_SIZE);
3887         cid = __le16_to_cpu(lh->cid);
3888         len = __le16_to_cpu(lh->len);
3889
3890         if (len != skb->len) {
3891                 kfree_skb(skb);
3892                 return;
3893         }
3894
3895         BT_DBG("len %d, cid 0x%4.4x", len, cid);
3896
3897         switch (cid) {
3898         case L2CAP_CID_LE_SIGNALING:
3899         case L2CAP_CID_SIGNALING:
3900                 l2cap_sig_channel(conn, skb);
3901                 break;
3902
3903         case L2CAP_CID_CONN_LESS:
3904                 psm = get_unaligned_le16(skb->data);
3905                 skb_pull(skb, 2);
3906                 l2cap_conless_channel(conn, psm, skb);
3907                 break;
3908
3909         case L2CAP_CID_LE_DATA:
3910                 l2cap_att_channel(conn, cid, skb);
3911                 break;
3912
3913         case L2CAP_CID_SMP:
3914                 if (smp_sig_channel(conn, skb))
3915                         l2cap_conn_del(conn->hcon, EACCES);
3916                 break;
3917
3918         default:
3919                 l2cap_data_channel(conn, cid, skb);
3920                 break;
3921         }
3922 }
3923
3924 /* ---- L2CAP interface with lower layer (HCI) ---- */
3925
3926 static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3927 {
3928         int exact = 0, lm1 = 0, lm2 = 0;
3929         struct l2cap_chan *c;
3930
3931         if (type != ACL_LINK)
3932                 return -EINVAL;
3933
3934         BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
3935
3936         /* Find listening sockets and check their link_mode */
3937         read_lock(&chan_list_lock);
3938         list_for_each_entry(c, &chan_list, global_l) {
3939                 struct sock *sk = c->sk;
3940
3941                 if (c->state != BT_LISTEN)
3942                         continue;
3943
3944                 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3945                         lm1 |= HCI_LM_ACCEPT;
3946                         if (c->role_switch)
3947                                 lm1 |= HCI_LM_MASTER;
3948                         exact++;
3949                 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
3950                         lm2 |= HCI_LM_ACCEPT;
3951                         if (c->role_switch)
3952                                 lm2 |= HCI_LM_MASTER;
3953                 }
3954         }
3955         read_unlock(&chan_list_lock);
3956
3957         return exact ? lm1 : lm2;
3958 }
3959
3960 static int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
3961 {
3962         struct l2cap_conn *conn;
3963
3964         BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
3965
3966         if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3967                 return -EINVAL;
3968
3969         if (!status) {
3970                 conn = l2cap_conn_add(hcon, status);
3971                 if (conn)
3972                         l2cap_conn_ready(conn);
3973         } else
3974                 l2cap_conn_del(hcon, bt_to_errno(status));
3975
3976         return 0;
3977 }
3978
3979 static int l2cap_disconn_ind(struct hci_conn *hcon)
3980 {
3981         struct l2cap_conn *conn = hcon->l2cap_data;
3982
3983         BT_DBG("hcon %p", hcon);
3984
3985         if ((hcon->type != ACL_LINK && hcon->type != LE_LINK) || !conn)
3986                 return 0x13;
3987
3988         return conn->disc_reason;
3989 }
3990
3991 static int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
3992 {
3993         BT_DBG("hcon %p reason %d", hcon, reason);
3994
3995         if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3996                 return -EINVAL;
3997
3998         l2cap_conn_del(hcon, bt_to_errno(reason));
3999
4000         return 0;
4001 }
4002
4003 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4004 {
4005         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4006                 return;
4007
4008         if (encrypt == 0x00) {
4009                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
4010                         __clear_chan_timer(chan);
4011                         __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
4012                 } else if (chan->sec_level == BT_SECURITY_HIGH)
4013                         l2cap_chan_close(chan, ECONNREFUSED);
4014         } else {
4015                 if (chan->sec_level == BT_SECURITY_MEDIUM)
4016                         __clear_chan_timer(chan);
4017         }
4018 }
4019
4020 static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
4021 {
4022         struct l2cap_conn *conn = hcon->l2cap_data;
4023         struct l2cap_chan *chan;
4024
4025         if (!conn)
4026                 return 0;
4027
4028         BT_DBG("conn %p", conn);
4029
4030         if (hcon->type == LE_LINK) {
4031                 smp_distribute_keys(conn, 0);
4032                 del_timer(&conn->security_timer);
4033         }
4034
4035         read_lock(&conn->chan_lock);
4036
4037         list_for_each_entry(chan, &conn->chan_l, list) {
4038                 struct sock *sk = chan->sk;
4039
4040                 bh_lock_sock(sk);
4041
4042                 BT_DBG("chan->scid %d", chan->scid);
4043
4044                 if (chan->scid == L2CAP_CID_LE_DATA) {
4045                         if (!status && encrypt) {
4046                                 chan->sec_level = hcon->sec_level;
4047                                 l2cap_chan_ready(sk);
4048                         }
4049
4050                         bh_unlock_sock(sk);
4051                         continue;
4052                 }
4053
4054                 if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4055                         bh_unlock_sock(sk);
4056                         continue;
4057                 }
4058
4059                 if (!status && (chan->state == BT_CONNECTED ||
4060                                                 chan->state == BT_CONFIG)) {
4061                         l2cap_check_encryption(chan, encrypt);
4062                         bh_unlock_sock(sk);
4063                         continue;
4064                 }
4065
4066                 if (chan->state == BT_CONNECT) {
4067                         if (!status) {
4068                                 struct l2cap_conn_req req;
4069                                 req.scid = cpu_to_le16(chan->scid);
4070                                 req.psm  = chan->psm;
4071
4072                                 chan->ident = l2cap_get_ident(conn);
4073                                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4074
4075                                 l2cap_send_cmd(conn, chan->ident,
4076                                         L2CAP_CONN_REQ, sizeof(req), &req);
4077                         } else {
4078                                 __clear_chan_timer(chan);
4079                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4080                         }
4081                 } else if (chan->state == BT_CONNECT2) {
4082                         struct l2cap_conn_rsp rsp;
4083                         __u16 res, stat;
4084
4085                         if (!status) {
4086                                 if (bt_sk(sk)->defer_setup) {
4087                                         struct sock *parent = bt_sk(sk)->parent;
4088                                         res = L2CAP_CR_PEND;
4089                                         stat = L2CAP_CS_AUTHOR_PEND;
4090                                         if (parent)
4091                                                 parent->sk_data_ready(parent, 0);
4092                                 } else {
4093                                         l2cap_state_change(chan, BT_CONFIG);
4094                                         res = L2CAP_CR_SUCCESS;
4095                                         stat = L2CAP_CS_NO_INFO;
4096                                 }
4097                         } else {
4098                                 l2cap_state_change(chan, BT_DISCONN);
4099                                 __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4100                                 res = L2CAP_CR_SEC_BLOCK;
4101                                 stat = L2CAP_CS_NO_INFO;
4102                         }
4103
4104                         rsp.scid   = cpu_to_le16(chan->dcid);
4105                         rsp.dcid   = cpu_to_le16(chan->scid);
4106                         rsp.result = cpu_to_le16(res);
4107                         rsp.status = cpu_to_le16(stat);
4108                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
4109                                                         sizeof(rsp), &rsp);
4110                 }
4111
4112                 bh_unlock_sock(sk);
4113         }
4114
4115         read_unlock(&conn->chan_lock);
4116
4117         return 0;
4118 }
4119
4120 static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
4121 {
4122         struct l2cap_conn *conn = hcon->l2cap_data;
4123
4124         if (!conn)
4125                 conn = l2cap_conn_add(hcon, 0);
4126
4127         if (!conn)
4128                 goto drop;
4129
4130         BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
4131
4132         if (!(flags & ACL_CONT)) {
4133                 struct l2cap_hdr *hdr;
4134                 struct l2cap_chan *chan;
4135                 u16 cid;
4136                 int len;
4137
4138                 if (conn->rx_len) {
4139                         BT_ERR("Unexpected start frame (len %d)", skb->len);
4140                         kfree_skb(conn->rx_skb);
4141                         conn->rx_skb = NULL;
4142                         conn->rx_len = 0;
4143                         l2cap_conn_unreliable(conn, ECOMM);
4144                 }
4145
4146                 /* Start fragment always begin with Basic L2CAP header */
4147                 if (skb->len < L2CAP_HDR_SIZE) {
4148                         BT_ERR("Frame is too short (len %d)", skb->len);
4149                         l2cap_conn_unreliable(conn, ECOMM);
4150                         goto drop;
4151                 }
4152
4153                 hdr = (struct l2cap_hdr *) skb->data;
4154                 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
4155                 cid = __le16_to_cpu(hdr->cid);
4156
4157                 if (len == skb->len) {
4158                         /* Complete frame received */
4159                         l2cap_recv_frame(conn, skb);
4160                         return 0;
4161                 }
4162
4163                 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
4164
4165                 if (skb->len > len) {
4166                         BT_ERR("Frame is too long (len %d, expected len %d)",
4167                                 skb->len, len);
4168                         l2cap_conn_unreliable(conn, ECOMM);
4169                         goto drop;
4170                 }
4171
4172                 chan = l2cap_get_chan_by_scid(conn, cid);
4173
4174                 if (chan && chan->sk) {
4175                         struct sock *sk = chan->sk;
4176
4177                         if (chan->imtu < len - L2CAP_HDR_SIZE) {
4178                                 BT_ERR("Frame exceeding recv MTU (len %d, "
4179                                                         "MTU %d)", len,
4180                                                         chan->imtu);
4181                                 bh_unlock_sock(sk);
4182                                 l2cap_conn_unreliable(conn, ECOMM);
4183                                 goto drop;
4184                         }
4185                         bh_unlock_sock(sk);
4186                 }
4187
4188                 /* Allocate skb for the complete frame (with header) */
4189                 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
4190                 if (!conn->rx_skb)
4191                         goto drop;
4192
4193                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4194                                                                 skb->len);
4195                 conn->rx_len = len - skb->len;
4196         } else {
4197                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
4198
4199                 if (!conn->rx_len) {
4200                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
4201                         l2cap_conn_unreliable(conn, ECOMM);
4202                         goto drop;
4203                 }
4204
4205                 if (skb->len > conn->rx_len) {
4206                         BT_ERR("Fragment is too long (len %d, expected %d)",
4207                                         skb->len, conn->rx_len);
4208                         kfree_skb(conn->rx_skb);
4209                         conn->rx_skb = NULL;
4210                         conn->rx_len = 0;
4211                         l2cap_conn_unreliable(conn, ECOMM);
4212                         goto drop;
4213                 }
4214
4215                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4216                                                                 skb->len);
4217                 conn->rx_len -= skb->len;
4218
4219                 if (!conn->rx_len) {
4220                         /* Complete frame received */
4221                         l2cap_recv_frame(conn, conn->rx_skb);
4222                         conn->rx_skb = NULL;
4223                 }
4224         }
4225
4226 drop:
4227         kfree_skb(skb);
4228         return 0;
4229 }
4230
4231 static int l2cap_debugfs_show(struct seq_file *f, void *p)
4232 {
4233         struct l2cap_chan *c;
4234
4235         read_lock_bh(&chan_list_lock);
4236
4237         list_for_each_entry(c, &chan_list, global_l) {
4238                 struct sock *sk = c->sk;
4239
4240                 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4241                                         batostr(&bt_sk(sk)->src),
4242                                         batostr(&bt_sk(sk)->dst),
4243                                         c->state, __le16_to_cpu(c->psm),
4244                                         c->scid, c->dcid, c->imtu, c->omtu,
4245                                         c->sec_level, c->mode);
4246 }
4247
4248         read_unlock_bh(&chan_list_lock);
4249
4250         return 0;
4251 }
4252
4253 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
4254 {
4255         return single_open(file, l2cap_debugfs_show, inode->i_private);
4256 }
4257
4258 static const struct file_operations l2cap_debugfs_fops = {
4259         .open           = l2cap_debugfs_open,
4260         .read           = seq_read,
4261         .llseek         = seq_lseek,
4262         .release        = single_release,
4263 };
4264
4265 static struct dentry *l2cap_debugfs;
4266
4267 static struct hci_proto l2cap_hci_proto = {
4268         .name           = "L2CAP",
4269         .id             = HCI_PROTO_L2CAP,
4270         .connect_ind    = l2cap_connect_ind,
4271         .connect_cfm    = l2cap_connect_cfm,
4272         .disconn_ind    = l2cap_disconn_ind,
4273         .disconn_cfm    = l2cap_disconn_cfm,
4274         .security_cfm   = l2cap_security_cfm,
4275         .recv_acldata   = l2cap_recv_acldata
4276 };
4277
4278 int __init l2cap_init(void)
4279 {
4280         int err;
4281
4282         err = l2cap_init_sockets();
4283         if (err < 0)
4284                 return err;
4285
4286         err = hci_register_proto(&l2cap_hci_proto);
4287         if (err < 0) {
4288                 BT_ERR("L2CAP protocol registration failed");
4289                 bt_sock_unregister(BTPROTO_L2CAP);
4290                 goto error;
4291         }
4292
4293         if (bt_debugfs) {
4294                 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
4295                                         bt_debugfs, NULL, &l2cap_debugfs_fops);
4296                 if (!l2cap_debugfs)
4297                         BT_ERR("Failed to create L2CAP debug file");
4298         }
4299
4300         return 0;
4301
4302 error:
4303         l2cap_cleanup_sockets();
4304         return err;
4305 }
4306
4307 void l2cap_exit(void)
4308 {
4309         debugfs_remove(l2cap_debugfs);
4310
4311         if (hci_unregister_proto(&l2cap_hci_proto) < 0)
4312                 BT_ERR("L2CAP protocol unregistration failed");
4313
4314         l2cap_cleanup_sockets();
4315 }
4316
4317 module_param(disable_ertm, bool, 0644);
4318 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");