Merge branch 'for-linus' of git://git.kernel.dk/linux-block
[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, HZ / 5);
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         read_lock(&conn->chan_lock);
911
912         list_for_each_entry(chan, &conn->chan_l, list) {
913                 struct sock *sk = chan->sk;
914
915                 bh_lock_sock(sk);
916
917                 if (conn->hcon->type == LE_LINK) {
918                         if (smp_conn_security(conn, chan->sec_level))
919                                 l2cap_chan_ready(sk);
920
921                 } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
922                         __clear_chan_timer(chan);
923                         l2cap_state_change(chan, BT_CONNECTED);
924                         sk->sk_state_change(sk);
925
926                 } else if (chan->state == BT_CONNECT)
927                         l2cap_do_start(chan);
928
929                 bh_unlock_sock(sk);
930         }
931
932         read_unlock(&conn->chan_lock);
933 }
934
935 /* Notify sockets that we cannot guaranty reliability anymore */
936 static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
937 {
938         struct l2cap_chan *chan;
939
940         BT_DBG("conn %p", conn);
941
942         read_lock(&conn->chan_lock);
943
944         list_for_each_entry(chan, &conn->chan_l, list) {
945                 struct sock *sk = chan->sk;
946
947                 if (chan->force_reliable)
948                         sk->sk_err = err;
949         }
950
951         read_unlock(&conn->chan_lock);
952 }
953
954 static void l2cap_info_timeout(unsigned long arg)
955 {
956         struct l2cap_conn *conn = (void *) arg;
957
958         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
959         conn->info_ident = 0;
960
961         l2cap_conn_start(conn);
962 }
963
964 static void l2cap_conn_del(struct hci_conn *hcon, int err)
965 {
966         struct l2cap_conn *conn = hcon->l2cap_data;
967         struct l2cap_chan *chan, *l;
968         struct sock *sk;
969
970         if (!conn)
971                 return;
972
973         BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
974
975         kfree_skb(conn->rx_skb);
976
977         /* Kill channels */
978         list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
979                 sk = chan->sk;
980                 bh_lock_sock(sk);
981                 l2cap_chan_del(chan, err);
982                 bh_unlock_sock(sk);
983                 chan->ops->close(chan->data);
984         }
985
986         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
987                 del_timer_sync(&conn->info_timer);
988
989         if (test_bit(HCI_CONN_ENCRYPT_PEND, &hcon->pend))
990                 del_timer(&conn->security_timer);
991
992         hcon->l2cap_data = NULL;
993         kfree(conn);
994 }
995
996 static void security_timeout(unsigned long arg)
997 {
998         struct l2cap_conn *conn = (void *) arg;
999
1000         l2cap_conn_del(conn->hcon, ETIMEDOUT);
1001 }
1002
1003 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
1004 {
1005         struct l2cap_conn *conn = hcon->l2cap_data;
1006
1007         if (conn || status)
1008                 return conn;
1009
1010         conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1011         if (!conn)
1012                 return NULL;
1013
1014         hcon->l2cap_data = conn;
1015         conn->hcon = hcon;
1016
1017         BT_DBG("hcon %p conn %p", hcon, conn);
1018
1019         if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
1020                 conn->mtu = hcon->hdev->le_mtu;
1021         else
1022                 conn->mtu = hcon->hdev->acl_mtu;
1023
1024         conn->src = &hcon->hdev->bdaddr;
1025         conn->dst = &hcon->dst;
1026
1027         conn->feat_mask = 0;
1028
1029         spin_lock_init(&conn->lock);
1030         rwlock_init(&conn->chan_lock);
1031
1032         INIT_LIST_HEAD(&conn->chan_l);
1033
1034         if (hcon->type == LE_LINK)
1035                 setup_timer(&conn->security_timer, security_timeout,
1036                                                 (unsigned long) conn);
1037         else
1038                 setup_timer(&conn->info_timer, l2cap_info_timeout,
1039                                                 (unsigned long) conn);
1040
1041         conn->disc_reason = 0x13;
1042
1043         return conn;
1044 }
1045
1046 static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
1047 {
1048         write_lock_bh(&conn->chan_lock);
1049         __l2cap_chan_add(conn, chan);
1050         write_unlock_bh(&conn->chan_lock);
1051 }
1052
1053 /* ---- Socket interface ---- */
1054
1055 /* Find socket with psm and source bdaddr.
1056  * Returns closest match.
1057  */
1058 static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, bdaddr_t *src)
1059 {
1060         struct l2cap_chan *c, *c1 = NULL;
1061
1062         read_lock(&chan_list_lock);
1063
1064         list_for_each_entry(c, &chan_list, global_l) {
1065                 struct sock *sk = c->sk;
1066
1067                 if (state && c->state != state)
1068                         continue;
1069
1070                 if (c->psm == psm) {
1071                         /* Exact match. */
1072                         if (!bacmp(&bt_sk(sk)->src, src)) {
1073                                 read_unlock(&chan_list_lock);
1074                                 return c;
1075                         }
1076
1077                         /* Closest match */
1078                         if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1079                                 c1 = c;
1080                 }
1081         }
1082
1083         read_unlock(&chan_list_lock);
1084
1085         return c1;
1086 }
1087
1088 int l2cap_chan_connect(struct l2cap_chan *chan)
1089 {
1090         struct sock *sk = chan->sk;
1091         bdaddr_t *src = &bt_sk(sk)->src;
1092         bdaddr_t *dst = &bt_sk(sk)->dst;
1093         struct l2cap_conn *conn;
1094         struct hci_conn *hcon;
1095         struct hci_dev *hdev;
1096         __u8 auth_type;
1097         int err;
1098
1099         BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
1100                                                         chan->psm);
1101
1102         hdev = hci_get_route(dst, src);
1103         if (!hdev)
1104                 return -EHOSTUNREACH;
1105
1106         hci_dev_lock_bh(hdev);
1107
1108         auth_type = l2cap_get_auth_type(chan);
1109
1110         if (chan->dcid == L2CAP_CID_LE_DATA)
1111                 hcon = hci_connect(hdev, LE_LINK, dst,
1112                                         chan->sec_level, auth_type);
1113         else
1114                 hcon = hci_connect(hdev, ACL_LINK, dst,
1115                                         chan->sec_level, auth_type);
1116
1117         if (IS_ERR(hcon)) {
1118                 err = PTR_ERR(hcon);
1119                 goto done;
1120         }
1121
1122         conn = l2cap_conn_add(hcon, 0);
1123         if (!conn) {
1124                 hci_conn_put(hcon);
1125                 err = -ENOMEM;
1126                 goto done;
1127         }
1128
1129         /* Update source addr of the socket */
1130         bacpy(src, conn->src);
1131
1132         l2cap_chan_add(conn, chan);
1133
1134         l2cap_state_change(chan, BT_CONNECT);
1135         __set_chan_timer(chan, sk->sk_sndtimeo);
1136
1137         if (hcon->state == BT_CONNECTED) {
1138                 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1139                         __clear_chan_timer(chan);
1140                         if (l2cap_check_security(chan))
1141                                 l2cap_state_change(chan, BT_CONNECTED);
1142                 } else
1143                         l2cap_do_start(chan);
1144         }
1145
1146         err = 0;
1147
1148 done:
1149         hci_dev_unlock_bh(hdev);
1150         hci_dev_put(hdev);
1151         return err;
1152 }
1153
1154 int __l2cap_wait_ack(struct sock *sk)
1155 {
1156         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1157         DECLARE_WAITQUEUE(wait, current);
1158         int err = 0;
1159         int timeo = HZ/5;
1160
1161         add_wait_queue(sk_sleep(sk), &wait);
1162         set_current_state(TASK_INTERRUPTIBLE);
1163         while (chan->unacked_frames > 0 && chan->conn) {
1164                 if (!timeo)
1165                         timeo = HZ/5;
1166
1167                 if (signal_pending(current)) {
1168                         err = sock_intr_errno(timeo);
1169                         break;
1170                 }
1171
1172                 release_sock(sk);
1173                 timeo = schedule_timeout(timeo);
1174                 lock_sock(sk);
1175                 set_current_state(TASK_INTERRUPTIBLE);
1176
1177                 err = sock_error(sk);
1178                 if (err)
1179                         break;
1180         }
1181         set_current_state(TASK_RUNNING);
1182         remove_wait_queue(sk_sleep(sk), &wait);
1183         return err;
1184 }
1185
1186 static void l2cap_monitor_timeout(unsigned long arg)
1187 {
1188         struct l2cap_chan *chan = (void *) arg;
1189         struct sock *sk = chan->sk;
1190
1191         BT_DBG("chan %p", chan);
1192
1193         bh_lock_sock(sk);
1194         if (chan->retry_count >= chan->remote_max_tx) {
1195                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1196                 bh_unlock_sock(sk);
1197                 return;
1198         }
1199
1200         chan->retry_count++;
1201         __set_monitor_timer(chan);
1202
1203         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1204         bh_unlock_sock(sk);
1205 }
1206
1207 static void l2cap_retrans_timeout(unsigned long arg)
1208 {
1209         struct l2cap_chan *chan = (void *) arg;
1210         struct sock *sk = chan->sk;
1211
1212         BT_DBG("chan %p", chan);
1213
1214         bh_lock_sock(sk);
1215         chan->retry_count = 1;
1216         __set_monitor_timer(chan);
1217
1218         set_bit(CONN_WAIT_F, &chan->conn_state);
1219
1220         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1221         bh_unlock_sock(sk);
1222 }
1223
1224 static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
1225 {
1226         struct sk_buff *skb;
1227
1228         while ((skb = skb_peek(&chan->tx_q)) &&
1229                         chan->unacked_frames) {
1230                 if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1231                         break;
1232
1233                 skb = skb_dequeue(&chan->tx_q);
1234                 kfree_skb(skb);
1235
1236                 chan->unacked_frames--;
1237         }
1238
1239         if (!chan->unacked_frames)
1240                 __clear_retrans_timer(chan);
1241 }
1242
1243 void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1244 {
1245         struct hci_conn *hcon = chan->conn->hcon;
1246         u16 flags;
1247
1248         BT_DBG("chan %p, skb %p len %d", chan, skb, skb->len);
1249
1250         if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1251                 flags = ACL_START_NO_FLUSH;
1252         else
1253                 flags = ACL_START;
1254
1255         bt_cb(skb)->force_active = chan->force_active;
1256         hci_send_acl(hcon, skb, flags);
1257 }
1258
1259 void l2cap_streaming_send(struct l2cap_chan *chan)
1260 {
1261         struct sk_buff *skb;
1262         u16 control, fcs;
1263
1264         while ((skb = skb_dequeue(&chan->tx_q))) {
1265                 control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1266                 control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1267                 put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1268
1269                 if (chan->fcs == L2CAP_FCS_CRC16) {
1270                         fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
1271                         put_unaligned_le16(fcs, skb->data + skb->len - 2);
1272                 }
1273
1274                 l2cap_do_send(chan, skb);
1275
1276                 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1277         }
1278 }
1279
1280 static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1281 {
1282         struct sk_buff *skb, *tx_skb;
1283         u16 control, fcs;
1284
1285         skb = skb_peek(&chan->tx_q);
1286         if (!skb)
1287                 return;
1288
1289         do {
1290                 if (bt_cb(skb)->tx_seq == tx_seq)
1291                         break;
1292
1293                 if (skb_queue_is_last(&chan->tx_q, skb))
1294                         return;
1295
1296         } while ((skb = skb_queue_next(&chan->tx_q, skb)));
1297
1298         if (chan->remote_max_tx &&
1299                         bt_cb(skb)->retries == chan->remote_max_tx) {
1300                 l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1301                 return;
1302         }
1303
1304         tx_skb = skb_clone(skb, GFP_ATOMIC);
1305         bt_cb(skb)->retries++;
1306         control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1307         control &= L2CAP_CTRL_SAR;
1308
1309         if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1310                 control |= L2CAP_CTRL_FINAL;
1311
1312         control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1313                         | (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1314
1315         put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1316
1317         if (chan->fcs == L2CAP_FCS_CRC16) {
1318                 fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
1319                 put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
1320         }
1321
1322         l2cap_do_send(chan, tx_skb);
1323 }
1324
1325 int l2cap_ertm_send(struct l2cap_chan *chan)
1326 {
1327         struct sk_buff *skb, *tx_skb;
1328         u16 control, fcs;
1329         int nsent = 0;
1330
1331         if (chan->state != BT_CONNECTED)
1332                 return -ENOTCONN;
1333
1334         while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1335
1336                 if (chan->remote_max_tx &&
1337                                 bt_cb(skb)->retries == chan->remote_max_tx) {
1338                         l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1339                         break;
1340                 }
1341
1342                 tx_skb = skb_clone(skb, GFP_ATOMIC);
1343
1344                 bt_cb(skb)->retries++;
1345
1346                 control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1347                 control &= L2CAP_CTRL_SAR;
1348
1349                 if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1350                         control |= L2CAP_CTRL_FINAL;
1351
1352                 control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1353                                 | (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1354                 put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);
1355
1356
1357                 if (chan->fcs == L2CAP_FCS_CRC16) {
1358                         fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
1359                         put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
1360                 }
1361
1362                 l2cap_do_send(chan, tx_skb);
1363
1364                 __set_retrans_timer(chan);
1365
1366                 bt_cb(skb)->tx_seq = chan->next_tx_seq;
1367                 chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1368
1369                 if (bt_cb(skb)->retries == 1)
1370                         chan->unacked_frames++;
1371
1372                 chan->frames_sent++;
1373
1374                 if (skb_queue_is_last(&chan->tx_q, skb))
1375                         chan->tx_send_head = NULL;
1376                 else
1377                         chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1378
1379                 nsent++;
1380         }
1381
1382         return nsent;
1383 }
1384
1385 static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1386 {
1387         int ret;
1388
1389         if (!skb_queue_empty(&chan->tx_q))
1390                 chan->tx_send_head = chan->tx_q.next;
1391
1392         chan->next_tx_seq = chan->expected_ack_seq;
1393         ret = l2cap_ertm_send(chan);
1394         return ret;
1395 }
1396
1397 static void l2cap_send_ack(struct l2cap_chan *chan)
1398 {
1399         u16 control = 0;
1400
1401         control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1402
1403         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1404                 control |= L2CAP_SUPER_RCV_NOT_READY;
1405                 set_bit(CONN_RNR_SENT, &chan->conn_state);
1406                 l2cap_send_sframe(chan, control);
1407                 return;
1408         }
1409
1410         if (l2cap_ertm_send(chan) > 0)
1411                 return;
1412
1413         control |= L2CAP_SUPER_RCV_READY;
1414         l2cap_send_sframe(chan, control);
1415 }
1416
1417 static void l2cap_send_srejtail(struct l2cap_chan *chan)
1418 {
1419         struct srej_list *tail;
1420         u16 control;
1421
1422         control = L2CAP_SUPER_SELECT_REJECT;
1423         control |= L2CAP_CTRL_FINAL;
1424
1425         tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1426         control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1427
1428         l2cap_send_sframe(chan, control);
1429 }
1430
1431 static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
1432 {
1433         struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1434         struct sk_buff **frag;
1435         int err, sent = 0;
1436
1437         if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1438                 return -EFAULT;
1439
1440         sent += count;
1441         len  -= count;
1442
1443         /* Continuation fragments (no L2CAP header) */
1444         frag = &skb_shinfo(skb)->frag_list;
1445         while (len) {
1446                 count = min_t(unsigned int, conn->mtu, len);
1447
1448                 *frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
1449                 if (!*frag)
1450                         return err;
1451                 if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
1452                         return -EFAULT;
1453
1454                 sent += count;
1455                 len  -= count;
1456
1457                 frag = &(*frag)->next;
1458         }
1459
1460         return sent;
1461 }
1462
1463 struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1464 {
1465         struct sock *sk = chan->sk;
1466         struct l2cap_conn *conn = chan->conn;
1467         struct sk_buff *skb;
1468         int err, count, hlen = L2CAP_HDR_SIZE + 2;
1469         struct l2cap_hdr *lh;
1470
1471         BT_DBG("sk %p len %d", sk, (int)len);
1472
1473         count = min_t(unsigned int, (conn->mtu - hlen), len);
1474         skb = bt_skb_send_alloc(sk, count + hlen,
1475                         msg->msg_flags & MSG_DONTWAIT, &err);
1476         if (!skb)
1477                 return ERR_PTR(err);
1478
1479         /* Create L2CAP header */
1480         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1481         lh->cid = cpu_to_le16(chan->dcid);
1482         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1483         put_unaligned_le16(chan->psm, skb_put(skb, 2));
1484
1485         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1486         if (unlikely(err < 0)) {
1487                 kfree_skb(skb);
1488                 return ERR_PTR(err);
1489         }
1490         return skb;
1491 }
1492
1493 struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1494 {
1495         struct sock *sk = chan->sk;
1496         struct l2cap_conn *conn = chan->conn;
1497         struct sk_buff *skb;
1498         int err, count, hlen = L2CAP_HDR_SIZE;
1499         struct l2cap_hdr *lh;
1500
1501         BT_DBG("sk %p len %d", sk, (int)len);
1502
1503         count = min_t(unsigned int, (conn->mtu - hlen), len);
1504         skb = bt_skb_send_alloc(sk, count + hlen,
1505                         msg->msg_flags & MSG_DONTWAIT, &err);
1506         if (!skb)
1507                 return ERR_PTR(err);
1508
1509         /* Create L2CAP header */
1510         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1511         lh->cid = cpu_to_le16(chan->dcid);
1512         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1513
1514         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1515         if (unlikely(err < 0)) {
1516                 kfree_skb(skb);
1517                 return ERR_PTR(err);
1518         }
1519         return skb;
1520 }
1521
1522 struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1523 {
1524         struct sock *sk = chan->sk;
1525         struct l2cap_conn *conn = chan->conn;
1526         struct sk_buff *skb;
1527         int err, count, hlen = L2CAP_HDR_SIZE + 2;
1528         struct l2cap_hdr *lh;
1529
1530         BT_DBG("sk %p len %d", sk, (int)len);
1531
1532         if (!conn)
1533                 return ERR_PTR(-ENOTCONN);
1534
1535         if (sdulen)
1536                 hlen += 2;
1537
1538         if (chan->fcs == L2CAP_FCS_CRC16)
1539                 hlen += 2;
1540
1541         count = min_t(unsigned int, (conn->mtu - hlen), len);
1542         skb = bt_skb_send_alloc(sk, count + hlen,
1543                         msg->msg_flags & MSG_DONTWAIT, &err);
1544         if (!skb)
1545                 return ERR_PTR(err);
1546
1547         /* Create L2CAP header */
1548         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1549         lh->cid = cpu_to_le16(chan->dcid);
1550         lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1551         put_unaligned_le16(control, skb_put(skb, 2));
1552         if (sdulen)
1553                 put_unaligned_le16(sdulen, skb_put(skb, 2));
1554
1555         err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
1556         if (unlikely(err < 0)) {
1557                 kfree_skb(skb);
1558                 return ERR_PTR(err);
1559         }
1560
1561         if (chan->fcs == L2CAP_FCS_CRC16)
1562                 put_unaligned_le16(0, skb_put(skb, 2));
1563
1564         bt_cb(skb)->retries = 0;
1565         return skb;
1566 }
1567
1568 int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1569 {
1570         struct sk_buff *skb;
1571         struct sk_buff_head sar_queue;
1572         u16 control;
1573         size_t size = 0;
1574
1575         skb_queue_head_init(&sar_queue);
1576         control = L2CAP_SDU_START;
1577         skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1578         if (IS_ERR(skb))
1579                 return PTR_ERR(skb);
1580
1581         __skb_queue_tail(&sar_queue, skb);
1582         len -= chan->remote_mps;
1583         size += chan->remote_mps;
1584
1585         while (len > 0) {
1586                 size_t buflen;
1587
1588                 if (len > chan->remote_mps) {
1589                         control = L2CAP_SDU_CONTINUE;
1590                         buflen = chan->remote_mps;
1591                 } else {
1592                         control = L2CAP_SDU_END;
1593                         buflen = len;
1594                 }
1595
1596                 skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1597                 if (IS_ERR(skb)) {
1598                         skb_queue_purge(&sar_queue);
1599                         return PTR_ERR(skb);
1600                 }
1601
1602                 __skb_queue_tail(&sar_queue, skb);
1603                 len -= buflen;
1604                 size += buflen;
1605         }
1606         skb_queue_splice_tail(&sar_queue, &chan->tx_q);
1607         if (chan->tx_send_head == NULL)
1608                 chan->tx_send_head = sar_queue.next;
1609
1610         return size;
1611 }
1612
1613 int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1614 {
1615         struct sk_buff *skb;
1616         u16 control;
1617         int err;
1618
1619         /* Connectionless channel */
1620         if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1621                 skb = l2cap_create_connless_pdu(chan, msg, len);
1622                 if (IS_ERR(skb))
1623                         return PTR_ERR(skb);
1624
1625                 l2cap_do_send(chan, skb);
1626                 return len;
1627         }
1628
1629         switch (chan->mode) {
1630         case L2CAP_MODE_BASIC:
1631                 /* Check outgoing MTU */
1632                 if (len > chan->omtu)
1633                         return -EMSGSIZE;
1634
1635                 /* Create a basic PDU */
1636                 skb = l2cap_create_basic_pdu(chan, msg, len);
1637                 if (IS_ERR(skb))
1638                         return PTR_ERR(skb);
1639
1640                 l2cap_do_send(chan, skb);
1641                 err = len;
1642                 break;
1643
1644         case L2CAP_MODE_ERTM:
1645         case L2CAP_MODE_STREAMING:
1646                 /* Entire SDU fits into one PDU */
1647                 if (len <= chan->remote_mps) {
1648                         control = L2CAP_SDU_UNSEGMENTED;
1649                         skb = l2cap_create_iframe_pdu(chan, msg, len, control,
1650                                                                         0);
1651                         if (IS_ERR(skb))
1652                                 return PTR_ERR(skb);
1653
1654                         __skb_queue_tail(&chan->tx_q, skb);
1655
1656                         if (chan->tx_send_head == NULL)
1657                                 chan->tx_send_head = skb;
1658
1659                 } else {
1660                         /* Segment SDU into multiples PDUs */
1661                         err = l2cap_sar_segment_sdu(chan, msg, len);
1662                         if (err < 0)
1663                                 return err;
1664                 }
1665
1666                 if (chan->mode == L2CAP_MODE_STREAMING) {
1667                         l2cap_streaming_send(chan);
1668                         err = len;
1669                         break;
1670                 }
1671
1672                 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
1673                                 test_bit(CONN_WAIT_F, &chan->conn_state)) {
1674                         err = len;
1675                         break;
1676                 }
1677
1678                 err = l2cap_ertm_send(chan);
1679                 if (err >= 0)
1680                         err = len;
1681
1682                 break;
1683
1684         default:
1685                 BT_DBG("bad state %1.1x", chan->mode);
1686                 err = -EBADFD;
1687         }
1688
1689         return err;
1690 }
1691
1692 /* Copy frame to all raw sockets on that connection */
1693 static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
1694 {
1695         struct sk_buff *nskb;
1696         struct l2cap_chan *chan;
1697
1698         BT_DBG("conn %p", conn);
1699
1700         read_lock(&conn->chan_lock);
1701         list_for_each_entry(chan, &conn->chan_l, list) {
1702                 struct sock *sk = chan->sk;
1703                 if (chan->chan_type != L2CAP_CHAN_RAW)
1704                         continue;
1705
1706                 /* Don't send frame to the socket it came from */
1707                 if (skb->sk == sk)
1708                         continue;
1709                 nskb = skb_clone(skb, GFP_ATOMIC);
1710                 if (!nskb)
1711                         continue;
1712
1713                 if (chan->ops->recv(chan->data, nskb))
1714                         kfree_skb(nskb);
1715         }
1716         read_unlock(&conn->chan_lock);
1717 }
1718
1719 /* ---- L2CAP signalling commands ---- */
1720 static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
1721                                 u8 code, u8 ident, u16 dlen, void *data)
1722 {
1723         struct sk_buff *skb, **frag;
1724         struct l2cap_cmd_hdr *cmd;
1725         struct l2cap_hdr *lh;
1726         int len, count;
1727
1728         BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
1729                         conn, code, ident, dlen);
1730
1731         len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
1732         count = min_t(unsigned int, conn->mtu, len);
1733
1734         skb = bt_skb_alloc(count, GFP_ATOMIC);
1735         if (!skb)
1736                 return NULL;
1737
1738         lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1739         lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1740
1741         if (conn->hcon->type == LE_LINK)
1742                 lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
1743         else
1744                 lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
1745
1746         cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
1747         cmd->code  = code;
1748         cmd->ident = ident;
1749         cmd->len   = cpu_to_le16(dlen);
1750
1751         if (dlen) {
1752                 count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
1753                 memcpy(skb_put(skb, count), data, count);
1754                 data += count;
1755         }
1756
1757         len -= skb->len;
1758
1759         /* Continuation fragments (no L2CAP header) */
1760         frag = &skb_shinfo(skb)->frag_list;
1761         while (len) {
1762                 count = min_t(unsigned int, conn->mtu, len);
1763
1764                 *frag = bt_skb_alloc(count, GFP_ATOMIC);
1765                 if (!*frag)
1766                         goto fail;
1767
1768                 memcpy(skb_put(*frag, count), data, count);
1769
1770                 len  -= count;
1771                 data += count;
1772
1773                 frag = &(*frag)->next;
1774         }
1775
1776         return skb;
1777
1778 fail:
1779         kfree_skb(skb);
1780         return NULL;
1781 }
1782
1783 static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
1784 {
1785         struct l2cap_conf_opt *opt = *ptr;
1786         int len;
1787
1788         len = L2CAP_CONF_OPT_SIZE + opt->len;
1789         *ptr += len;
1790
1791         *type = opt->type;
1792         *olen = opt->len;
1793
1794         switch (opt->len) {
1795         case 1:
1796                 *val = *((u8 *) opt->val);
1797                 break;
1798
1799         case 2:
1800                 *val = get_unaligned_le16(opt->val);
1801                 break;
1802
1803         case 4:
1804                 *val = get_unaligned_le32(opt->val);
1805                 break;
1806
1807         default:
1808                 *val = (unsigned long) opt->val;
1809                 break;
1810         }
1811
1812         BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
1813         return len;
1814 }
1815
1816 static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
1817 {
1818         struct l2cap_conf_opt *opt = *ptr;
1819
1820         BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);
1821
1822         opt->type = type;
1823         opt->len  = len;
1824
1825         switch (len) {
1826         case 1:
1827                 *((u8 *) opt->val)  = val;
1828                 break;
1829
1830         case 2:
1831                 put_unaligned_le16(val, opt->val);
1832                 break;
1833
1834         case 4:
1835                 put_unaligned_le32(val, opt->val);
1836                 break;
1837
1838         default:
1839                 memcpy(opt->val, (void *) val, len);
1840                 break;
1841         }
1842
1843         *ptr += L2CAP_CONF_OPT_SIZE + len;
1844 }
1845
1846 static void l2cap_ack_timeout(unsigned long arg)
1847 {
1848         struct l2cap_chan *chan = (void *) arg;
1849
1850         bh_lock_sock(chan->sk);
1851         l2cap_send_ack(chan);
1852         bh_unlock_sock(chan->sk);
1853 }
1854
1855 static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1856 {
1857         struct sock *sk = chan->sk;
1858
1859         chan->expected_ack_seq = 0;
1860         chan->unacked_frames = 0;
1861         chan->buffer_seq = 0;
1862         chan->num_acked = 0;
1863         chan->frames_sent = 0;
1864
1865         setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
1866                                                         (unsigned long) chan);
1867         setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
1868                                                         (unsigned long) chan);
1869         setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1870
1871         skb_queue_head_init(&chan->srej_q);
1872
1873         INIT_LIST_HEAD(&chan->srej_l);
1874
1875
1876         sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1877 }
1878
1879 static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
1880 {
1881         switch (mode) {
1882         case L2CAP_MODE_STREAMING:
1883         case L2CAP_MODE_ERTM:
1884                 if (l2cap_mode_supported(mode, remote_feat_mask))
1885                         return mode;
1886                 /* fall through */
1887         default:
1888                 return L2CAP_MODE_BASIC;
1889         }
1890 }
1891
1892 static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
1893 {
1894         struct l2cap_conf_req *req = data;
1895         struct l2cap_conf_rfc rfc = { .mode = chan->mode };
1896         void *ptr = req->data;
1897
1898         BT_DBG("chan %p", chan);
1899
1900         if (chan->num_conf_req || chan->num_conf_rsp)
1901                 goto done;
1902
1903         switch (chan->mode) {
1904         case L2CAP_MODE_STREAMING:
1905         case L2CAP_MODE_ERTM:
1906                 if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
1907                         break;
1908
1909                 /* fall through */
1910         default:
1911                 chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1912                 break;
1913         }
1914
1915 done:
1916         if (chan->imtu != L2CAP_DEFAULT_MTU)
1917                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1918
1919         switch (chan->mode) {
1920         case L2CAP_MODE_BASIC:
1921                 if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
1922                                 !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1923                         break;
1924
1925                 rfc.mode            = L2CAP_MODE_BASIC;
1926                 rfc.txwin_size      = 0;
1927                 rfc.max_transmit    = 0;
1928                 rfc.retrans_timeout = 0;
1929                 rfc.monitor_timeout = 0;
1930                 rfc.max_pdu_size    = 0;
1931
1932                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1933                                                         (unsigned long) &rfc);
1934                 break;
1935
1936         case L2CAP_MODE_ERTM:
1937                 rfc.mode            = L2CAP_MODE_ERTM;
1938                 rfc.txwin_size      = chan->tx_win;
1939                 rfc.max_transmit    = chan->max_tx;
1940                 rfc.retrans_timeout = 0;
1941                 rfc.monitor_timeout = 0;
1942                 rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1943                 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1944                         rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1945
1946                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1947                                                         (unsigned long) &rfc);
1948
1949                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1950                         break;
1951
1952                 if (chan->fcs == L2CAP_FCS_NONE ||
1953                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1954                         chan->fcs = L2CAP_FCS_NONE;
1955                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1956                 }
1957                 break;
1958
1959         case L2CAP_MODE_STREAMING:
1960                 rfc.mode            = L2CAP_MODE_STREAMING;
1961                 rfc.txwin_size      = 0;
1962                 rfc.max_transmit    = 0;
1963                 rfc.retrans_timeout = 0;
1964                 rfc.monitor_timeout = 0;
1965                 rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1966                 if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
1967                         rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1968
1969                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
1970                                                         (unsigned long) &rfc);
1971
1972                 if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1973                         break;
1974
1975                 if (chan->fcs == L2CAP_FCS_NONE ||
1976                                 test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
1977                         chan->fcs = L2CAP_FCS_NONE;
1978                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1979                 }
1980                 break;
1981         }
1982
1983         req->dcid  = cpu_to_le16(chan->dcid);
1984         req->flags = cpu_to_le16(0);
1985
1986         return ptr - data;
1987 }
1988
1989 static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
1990 {
1991         struct l2cap_conf_rsp *rsp = data;
1992         void *ptr = rsp->data;
1993         void *req = chan->conf_req;
1994         int len = chan->conf_len;
1995         int type, hint, olen;
1996         unsigned long val;
1997         struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1998         u16 mtu = L2CAP_DEFAULT_MTU;
1999         u16 result = L2CAP_CONF_SUCCESS;
2000
2001         BT_DBG("chan %p", chan);
2002
2003         while (len >= L2CAP_CONF_OPT_SIZE) {
2004                 len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
2005
2006                 hint  = type & L2CAP_CONF_HINT;
2007                 type &= L2CAP_CONF_MASK;
2008
2009                 switch (type) {
2010                 case L2CAP_CONF_MTU:
2011                         mtu = val;
2012                         break;
2013
2014                 case L2CAP_CONF_FLUSH_TO:
2015                         chan->flush_to = val;
2016                         break;
2017
2018                 case L2CAP_CONF_QOS:
2019                         break;
2020
2021                 case L2CAP_CONF_RFC:
2022                         if (olen == sizeof(rfc))
2023                                 memcpy(&rfc, (void *) val, olen);
2024                         break;
2025
2026                 case L2CAP_CONF_FCS:
2027                         if (val == L2CAP_FCS_NONE)
2028                                 set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2029
2030                         break;
2031
2032                 default:
2033                         if (hint)
2034                                 break;
2035
2036                         result = L2CAP_CONF_UNKNOWN;
2037                         *((u8 *) ptr++) = type;
2038                         break;
2039                 }
2040         }
2041
2042         if (chan->num_conf_rsp || chan->num_conf_req > 1)
2043                 goto done;
2044
2045         switch (chan->mode) {
2046         case L2CAP_MODE_STREAMING:
2047         case L2CAP_MODE_ERTM:
2048                 if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2049                         chan->mode = l2cap_select_mode(rfc.mode,
2050                                         chan->conn->feat_mask);
2051                         break;
2052                 }
2053
2054                 if (chan->mode != rfc.mode)
2055                         return -ECONNREFUSED;
2056
2057                 break;
2058         }
2059
2060 done:
2061         if (chan->mode != rfc.mode) {
2062                 result = L2CAP_CONF_UNACCEPT;
2063                 rfc.mode = chan->mode;
2064
2065                 if (chan->num_conf_rsp == 1)
2066                         return -ECONNREFUSED;
2067
2068                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2069                                         sizeof(rfc), (unsigned long) &rfc);
2070         }
2071
2072
2073         if (result == L2CAP_CONF_SUCCESS) {
2074                 /* Configure output options and let the other side know
2075                  * which ones we don't like. */
2076
2077                 if (mtu < L2CAP_DEFAULT_MIN_MTU)
2078                         result = L2CAP_CONF_UNACCEPT;
2079                 else {
2080                         chan->omtu = mtu;
2081                         set_bit(CONF_MTU_DONE, &chan->conf_state);
2082                 }
2083                 l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2084
2085                 switch (rfc.mode) {
2086                 case L2CAP_MODE_BASIC:
2087                         chan->fcs = L2CAP_FCS_NONE;
2088                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2089                         break;
2090
2091                 case L2CAP_MODE_ERTM:
2092                         chan->remote_tx_win = rfc.txwin_size;
2093                         chan->remote_max_tx = rfc.max_transmit;
2094
2095                         if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2096                                 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2097
2098                         chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2099
2100                         rfc.retrans_timeout =
2101                                 le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
2102                         rfc.monitor_timeout =
2103                                 le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2104
2105                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2106
2107                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2108                                         sizeof(rfc), (unsigned long) &rfc);
2109
2110                         break;
2111
2112                 case L2CAP_MODE_STREAMING:
2113                         if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
2114                                 rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2115
2116                         chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2117
2118                         set_bit(CONF_MODE_DONE, &chan->conf_state);
2119
2120                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2121                                         sizeof(rfc), (unsigned long) &rfc);
2122
2123                         break;
2124
2125                 default:
2126                         result = L2CAP_CONF_UNACCEPT;
2127
2128                         memset(&rfc, 0, sizeof(rfc));
2129                         rfc.mode = chan->mode;
2130                 }
2131
2132                 if (result == L2CAP_CONF_SUCCESS)
2133                         set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2134         }
2135         rsp->scid   = cpu_to_le16(chan->dcid);
2136         rsp->result = cpu_to_le16(result);
2137         rsp->flags  = cpu_to_le16(0x0000);
2138
2139         return ptr - data;
2140 }
2141
2142 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2143 {
2144         struct l2cap_conf_req *req = data;
2145         void *ptr = req->data;
2146         int type, olen;
2147         unsigned long val;
2148         struct l2cap_conf_rfc rfc;
2149
2150         BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2151
2152         while (len >= L2CAP_CONF_OPT_SIZE) {
2153                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2154
2155                 switch (type) {
2156                 case L2CAP_CONF_MTU:
2157                         if (val < L2CAP_DEFAULT_MIN_MTU) {
2158                                 *result = L2CAP_CONF_UNACCEPT;
2159                                 chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2160                         } else
2161                                 chan->imtu = val;
2162                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2163                         break;
2164
2165                 case L2CAP_CONF_FLUSH_TO:
2166                         chan->flush_to = val;
2167                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2168                                                         2, chan->flush_to);
2169                         break;
2170
2171                 case L2CAP_CONF_RFC:
2172                         if (olen == sizeof(rfc))
2173                                 memcpy(&rfc, (void *)val, olen);
2174
2175                         if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2176                                                         rfc.mode != chan->mode)
2177                                 return -ECONNREFUSED;
2178
2179                         chan->fcs = 0;
2180
2181                         l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
2182                                         sizeof(rfc), (unsigned long) &rfc);
2183                         break;
2184                 }
2185         }
2186
2187         if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2188                 return -ECONNREFUSED;
2189
2190         chan->mode = rfc.mode;
2191
2192         if (*result == L2CAP_CONF_SUCCESS) {
2193                 switch (rfc.mode) {
2194                 case L2CAP_MODE_ERTM:
2195                         chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2196                         chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2197                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2198                         break;
2199                 case L2CAP_MODE_STREAMING:
2200                         chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2201                 }
2202         }
2203
2204         req->dcid   = cpu_to_le16(chan->dcid);
2205         req->flags  = cpu_to_le16(0x0000);
2206
2207         return ptr - data;
2208 }
2209
2210 static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
2211 {
2212         struct l2cap_conf_rsp *rsp = data;
2213         void *ptr = rsp->data;
2214
2215         BT_DBG("chan %p", chan);
2216
2217         rsp->scid   = cpu_to_le16(chan->dcid);
2218         rsp->result = cpu_to_le16(result);
2219         rsp->flags  = cpu_to_le16(flags);
2220
2221         return ptr - data;
2222 }
2223
2224 void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2225 {
2226         struct l2cap_conn_rsp rsp;
2227         struct l2cap_conn *conn = chan->conn;
2228         u8 buf[128];
2229
2230         rsp.scid   = cpu_to_le16(chan->dcid);
2231         rsp.dcid   = cpu_to_le16(chan->scid);
2232         rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
2233         rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
2234         l2cap_send_cmd(conn, chan->ident,
2235                                 L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2236
2237         if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2238                 return;
2239
2240         l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2241                         l2cap_build_conf_req(chan, buf), buf);
2242         chan->num_conf_req++;
2243 }
2244
2245 static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2246 {
2247         int type, olen;
2248         unsigned long val;
2249         struct l2cap_conf_rfc rfc;
2250
2251         BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2252
2253         if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2254                 return;
2255
2256         while (len >= L2CAP_CONF_OPT_SIZE) {
2257                 len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
2258
2259                 switch (type) {
2260                 case L2CAP_CONF_RFC:
2261                         if (olen == sizeof(rfc))
2262                                 memcpy(&rfc, (void *)val, olen);
2263                         goto done;
2264                 }
2265         }
2266
2267 done:
2268         switch (rfc.mode) {
2269         case L2CAP_MODE_ERTM:
2270                 chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
2271                 chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2272                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2273                 break;
2274         case L2CAP_MODE_STREAMING:
2275                 chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2276         }
2277 }
2278
2279 static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2280 {
2281         struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2282
2283         if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2284                 return 0;
2285
2286         if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
2287                                         cmd->ident == conn->info_ident) {
2288                 del_timer(&conn->info_timer);
2289
2290                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2291                 conn->info_ident = 0;
2292
2293                 l2cap_conn_start(conn);
2294         }
2295
2296         return 0;
2297 }
2298
2299 static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2300 {
2301         struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
2302         struct l2cap_conn_rsp rsp;
2303         struct l2cap_chan *chan = NULL, *pchan;
2304         struct sock *parent, *sk = NULL;
2305         int result, status = L2CAP_CS_NO_INFO;
2306
2307         u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2308         __le16 psm = req->psm;
2309
2310         BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);
2311
2312         /* Check if we have socket listening on psm */
2313         pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
2314         if (!pchan) {
2315                 result = L2CAP_CR_BAD_PSM;
2316                 goto sendresp;
2317         }
2318
2319         parent = pchan->sk;
2320
2321         bh_lock_sock(parent);
2322
2323         /* Check if the ACL is secure enough (if not SDP) */
2324         if (psm != cpu_to_le16(0x0001) &&
2325                                 !hci_conn_check_link_mode(conn->hcon)) {
2326                 conn->disc_reason = 0x05;
2327                 result = L2CAP_CR_SEC_BLOCK;
2328                 goto response;
2329         }
2330
2331         result = L2CAP_CR_NO_MEM;
2332
2333         /* Check for backlog size */
2334         if (sk_acceptq_is_full(parent)) {
2335                 BT_DBG("backlog full %d", parent->sk_ack_backlog);
2336                 goto response;
2337         }
2338
2339         chan = pchan->ops->new_connection(pchan->data);
2340         if (!chan)
2341                 goto response;
2342
2343         sk = chan->sk;
2344
2345         write_lock_bh(&conn->chan_lock);
2346
2347         /* Check if we already have channel with that dcid */
2348         if (__l2cap_get_chan_by_dcid(conn, scid)) {
2349                 write_unlock_bh(&conn->chan_lock);
2350                 sock_set_flag(sk, SOCK_ZAPPED);
2351                 chan->ops->close(chan->data);
2352                 goto response;
2353         }
2354
2355         hci_conn_hold(conn->hcon);
2356
2357         bacpy(&bt_sk(sk)->src, conn->src);
2358         bacpy(&bt_sk(sk)->dst, conn->dst);
2359         chan->psm  = psm;
2360         chan->dcid = scid;
2361
2362         bt_accept_enqueue(parent, sk);
2363
2364         __l2cap_chan_add(conn, chan);
2365
2366         dcid = chan->scid;
2367
2368         __set_chan_timer(chan, sk->sk_sndtimeo);
2369
2370         chan->ident = cmd->ident;
2371
2372         if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2373                 if (l2cap_check_security(chan)) {
2374                         if (bt_sk(sk)->defer_setup) {
2375                                 l2cap_state_change(chan, BT_CONNECT2);
2376                                 result = L2CAP_CR_PEND;
2377                                 status = L2CAP_CS_AUTHOR_PEND;
2378                                 parent->sk_data_ready(parent, 0);
2379                         } else {
2380                                 l2cap_state_change(chan, BT_CONFIG);
2381                                 result = L2CAP_CR_SUCCESS;
2382                                 status = L2CAP_CS_NO_INFO;
2383                         }
2384                 } else {
2385                         l2cap_state_change(chan, BT_CONNECT2);
2386                         result = L2CAP_CR_PEND;
2387                         status = L2CAP_CS_AUTHEN_PEND;
2388                 }
2389         } else {
2390                 l2cap_state_change(chan, BT_CONNECT2);
2391                 result = L2CAP_CR_PEND;
2392                 status = L2CAP_CS_NO_INFO;
2393         }
2394
2395         write_unlock_bh(&conn->chan_lock);
2396
2397 response:
2398         bh_unlock_sock(parent);
2399
2400 sendresp:
2401         rsp.scid   = cpu_to_le16(scid);
2402         rsp.dcid   = cpu_to_le16(dcid);
2403         rsp.result = cpu_to_le16(result);
2404         rsp.status = cpu_to_le16(status);
2405         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2406
2407         if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
2408                 struct l2cap_info_req info;
2409                 info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2410
2411                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
2412                 conn->info_ident = l2cap_get_ident(conn);
2413
2414                 mod_timer(&conn->info_timer, jiffies +
2415                                         msecs_to_jiffies(L2CAP_INFO_TIMEOUT));
2416
2417                 l2cap_send_cmd(conn, conn->info_ident,
2418                                         L2CAP_INFO_REQ, sizeof(info), &info);
2419         }
2420
2421         if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2422                                 result == L2CAP_CR_SUCCESS) {
2423                 u8 buf[128];
2424                 set_bit(CONF_REQ_SENT, &chan->conf_state);
2425                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2426                                         l2cap_build_conf_req(chan, buf), buf);
2427                 chan->num_conf_req++;
2428         }
2429
2430         return 0;
2431 }
2432
2433 static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2434 {
2435         struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
2436         u16 scid, dcid, result, status;
2437         struct l2cap_chan *chan;
2438         struct sock *sk;
2439         u8 req[128];
2440
2441         scid   = __le16_to_cpu(rsp->scid);
2442         dcid   = __le16_to_cpu(rsp->dcid);
2443         result = __le16_to_cpu(rsp->result);
2444         status = __le16_to_cpu(rsp->status);
2445
2446         BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);
2447
2448         if (scid) {
2449                 chan = l2cap_get_chan_by_scid(conn, scid);
2450                 if (!chan)
2451                         return -EFAULT;
2452         } else {
2453                 chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2454                 if (!chan)
2455                         return -EFAULT;
2456         }
2457
2458         sk = chan->sk;
2459
2460         switch (result) {
2461         case L2CAP_CR_SUCCESS:
2462                 l2cap_state_change(chan, BT_CONFIG);
2463                 chan->ident = 0;
2464                 chan->dcid = dcid;
2465                 clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2466
2467                 if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2468                         break;
2469
2470                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2471                                         l2cap_build_conf_req(chan, req), req);
2472                 chan->num_conf_req++;
2473                 break;
2474
2475         case L2CAP_CR_PEND:
2476                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
2477                 break;
2478
2479         default:
2480                 /* don't delete l2cap channel if sk is owned by user */
2481                 if (sock_owned_by_user(sk)) {
2482                         l2cap_state_change(chan, BT_DISCONN);
2483                         __clear_chan_timer(chan);
2484                         __set_chan_timer(chan, HZ / 5);
2485                         break;
2486                 }
2487
2488                 l2cap_chan_del(chan, ECONNREFUSED);
2489                 break;
2490         }
2491
2492         bh_unlock_sock(sk);
2493         return 0;
2494 }
2495
2496 static inline void set_default_fcs(struct l2cap_chan *chan)
2497 {
2498         /* FCS is enabled only in ERTM or streaming mode, if one or both
2499          * sides request it.
2500          */
2501         if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2502                 chan->fcs = L2CAP_FCS_NONE;
2503         else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2504                 chan->fcs = L2CAP_FCS_CRC16;
2505 }
2506
2507 static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2508 {
2509         struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
2510         u16 dcid, flags;
2511         u8 rsp[64];
2512         struct l2cap_chan *chan;
2513         struct sock *sk;
2514         int len;
2515
2516         dcid  = __le16_to_cpu(req->dcid);
2517         flags = __le16_to_cpu(req->flags);
2518
2519         BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
2520
2521         chan = l2cap_get_chan_by_scid(conn, dcid);
2522         if (!chan)
2523                 return -ENOENT;
2524
2525         sk = chan->sk;
2526
2527         if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2528                 struct l2cap_cmd_rej_cid rej;
2529
2530                 rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
2531                 rej.scid = cpu_to_le16(chan->scid);
2532                 rej.dcid = cpu_to_le16(chan->dcid);
2533
2534                 l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
2535                                 sizeof(rej), &rej);
2536                 goto unlock;
2537         }
2538
2539         /* Reject if config buffer is too small. */
2540         len = cmd_len - sizeof(*req);
2541         if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2542                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2543                                 l2cap_build_conf_rsp(chan, rsp,
2544                                         L2CAP_CONF_REJECT, flags), rsp);
2545                 goto unlock;
2546         }
2547
2548         /* Store config. */
2549         memcpy(chan->conf_req + chan->conf_len, req->data, len);
2550         chan->conf_len += len;
2551
2552         if (flags & 0x0001) {
2553                 /* Incomplete config. Send empty response. */
2554                 l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2555                                 l2cap_build_conf_rsp(chan, rsp,
2556                                         L2CAP_CONF_SUCCESS, 0x0001), rsp);
2557                 goto unlock;
2558         }
2559
2560         /* Complete config. */
2561         len = l2cap_parse_conf_req(chan, rsp);
2562         if (len < 0) {
2563                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2564                 goto unlock;
2565         }
2566
2567         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2568         chan->num_conf_rsp++;
2569
2570         /* Reset config buffer. */
2571         chan->conf_len = 0;
2572
2573         if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2574                 goto unlock;
2575
2576         if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2577                 set_default_fcs(chan);
2578
2579                 l2cap_state_change(chan, BT_CONNECTED);
2580
2581                 chan->next_tx_seq = 0;
2582                 chan->expected_tx_seq = 0;
2583                 skb_queue_head_init(&chan->tx_q);
2584                 if (chan->mode == L2CAP_MODE_ERTM)
2585                         l2cap_ertm_init(chan);
2586
2587                 l2cap_chan_ready(sk);
2588                 goto unlock;
2589         }
2590
2591         if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2592                 u8 buf[64];
2593                 l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2594                                         l2cap_build_conf_req(chan, buf), buf);
2595                 chan->num_conf_req++;
2596         }
2597
2598 unlock:
2599         bh_unlock_sock(sk);
2600         return 0;
2601 }
2602
2603 static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2604 {
2605         struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
2606         u16 scid, flags, result;
2607         struct l2cap_chan *chan;
2608         struct sock *sk;
2609         int len = cmd->len - sizeof(*rsp);
2610
2611         scid   = __le16_to_cpu(rsp->scid);
2612         flags  = __le16_to_cpu(rsp->flags);
2613         result = __le16_to_cpu(rsp->result);
2614
2615         BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
2616                         scid, flags, result);
2617
2618         chan = l2cap_get_chan_by_scid(conn, scid);
2619         if (!chan)
2620                 return 0;
2621
2622         sk = chan->sk;
2623
2624         switch (result) {
2625         case L2CAP_CONF_SUCCESS:
2626                 l2cap_conf_rfc_get(chan, rsp->data, len);
2627                 break;
2628
2629         case L2CAP_CONF_UNACCEPT:
2630                 if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2631                         char req[64];
2632
2633                         if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2634                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2635                                 goto done;
2636                         }
2637
2638                         /* throw out any old stored conf requests */
2639                         result = L2CAP_CONF_SUCCESS;
2640                         len = l2cap_parse_conf_rsp(chan, rsp->data, len,
2641                                                                 req, &result);
2642                         if (len < 0) {
2643                                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2644                                 goto done;
2645                         }
2646
2647                         l2cap_send_cmd(conn, l2cap_get_ident(conn),
2648                                                 L2CAP_CONF_REQ, len, req);
2649                         chan->num_conf_req++;
2650                         if (result != L2CAP_CONF_SUCCESS)
2651                                 goto done;
2652                         break;
2653                 }
2654
2655         default:
2656                 sk->sk_err = ECONNRESET;
2657                 __set_chan_timer(chan, HZ * 5);
2658                 l2cap_send_disconn_req(conn, chan, ECONNRESET);
2659                 goto done;
2660         }
2661
2662         if (flags & 0x01)
2663                 goto done;
2664
2665         set_bit(CONF_INPUT_DONE, &chan->conf_state);
2666
2667         if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2668                 set_default_fcs(chan);
2669
2670                 l2cap_state_change(chan, BT_CONNECTED);
2671                 chan->next_tx_seq = 0;
2672                 chan->expected_tx_seq = 0;
2673                 skb_queue_head_init(&chan->tx_q);
2674                 if (chan->mode ==  L2CAP_MODE_ERTM)
2675                         l2cap_ertm_init(chan);
2676
2677                 l2cap_chan_ready(sk);
2678         }
2679
2680 done:
2681         bh_unlock_sock(sk);
2682         return 0;
2683 }
2684
2685 static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2686 {
2687         struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
2688         struct l2cap_disconn_rsp rsp;
2689         u16 dcid, scid;
2690         struct l2cap_chan *chan;
2691         struct sock *sk;
2692
2693         scid = __le16_to_cpu(req->scid);
2694         dcid = __le16_to_cpu(req->dcid);
2695
2696         BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
2697
2698         chan = l2cap_get_chan_by_scid(conn, dcid);
2699         if (!chan)
2700                 return 0;
2701
2702         sk = chan->sk;
2703
2704         rsp.dcid = cpu_to_le16(chan->scid);
2705         rsp.scid = cpu_to_le16(chan->dcid);
2706         l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
2707
2708         sk->sk_shutdown = SHUTDOWN_MASK;
2709
2710         /* don't delete l2cap channel if sk is owned by user */
2711         if (sock_owned_by_user(sk)) {
2712                 l2cap_state_change(chan, BT_DISCONN);
2713                 __clear_chan_timer(chan);
2714                 __set_chan_timer(chan, HZ / 5);
2715                 bh_unlock_sock(sk);
2716                 return 0;
2717         }
2718
2719         l2cap_chan_del(chan, ECONNRESET);
2720         bh_unlock_sock(sk);
2721
2722         chan->ops->close(chan->data);
2723         return 0;
2724 }
2725
2726 static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2727 {
2728         struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
2729         u16 dcid, scid;
2730         struct l2cap_chan *chan;
2731         struct sock *sk;
2732
2733         scid = __le16_to_cpu(rsp->scid);
2734         dcid = __le16_to_cpu(rsp->dcid);
2735
2736         BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
2737
2738         chan = l2cap_get_chan_by_scid(conn, scid);
2739         if (!chan)
2740                 return 0;
2741
2742         sk = chan->sk;
2743
2744         /* don't delete l2cap channel if sk is owned by user */
2745         if (sock_owned_by_user(sk)) {
2746                 l2cap_state_change(chan,BT_DISCONN);
2747                 __clear_chan_timer(chan);
2748                 __set_chan_timer(chan, HZ / 5);
2749                 bh_unlock_sock(sk);
2750                 return 0;
2751         }
2752
2753         l2cap_chan_del(chan, 0);
2754         bh_unlock_sock(sk);
2755
2756         chan->ops->close(chan->data);
2757         return 0;
2758 }
2759
2760 static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2761 {
2762         struct l2cap_info_req *req = (struct l2cap_info_req *) data;
2763         u16 type;
2764
2765         type = __le16_to_cpu(req->type);
2766
2767         BT_DBG("type 0x%4.4x", type);
2768
2769         if (type == L2CAP_IT_FEAT_MASK) {
2770                 u8 buf[8];
2771                 u32 feat_mask = l2cap_feat_mask;
2772                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2773                 rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
2774                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2775                 if (!disable_ertm)
2776                         feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
2777                                                          | L2CAP_FEAT_FCS;
2778                 put_unaligned_le32(feat_mask, rsp->data);
2779                 l2cap_send_cmd(conn, cmd->ident,
2780                                         L2CAP_INFO_RSP, sizeof(buf), buf);
2781         } else if (type == L2CAP_IT_FIXED_CHAN) {
2782                 u8 buf[12];
2783                 struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
2784                 rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2785                 rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2786                 memcpy(buf + 4, l2cap_fixed_chan, 8);
2787                 l2cap_send_cmd(conn, cmd->ident,
2788                                         L2CAP_INFO_RSP, sizeof(buf), buf);
2789         } else {
2790                 struct l2cap_info_rsp rsp;
2791                 rsp.type   = cpu_to_le16(type);
2792                 rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
2793                 l2cap_send_cmd(conn, cmd->ident,
2794                                         L2CAP_INFO_RSP, sizeof(rsp), &rsp);
2795         }
2796
2797         return 0;
2798 }
2799
2800 static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
2801 {
2802         struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
2803         u16 type, result;
2804
2805         type   = __le16_to_cpu(rsp->type);
2806         result = __le16_to_cpu(rsp->result);
2807
2808         BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
2809
2810         /* L2CAP Info req/rsp are unbound to channels, add extra checks */
2811         if (cmd->ident != conn->info_ident ||
2812                         conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
2813                 return 0;
2814
2815         del_timer(&conn->info_timer);
2816
2817         if (result != L2CAP_IR_SUCCESS) {
2818                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2819                 conn->info_ident = 0;
2820
2821                 l2cap_conn_start(conn);
2822
2823                 return 0;
2824         }
2825
2826         if (type == L2CAP_IT_FEAT_MASK) {
2827                 conn->feat_mask = get_unaligned_le32(rsp->data);
2828
2829                 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2830                         struct l2cap_info_req req;
2831                         req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
2832
2833                         conn->info_ident = l2cap_get_ident(conn);
2834
2835                         l2cap_send_cmd(conn, conn->info_ident,
2836                                         L2CAP_INFO_REQ, sizeof(req), &req);
2837                 } else {
2838                         conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2839                         conn->info_ident = 0;
2840
2841                         l2cap_conn_start(conn);
2842                 }
2843         } else if (type == L2CAP_IT_FIXED_CHAN) {
2844                 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2845                 conn->info_ident = 0;
2846
2847                 l2cap_conn_start(conn);
2848         }
2849
2850         return 0;
2851 }
2852
2853 static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2854                                                         u16 to_multiplier)
2855 {
2856         u16 max_latency;
2857
2858         if (min > max || min < 6 || max > 3200)
2859                 return -EINVAL;
2860
2861         if (to_multiplier < 10 || to_multiplier > 3200)
2862                 return -EINVAL;
2863
2864         if (max >= to_multiplier * 8)
2865                 return -EINVAL;
2866
2867         max_latency = (to_multiplier * 8 / max) - 1;
2868         if (latency > 499 || latency > max_latency)
2869                 return -EINVAL;
2870
2871         return 0;
2872 }
2873
2874 static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
2875                                         struct l2cap_cmd_hdr *cmd, u8 *data)
2876 {
2877         struct hci_conn *hcon = conn->hcon;
2878         struct l2cap_conn_param_update_req *req;
2879         struct l2cap_conn_param_update_rsp rsp;
2880         u16 min, max, latency, to_multiplier, cmd_len;
2881         int err;
2882
2883         if (!(hcon->link_mode & HCI_LM_MASTER))
2884                 return -EINVAL;
2885
2886         cmd_len = __le16_to_cpu(cmd->len);
2887         if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
2888                 return -EPROTO;
2889
2890         req = (struct l2cap_conn_param_update_req *) data;
2891         min             = __le16_to_cpu(req->min);
2892         max             = __le16_to_cpu(req->max);
2893         latency         = __le16_to_cpu(req->latency);
2894         to_multiplier   = __le16_to_cpu(req->to_multiplier);
2895
2896         BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
2897                                                 min, max, latency, to_multiplier);
2898
2899         memset(&rsp, 0, sizeof(rsp));
2900
2901         err = l2cap_check_conn_param(min, max, latency, to_multiplier);
2902         if (err)
2903                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
2904         else
2905                 rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
2906
2907         l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
2908                                                         sizeof(rsp), &rsp);
2909
2910         if (!err)
2911                 hci_le_conn_update(hcon, min, max, latency, to_multiplier);
2912
2913         return 0;
2914 }
2915
2916 static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
2917                         struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
2918 {
2919         int err = 0;
2920
2921         switch (cmd->code) {
2922         case L2CAP_COMMAND_REJ:
2923                 l2cap_command_rej(conn, cmd, data);
2924                 break;
2925
2926         case L2CAP_CONN_REQ:
2927                 err = l2cap_connect_req(conn, cmd, data);
2928                 break;
2929
2930         case L2CAP_CONN_RSP:
2931                 err = l2cap_connect_rsp(conn, cmd, data);
2932                 break;
2933
2934         case L2CAP_CONF_REQ:
2935                 err = l2cap_config_req(conn, cmd, cmd_len, data);
2936                 break;
2937
2938         case L2CAP_CONF_RSP:
2939                 err = l2cap_config_rsp(conn, cmd, data);
2940                 break;
2941
2942         case L2CAP_DISCONN_REQ:
2943                 err = l2cap_disconnect_req(conn, cmd, data);
2944                 break;
2945
2946         case L2CAP_DISCONN_RSP:
2947                 err = l2cap_disconnect_rsp(conn, cmd, data);
2948                 break;
2949
2950         case L2CAP_ECHO_REQ:
2951                 l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
2952                 break;
2953
2954         case L2CAP_ECHO_RSP:
2955                 break;
2956
2957         case L2CAP_INFO_REQ:
2958                 err = l2cap_information_req(conn, cmd, data);
2959                 break;
2960
2961         case L2CAP_INFO_RSP:
2962                 err = l2cap_information_rsp(conn, cmd, data);
2963                 break;
2964
2965         default:
2966                 BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
2967                 err = -EINVAL;
2968                 break;
2969         }
2970
2971         return err;
2972 }
2973
2974 static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
2975                                         struct l2cap_cmd_hdr *cmd, u8 *data)
2976 {
2977         switch (cmd->code) {
2978         case L2CAP_COMMAND_REJ:
2979                 return 0;
2980
2981         case L2CAP_CONN_PARAM_UPDATE_REQ:
2982                 return l2cap_conn_param_update_req(conn, cmd, data);
2983
2984         case L2CAP_CONN_PARAM_UPDATE_RSP:
2985                 return 0;
2986
2987         default:
2988                 BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
2989                 return -EINVAL;
2990         }
2991 }
2992
2993 static inline void l2cap_sig_channel(struct l2cap_conn *conn,
2994                                                         struct sk_buff *skb)
2995 {
2996         u8 *data = skb->data;
2997         int len = skb->len;
2998         struct l2cap_cmd_hdr cmd;
2999         int err;
3000
3001         l2cap_raw_recv(conn, skb);
3002
3003         while (len >= L2CAP_CMD_HDR_SIZE) {
3004                 u16 cmd_len;
3005                 memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
3006                 data += L2CAP_CMD_HDR_SIZE;
3007                 len  -= L2CAP_CMD_HDR_SIZE;
3008
3009                 cmd_len = le16_to_cpu(cmd.len);
3010
3011                 BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
3012
3013                 if (cmd_len > len || !cmd.ident) {
3014                         BT_DBG("corrupted command");
3015                         break;
3016                 }
3017
3018                 if (conn->hcon->type == LE_LINK)
3019                         err = l2cap_le_sig_cmd(conn, &cmd, data);
3020                 else
3021                         err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
3022
3023                 if (err) {
3024                         struct l2cap_cmd_rej_unk rej;
3025
3026                         BT_ERR("Wrong link type (%d)", err);
3027
3028                         /* FIXME: Map err to a valid reason */
3029                         rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
3030                         l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
3031                 }
3032
3033                 data += cmd_len;
3034                 len  -= cmd_len;
3035         }
3036
3037         kfree_skb(skb);
3038 }
3039
3040 static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3041 {
3042         u16 our_fcs, rcv_fcs;
3043         int hdr_size = L2CAP_HDR_SIZE + 2;
3044
3045         if (chan->fcs == L2CAP_FCS_CRC16) {
3046                 skb_trim(skb, skb->len - 2);
3047                 rcv_fcs = get_unaligned_le16(skb->data + skb->len);
3048                 our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
3049
3050                 if (our_fcs != rcv_fcs)
3051                         return -EBADMSG;
3052         }
3053         return 0;
3054 }
3055
3056 static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3057 {
3058         u16 control = 0;
3059
3060         chan->frames_sent = 0;
3061
3062         control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3063
3064         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3065                 control |= L2CAP_SUPER_RCV_NOT_READY;
3066                 l2cap_send_sframe(chan, control);
3067                 set_bit(CONN_RNR_SENT, &chan->conn_state);
3068         }
3069
3070         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3071                 l2cap_retransmit_frames(chan);
3072
3073         l2cap_ertm_send(chan);
3074
3075         if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3076                         chan->frames_sent == 0) {
3077                 control |= L2CAP_SUPER_RCV_READY;
3078                 l2cap_send_sframe(chan, control);
3079         }
3080 }
3081
3082 static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
3083 {
3084         struct sk_buff *next_skb;
3085         int tx_seq_offset, next_tx_seq_offset;
3086
3087         bt_cb(skb)->tx_seq = tx_seq;
3088         bt_cb(skb)->sar = sar;
3089
3090         next_skb = skb_peek(&chan->srej_q);
3091         if (!next_skb) {
3092                 __skb_queue_tail(&chan->srej_q, skb);
3093                 return 0;
3094         }
3095
3096         tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3097         if (tx_seq_offset < 0)
3098                 tx_seq_offset += 64;
3099
3100         do {
3101                 if (bt_cb(next_skb)->tx_seq == tx_seq)
3102                         return -EINVAL;
3103
3104                 next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
3105                                                 chan->buffer_seq) % 64;
3106                 if (next_tx_seq_offset < 0)
3107                         next_tx_seq_offset += 64;
3108
3109                 if (next_tx_seq_offset > tx_seq_offset) {
3110                         __skb_queue_before(&chan->srej_q, next_skb, skb);
3111                         return 0;
3112                 }
3113
3114                 if (skb_queue_is_last(&chan->srej_q, next_skb))
3115                         break;
3116
3117         } while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3118
3119         __skb_queue_tail(&chan->srej_q, skb);
3120
3121         return 0;
3122 }
3123
3124 static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3125 {
3126         struct sk_buff *_skb;
3127         int err;
3128
3129         switch (control & L2CAP_CTRL_SAR) {
3130         case L2CAP_SDU_UNSEGMENTED:
3131                 if (test_bit(CONN_SAR_SDU, &chan->conn_state))
3132                         goto drop;
3133
3134                 return chan->ops->recv(chan->data, skb);
3135
3136         case L2CAP_SDU_START:
3137                 if (test_bit(CONN_SAR_SDU, &chan->conn_state))
3138                         goto drop;
3139
3140                 chan->sdu_len = get_unaligned_le16(skb->data);
3141
3142                 if (chan->sdu_len > chan->imtu)
3143                         goto disconnect;
3144
3145                 chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
3146                 if (!chan->sdu)
3147                         return -ENOMEM;
3148
3149                 /* pull sdu_len bytes only after alloc, because of Local Busy
3150                  * condition we have to be sure that this will be executed
3151                  * only once, i.e., when alloc does not fail */
3152                 skb_pull(skb, 2);
3153
3154                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3155
3156                 set_bit(CONN_SAR_SDU, &chan->conn_state);
3157                 chan->partial_sdu_len = skb->len;
3158                 break;
3159
3160         case L2CAP_SDU_CONTINUE:
3161                 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3162                         goto disconnect;
3163
3164                 if (!chan->sdu)
3165                         goto disconnect;
3166
3167                 chan->partial_sdu_len += skb->len;
3168                 if (chan->partial_sdu_len > chan->sdu_len)
3169                         goto drop;
3170
3171                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3172
3173                 break;
3174
3175         case L2CAP_SDU_END:
3176                 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3177                         goto disconnect;
3178
3179                 if (!chan->sdu)
3180                         goto disconnect;
3181
3182                 chan->partial_sdu_len += skb->len;
3183
3184                 if (chan->partial_sdu_len > chan->imtu)
3185                         goto drop;
3186
3187                 if (chan->partial_sdu_len != chan->sdu_len)
3188                         goto drop;
3189
3190                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3191
3192                 _skb = skb_clone(chan->sdu, GFP_ATOMIC);
3193                 if (!_skb) {
3194                         return -ENOMEM;
3195                 }
3196
3197                 err = chan->ops->recv(chan->data, _skb);
3198                 if (err < 0) {
3199                         kfree_skb(_skb);
3200                         return err;
3201                 }
3202
3203                 clear_bit(CONN_SAR_SDU, &chan->conn_state);
3204
3205                 kfree_skb(chan->sdu);
3206                 break;
3207         }
3208
3209         kfree_skb(skb);
3210         return 0;
3211
3212 drop:
3213         kfree_skb(chan->sdu);
3214         chan->sdu = NULL;
3215
3216 disconnect:
3217         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3218         kfree_skb(skb);
3219         return 0;
3220 }
3221
3222 static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3223 {
3224         u16 control;
3225
3226         BT_DBG("chan %p, Enter local busy", chan);
3227
3228         set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3229
3230         control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3231         control |= L2CAP_SUPER_RCV_NOT_READY;
3232         l2cap_send_sframe(chan, control);
3233
3234         set_bit(CONN_RNR_SENT, &chan->conn_state);
3235
3236         __clear_ack_timer(chan);
3237 }
3238
3239 static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
3240 {
3241         u16 control;
3242
3243         if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3244                 goto done;
3245
3246         control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3247         control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3248         l2cap_send_sframe(chan, control);
3249         chan->retry_count = 1;
3250
3251         __clear_retrans_timer(chan);
3252         __set_monitor_timer(chan);
3253
3254         set_bit(CONN_WAIT_F, &chan->conn_state);
3255
3256 done:
3257         clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
3258         clear_bit(CONN_RNR_SENT, &chan->conn_state);
3259
3260         BT_DBG("chan %p, Exit local busy", chan);
3261 }
3262
3263 void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3264 {
3265         if (chan->mode == L2CAP_MODE_ERTM) {
3266                 if (busy)
3267                         l2cap_ertm_enter_local_busy(chan);
3268                 else
3269                         l2cap_ertm_exit_local_busy(chan);
3270         }
3271 }
3272
3273 static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3274 {
3275         struct sk_buff *_skb;
3276         int err = -EINVAL;
3277
3278         /*
3279          * TODO: We have to notify the userland if some data is lost with the
3280          * Streaming Mode.
3281          */
3282
3283         switch (control & L2CAP_CTRL_SAR) {
3284         case L2CAP_SDU_UNSEGMENTED:
3285                 if (test_bit(CONN_SAR_SDU, &chan->conn_state)) {
3286                         kfree_skb(chan->sdu);
3287                         break;
3288                 }
3289
3290                 err = chan->ops->recv(chan->data, skb);
3291                 if (!err)
3292                         return 0;
3293
3294                 break;
3295
3296         case L2CAP_SDU_START:
3297                 if (test_bit(CONN_SAR_SDU, &chan->conn_state)) {
3298                         kfree_skb(chan->sdu);
3299                         break;
3300                 }
3301
3302                 chan->sdu_len = get_unaligned_le16(skb->data);
3303                 skb_pull(skb, 2);
3304
3305                 if (chan->sdu_len > chan->imtu) {
3306                         err = -EMSGSIZE;
3307                         break;
3308                 }
3309
3310                 chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
3311                 if (!chan->sdu) {
3312                         err = -ENOMEM;
3313                         break;
3314                 }
3315
3316                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3317
3318                 set_bit(CONN_SAR_SDU, &chan->conn_state);
3319                 chan->partial_sdu_len = skb->len;
3320                 err = 0;
3321                 break;
3322
3323         case L2CAP_SDU_CONTINUE:
3324                 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3325                         break;
3326
3327                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3328
3329                 chan->partial_sdu_len += skb->len;
3330                 if (chan->partial_sdu_len > chan->sdu_len)
3331                         kfree_skb(chan->sdu);
3332                 else
3333                         err = 0;
3334
3335                 break;
3336
3337         case L2CAP_SDU_END:
3338                 if (!test_bit(CONN_SAR_SDU, &chan->conn_state))
3339                         break;
3340
3341                 memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3342
3343                 clear_bit(CONN_SAR_SDU, &chan->conn_state);
3344                 chan->partial_sdu_len += skb->len;
3345
3346                 if (chan->partial_sdu_len > chan->imtu)
3347                         goto drop;
3348
3349                 if (chan->partial_sdu_len == chan->sdu_len) {
3350                         _skb = skb_clone(chan->sdu, GFP_ATOMIC);
3351                         err = chan->ops->recv(chan->data, _skb);
3352                         if (err < 0)
3353                                 kfree_skb(_skb);
3354                 }
3355                 err = 0;
3356
3357 drop:
3358                 kfree_skb(chan->sdu);
3359                 break;
3360         }
3361
3362         kfree_skb(skb);
3363         return err;
3364 }
3365
3366 static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3367 {
3368         struct sk_buff *skb;
3369         u16 control;
3370
3371         while ((skb = skb_peek(&chan->srej_q)) &&
3372                         !test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3373                 int err;
3374
3375                 if (bt_cb(skb)->tx_seq != tx_seq)
3376                         break;
3377
3378                 skb = skb_dequeue(&chan->srej_q);
3379                 control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3380                 err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3381
3382                 if (err < 0) {
3383                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3384                         break;
3385                 }
3386
3387                 chan->buffer_seq_srej =
3388                         (chan->buffer_seq_srej + 1) % 64;
3389                 tx_seq = (tx_seq + 1) % 64;
3390         }
3391 }
3392
3393 static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3394 {
3395         struct srej_list *l, *tmp;
3396         u16 control;
3397
3398         list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3399                 if (l->tx_seq == tx_seq) {
3400                         list_del(&l->list);
3401                         kfree(l);
3402                         return;
3403                 }
3404                 control = L2CAP_SUPER_SELECT_REJECT;
3405                 control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3406                 l2cap_send_sframe(chan, control);
3407                 list_del(&l->list);
3408                 list_add_tail(&l->list, &chan->srej_l);
3409         }
3410 }
3411
3412 static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3413 {
3414         struct srej_list *new;
3415         u16 control;
3416
3417         while (tx_seq != chan->expected_tx_seq) {
3418                 control = L2CAP_SUPER_SELECT_REJECT;
3419                 control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3420                 l2cap_send_sframe(chan, control);
3421
3422                 new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3423                 new->tx_seq = chan->expected_tx_seq;
3424                 chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3425                 list_add_tail(&new->list, &chan->srej_l);
3426         }
3427         chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3428 }
3429
3430 static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3431 {
3432         u8 tx_seq = __get_txseq(rx_control);
3433         u8 req_seq = __get_reqseq(rx_control);
3434         u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3435         int tx_seq_offset, expected_tx_seq_offset;
3436         int num_to_ack = (chan->tx_win/6) + 1;
3437         int err = 0;
3438
3439         BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
3440                                                         tx_seq, rx_control);
3441
3442         if (L2CAP_CTRL_FINAL & rx_control &&
3443                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
3444                 __clear_monitor_timer(chan);
3445                 if (chan->unacked_frames > 0)
3446                         __set_retrans_timer(chan);
3447                 clear_bit(CONN_WAIT_F, &chan->conn_state);
3448         }
3449
3450         chan->expected_ack_seq = req_seq;
3451         l2cap_drop_acked_frames(chan);
3452
3453         tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3454         if (tx_seq_offset < 0)
3455                 tx_seq_offset += 64;
3456
3457         /* invalid tx_seq */
3458         if (tx_seq_offset >= chan->tx_win) {
3459                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3460                 goto drop;
3461         }
3462
3463         if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
3464                 goto drop;
3465
3466         if (tx_seq == chan->expected_tx_seq)
3467                 goto expected;
3468
3469         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3470                 struct srej_list *first;
3471
3472                 first = list_first_entry(&chan->srej_l,
3473                                 struct srej_list, list);
3474                 if (tx_seq == first->tx_seq) {
3475                         l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3476                         l2cap_check_srej_gap(chan, tx_seq);
3477
3478                         list_del(&first->list);
3479                         kfree(first);
3480
3481                         if (list_empty(&chan->srej_l)) {
3482                                 chan->buffer_seq = chan->buffer_seq_srej;
3483                                 clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3484                                 l2cap_send_ack(chan);
3485                                 BT_DBG("chan %p, Exit SREJ_SENT", chan);
3486                         }
3487                 } else {
3488                         struct srej_list *l;
3489
3490                         /* duplicated tx_seq */
3491                         if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3492                                 goto drop;
3493
3494                         list_for_each_entry(l, &chan->srej_l, list) {
3495                                 if (l->tx_seq == tx_seq) {
3496                                         l2cap_resend_srejframe(chan, tx_seq);
3497                                         return 0;
3498                                 }
3499                         }
3500                         l2cap_send_srejframe(chan, tx_seq);
3501                 }
3502         } else {
3503                 expected_tx_seq_offset =
3504                         (chan->expected_tx_seq - chan->buffer_seq) % 64;
3505                 if (expected_tx_seq_offset < 0)
3506                         expected_tx_seq_offset += 64;
3507
3508                 /* duplicated tx_seq */
3509                 if (tx_seq_offset < expected_tx_seq_offset)
3510                         goto drop;
3511
3512                 set_bit(CONN_SREJ_SENT, &chan->conn_state);
3513
3514                 BT_DBG("chan %p, Enter SREJ", chan);
3515
3516                 INIT_LIST_HEAD(&chan->srej_l);
3517                 chan->buffer_seq_srej = chan->buffer_seq;
3518
3519                 __skb_queue_head_init(&chan->srej_q);
3520                 l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3521
3522                 set_bit(CONN_SEND_PBIT, &chan->conn_state);
3523
3524                 l2cap_send_srejframe(chan, tx_seq);
3525
3526                 __clear_ack_timer(chan);
3527         }
3528         return 0;
3529
3530 expected:
3531         chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3532
3533         if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3534                 bt_cb(skb)->tx_seq = tx_seq;
3535                 bt_cb(skb)->sar = sar;
3536                 __skb_queue_tail(&chan->srej_q, skb);
3537                 return 0;
3538         }
3539
3540         err = l2cap_ertm_reassembly_sdu(chan, skb, rx_control);
3541         chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3542         if (err < 0) {
3543                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3544                 return err;
3545         }
3546
3547         if (rx_control & L2CAP_CTRL_FINAL) {
3548                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3549                         l2cap_retransmit_frames(chan);
3550         }
3551
3552         __set_ack_timer(chan);
3553
3554         chan->num_acked = (chan->num_acked + 1) % num_to_ack;
3555         if (chan->num_acked == num_to_ack - 1)
3556                 l2cap_send_ack(chan);
3557
3558         return 0;
3559
3560 drop:
3561         kfree_skb(skb);
3562         return 0;
3563 }
3564
3565 static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3566 {
3567         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3568                                                 rx_control);
3569
3570         chan->expected_ack_seq = __get_reqseq(rx_control);
3571         l2cap_drop_acked_frames(chan);
3572
3573         if (rx_control & L2CAP_CTRL_POLL) {
3574                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3575                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3576                         if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3577                                         (chan->unacked_frames > 0))
3578                                 __set_retrans_timer(chan);
3579
3580                         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3581                         l2cap_send_srejtail(chan);
3582                 } else {
3583                         l2cap_send_i_or_rr_or_rnr(chan);
3584                 }
3585
3586         } else if (rx_control & L2CAP_CTRL_FINAL) {
3587                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3588
3589                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3590                         l2cap_retransmit_frames(chan);
3591
3592         } else {
3593                 if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3594                                 (chan->unacked_frames > 0))
3595                         __set_retrans_timer(chan);
3596
3597                 clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3598                 if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
3599                         l2cap_send_ack(chan);
3600                 else
3601                         l2cap_ertm_send(chan);
3602         }
3603 }
3604
3605 static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3606 {
3607         u8 tx_seq = __get_reqseq(rx_control);
3608
3609         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3610
3611         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3612
3613         chan->expected_ack_seq = tx_seq;
3614         l2cap_drop_acked_frames(chan);
3615
3616         if (rx_control & L2CAP_CTRL_FINAL) {
3617                 if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3618                         l2cap_retransmit_frames(chan);
3619         } else {
3620                 l2cap_retransmit_frames(chan);
3621
3622                 if (test_bit(CONN_WAIT_F, &chan->conn_state))
3623                         set_bit(CONN_REJ_ACT, &chan->conn_state);
3624         }
3625 }
3626 static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3627 {
3628         u8 tx_seq = __get_reqseq(rx_control);
3629
3630         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3631
3632         clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3633
3634         if (rx_control & L2CAP_CTRL_POLL) {
3635                 chan->expected_ack_seq = tx_seq;
3636                 l2cap_drop_acked_frames(chan);
3637
3638                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3639                 l2cap_retransmit_one_frame(chan, tx_seq);
3640
3641                 l2cap_ertm_send(chan);
3642
3643                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3644                         chan->srej_save_reqseq = tx_seq;
3645                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
3646                 }
3647         } else if (rx_control & L2CAP_CTRL_FINAL) {
3648                 if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
3649                                 chan->srej_save_reqseq == tx_seq)
3650                         clear_bit(CONN_SREJ_ACT, &chan->conn_state);
3651                 else
3652                         l2cap_retransmit_one_frame(chan, tx_seq);
3653         } else {
3654                 l2cap_retransmit_one_frame(chan, tx_seq);
3655                 if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3656                         chan->srej_save_reqseq = tx_seq;
3657                         set_bit(CONN_SREJ_ACT, &chan->conn_state);
3658                 }
3659         }
3660 }
3661
3662 static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3663 {
3664         u8 tx_seq = __get_reqseq(rx_control);
3665
3666         BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3667
3668         set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3669         chan->expected_ack_seq = tx_seq;
3670         l2cap_drop_acked_frames(chan);
3671
3672         if (rx_control & L2CAP_CTRL_POLL)
3673                 set_bit(CONN_SEND_FBIT, &chan->conn_state);
3674
3675         if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3676                 __clear_retrans_timer(chan);
3677                 if (rx_control & L2CAP_CTRL_POLL)
3678                         l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3679                 return;
3680         }
3681
3682         if (rx_control & L2CAP_CTRL_POLL)
3683                 l2cap_send_srejtail(chan);
3684         else
3685                 l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3686 }
3687
3688 static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3689 {
3690         BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3691
3692         if (L2CAP_CTRL_FINAL & rx_control &&
3693                         test_bit(CONN_WAIT_F, &chan->conn_state)) {
3694                 __clear_monitor_timer(chan);
3695                 if (chan->unacked_frames > 0)
3696                         __set_retrans_timer(chan);
3697                 clear_bit(CONN_WAIT_F, &chan->conn_state);
3698         }
3699
3700         switch (rx_control & L2CAP_CTRL_SUPERVISE) {
3701         case L2CAP_SUPER_RCV_READY:
3702                 l2cap_data_channel_rrframe(chan, rx_control);
3703                 break;
3704
3705         case L2CAP_SUPER_REJECT:
3706                 l2cap_data_channel_rejframe(chan, rx_control);
3707                 break;
3708
3709         case L2CAP_SUPER_SELECT_REJECT:
3710                 l2cap_data_channel_srejframe(chan, rx_control);
3711                 break;
3712
3713         case L2CAP_SUPER_RCV_NOT_READY:
3714                 l2cap_data_channel_rnrframe(chan, rx_control);
3715                 break;
3716         }
3717
3718         kfree_skb(skb);
3719         return 0;
3720 }
3721
3722 static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
3723 {
3724         struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3725         u16 control;
3726         u8 req_seq;
3727         int len, next_tx_seq_offset, req_seq_offset;
3728
3729         control = get_unaligned_le16(skb->data);
3730         skb_pull(skb, 2);
3731         len = skb->len;
3732
3733         /*
3734          * We can just drop the corrupted I-frame here.
3735          * Receiver will miss it and start proper recovery
3736          * procedures and ask retransmission.
3737          */
3738         if (l2cap_check_fcs(chan, skb))
3739                 goto drop;
3740
3741         if (__is_sar_start(control) && __is_iframe(control))
3742                 len -= 2;
3743
3744         if (chan->fcs == L2CAP_FCS_CRC16)
3745                 len -= 2;
3746
3747         if (len > chan->mps) {
3748                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3749                 goto drop;
3750         }
3751
3752         req_seq = __get_reqseq(control);
3753         req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3754         if (req_seq_offset < 0)
3755                 req_seq_offset += 64;
3756
3757         next_tx_seq_offset =
3758                 (chan->next_tx_seq - chan->expected_ack_seq) % 64;
3759         if (next_tx_seq_offset < 0)
3760                 next_tx_seq_offset += 64;
3761
3762         /* check for invalid req-seq */
3763         if (req_seq_offset > next_tx_seq_offset) {
3764                 l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3765                 goto drop;
3766         }
3767
3768         if (__is_iframe(control)) {
3769                 if (len < 0) {
3770                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3771                         goto drop;
3772                 }
3773
3774                 l2cap_data_channel_iframe(chan, control, skb);
3775         } else {
3776                 if (len != 0) {
3777                         BT_ERR("%d", len);
3778                         l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3779                         goto drop;
3780                 }
3781
3782                 l2cap_data_channel_sframe(chan, control, skb);
3783         }
3784
3785         return 0;
3786
3787 drop:
3788         kfree_skb(skb);
3789         return 0;
3790 }
3791
3792 static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
3793 {
3794         struct l2cap_chan *chan;
3795         struct sock *sk = NULL;
3796         u16 control;
3797         u8 tx_seq;
3798         int len;
3799
3800         chan = l2cap_get_chan_by_scid(conn, cid);
3801         if (!chan) {
3802                 BT_DBG("unknown cid 0x%4.4x", cid);
3803                 goto drop;
3804         }
3805
3806         sk = chan->sk;
3807
3808         BT_DBG("chan %p, len %d", chan, skb->len);
3809
3810         if (chan->state != BT_CONNECTED)
3811                 goto drop;
3812
3813         switch (chan->mode) {
3814         case L2CAP_MODE_BASIC:
3815                 /* If socket recv buffers overflows we drop data here
3816                  * which is *bad* because L2CAP has to be reliable.
3817                  * But we don't have any other choice. L2CAP doesn't
3818                  * provide flow control mechanism. */
3819
3820                 if (chan->imtu < skb->len)
3821                         goto drop;
3822
3823                 if (!chan->ops->recv(chan->data, skb))
3824                         goto done;
3825                 break;
3826
3827         case L2CAP_MODE_ERTM:
3828                 if (!sock_owned_by_user(sk)) {
3829                         l2cap_ertm_data_rcv(sk, skb);
3830                 } else {
3831                         if (sk_add_backlog(sk, skb))
3832                                 goto drop;
3833                 }
3834
3835                 goto done;
3836
3837         case L2CAP_MODE_STREAMING:
3838                 control = get_unaligned_le16(skb->data);
3839                 skb_pull(skb, 2);
3840                 len = skb->len;
3841
3842                 if (l2cap_check_fcs(chan, skb))
3843                         goto drop;
3844
3845                 if (__is_sar_start(control))
3846                         len -= 2;
3847
3848                 if (chan->fcs == L2CAP_FCS_CRC16)
3849                         len -= 2;
3850
3851                 if (len > chan->mps || len < 0 || __is_sframe(control))
3852                         goto drop;
3853
3854                 tx_seq = __get_txseq(control);
3855
3856                 if (chan->expected_tx_seq == tx_seq)
3857                         chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3858                 else
3859                         chan->expected_tx_seq = (tx_seq + 1) % 64;
3860
3861                 l2cap_streaming_reassembly_sdu(chan, skb, control);
3862
3863                 goto done;
3864
3865         default:
3866                 BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3867                 break;
3868         }
3869
3870 drop:
3871         kfree_skb(skb);
3872
3873 done:
3874         if (sk)
3875                 bh_unlock_sock(sk);
3876
3877         return 0;
3878 }
3879
3880 static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
3881 {
3882         struct sock *sk = NULL;
3883         struct l2cap_chan *chan;
3884
3885         chan = l2cap_global_chan_by_psm(0, psm, conn->src);
3886         if (!chan)
3887                 goto drop;
3888
3889         sk = chan->sk;
3890
3891         bh_lock_sock(sk);
3892
3893         BT_DBG("sk %p, len %d", sk, skb->len);
3894
3895         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3896                 goto drop;
3897
3898         if (chan->imtu < skb->len)
3899                 goto drop;
3900
3901         if (!chan->ops->recv(chan->data, skb))
3902                 goto done;
3903
3904 drop:
3905         kfree_skb(skb);
3906
3907 done:
3908         if (sk)
3909                 bh_unlock_sock(sk);
3910         return 0;
3911 }
3912
3913 static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
3914 {
3915         struct sock *sk = NULL;
3916         struct l2cap_chan *chan;
3917
3918         chan = l2cap_global_chan_by_scid(0, cid, conn->src);
3919         if (!chan)
3920                 goto drop;
3921
3922         sk = chan->sk;
3923
3924         bh_lock_sock(sk);
3925
3926         BT_DBG("sk %p, len %d", sk, skb->len);
3927
3928         if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3929                 goto drop;
3930
3931         if (chan->imtu < skb->len)
3932                 goto drop;
3933
3934         if (!chan->ops->recv(chan->data, skb))
3935                 goto done;
3936
3937 drop:
3938         kfree_skb(skb);
3939
3940 done:
3941         if (sk)
3942                 bh_unlock_sock(sk);
3943         return 0;
3944 }
3945
3946 static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
3947 {
3948         struct l2cap_hdr *lh = (void *) skb->data;
3949         u16 cid, len;
3950         __le16 psm;
3951
3952         skb_pull(skb, L2CAP_HDR_SIZE);
3953         cid = __le16_to_cpu(lh->cid);
3954         len = __le16_to_cpu(lh->len);
3955
3956         if (len != skb->len) {
3957                 kfree_skb(skb);
3958                 return;
3959         }
3960
3961         BT_DBG("len %d, cid 0x%4.4x", len, cid);
3962
3963         switch (cid) {
3964         case L2CAP_CID_LE_SIGNALING:
3965         case L2CAP_CID_SIGNALING:
3966                 l2cap_sig_channel(conn, skb);
3967                 break;
3968
3969         case L2CAP_CID_CONN_LESS:
3970                 psm = get_unaligned_le16(skb->data);
3971                 skb_pull(skb, 2);
3972                 l2cap_conless_channel(conn, psm, skb);
3973                 break;
3974
3975         case L2CAP_CID_LE_DATA:
3976                 l2cap_att_channel(conn, cid, skb);
3977                 break;
3978
3979         case L2CAP_CID_SMP:
3980                 if (smp_sig_channel(conn, skb))
3981                         l2cap_conn_del(conn->hcon, EACCES);
3982                 break;
3983
3984         default:
3985                 l2cap_data_channel(conn, cid, skb);
3986                 break;
3987         }
3988 }
3989
3990 /* ---- L2CAP interface with lower layer (HCI) ---- */
3991
3992 static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
3993 {
3994         int exact = 0, lm1 = 0, lm2 = 0;
3995         struct l2cap_chan *c;
3996
3997         if (type != ACL_LINK)
3998                 return -EINVAL;
3999
4000         BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
4001
4002         /* Find listening sockets and check their link_mode */
4003         read_lock(&chan_list_lock);
4004         list_for_each_entry(c, &chan_list, global_l) {
4005                 struct sock *sk = c->sk;
4006
4007                 if (c->state != BT_LISTEN)
4008                         continue;
4009
4010                 if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4011                         lm1 |= HCI_LM_ACCEPT;
4012                         if (c->role_switch)
4013                                 lm1 |= HCI_LM_MASTER;
4014                         exact++;
4015                 } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
4016                         lm2 |= HCI_LM_ACCEPT;
4017                         if (c->role_switch)
4018                                 lm2 |= HCI_LM_MASTER;
4019                 }
4020         }
4021         read_unlock(&chan_list_lock);
4022
4023         return exact ? lm1 : lm2;
4024 }
4025
4026 static int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
4027 {
4028         struct l2cap_conn *conn;
4029
4030         BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);
4031
4032         if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4033                 return -EINVAL;
4034
4035         if (!status) {
4036                 conn = l2cap_conn_add(hcon, status);
4037                 if (conn)
4038                         l2cap_conn_ready(conn);
4039         } else
4040                 l2cap_conn_del(hcon, bt_to_errno(status));
4041
4042         return 0;
4043 }
4044
4045 static int l2cap_disconn_ind(struct hci_conn *hcon)
4046 {
4047         struct l2cap_conn *conn = hcon->l2cap_data;
4048
4049         BT_DBG("hcon %p", hcon);
4050
4051         if ((hcon->type != ACL_LINK && hcon->type != LE_LINK) || !conn)
4052                 return 0x13;
4053
4054         return conn->disc_reason;
4055 }
4056
4057 static int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
4058 {
4059         BT_DBG("hcon %p reason %d", hcon, reason);
4060
4061         if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4062                 return -EINVAL;
4063
4064         l2cap_conn_del(hcon, bt_to_errno(reason));
4065
4066         return 0;
4067 }
4068
4069 static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4070 {
4071         if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4072                 return;
4073
4074         if (encrypt == 0x00) {
4075                 if (chan->sec_level == BT_SECURITY_MEDIUM) {
4076                         __clear_chan_timer(chan);
4077                         __set_chan_timer(chan, HZ * 5);
4078                 } else if (chan->sec_level == BT_SECURITY_HIGH)
4079                         l2cap_chan_close(chan, ECONNREFUSED);
4080         } else {
4081                 if (chan->sec_level == BT_SECURITY_MEDIUM)
4082                         __clear_chan_timer(chan);
4083         }
4084 }
4085
4086 static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
4087 {
4088         struct l2cap_conn *conn = hcon->l2cap_data;
4089         struct l2cap_chan *chan;
4090
4091         if (!conn)
4092                 return 0;
4093
4094         BT_DBG("conn %p", conn);
4095
4096         read_lock(&conn->chan_lock);
4097
4098         list_for_each_entry(chan, &conn->chan_l, list) {
4099                 struct sock *sk = chan->sk;
4100
4101                 bh_lock_sock(sk);
4102
4103                 BT_DBG("chan->scid %d", chan->scid);
4104
4105                 if (chan->scid == L2CAP_CID_LE_DATA) {
4106                         if (!status && encrypt) {
4107                                 chan->sec_level = hcon->sec_level;
4108                                 del_timer(&conn->security_timer);
4109                                 l2cap_chan_ready(sk);
4110                                 smp_distribute_keys(conn, 0);
4111                         }
4112
4113                         bh_unlock_sock(sk);
4114                         continue;
4115                 }
4116
4117                 if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4118                         bh_unlock_sock(sk);
4119                         continue;
4120                 }
4121
4122                 if (!status && (chan->state == BT_CONNECTED ||
4123                                                 chan->state == BT_CONFIG)) {
4124                         l2cap_check_encryption(chan, encrypt);
4125                         bh_unlock_sock(sk);
4126                         continue;
4127                 }
4128
4129                 if (chan->state == BT_CONNECT) {
4130                         if (!status) {
4131                                 struct l2cap_conn_req req;
4132                                 req.scid = cpu_to_le16(chan->scid);
4133                                 req.psm  = chan->psm;
4134
4135                                 chan->ident = l2cap_get_ident(conn);
4136                                 set_bit(CONF_CONNECT_PEND, &chan->conf_state);
4137
4138                                 l2cap_send_cmd(conn, chan->ident,
4139                                         L2CAP_CONN_REQ, sizeof(req), &req);
4140                         } else {
4141                                 __clear_chan_timer(chan);
4142                                 __set_chan_timer(chan, HZ / 10);
4143                         }
4144                 } else if (chan->state == BT_CONNECT2) {
4145                         struct l2cap_conn_rsp rsp;
4146                         __u16 res, stat;
4147
4148                         if (!status) {
4149                                 if (bt_sk(sk)->defer_setup) {
4150                                         struct sock *parent = bt_sk(sk)->parent;
4151                                         res = L2CAP_CR_PEND;
4152                                         stat = L2CAP_CS_AUTHOR_PEND;
4153                                         if (parent)
4154                                                 parent->sk_data_ready(parent, 0);
4155                                 } else {
4156                                         l2cap_state_change(chan, BT_CONFIG);
4157                                         res = L2CAP_CR_SUCCESS;
4158                                         stat = L2CAP_CS_NO_INFO;
4159                                 }
4160                         } else {
4161                                 l2cap_state_change(chan, BT_DISCONN);
4162                                 __set_chan_timer(chan, HZ / 10);
4163                                 res = L2CAP_CR_SEC_BLOCK;
4164                                 stat = L2CAP_CS_NO_INFO;
4165                         }
4166
4167                         rsp.scid   = cpu_to_le16(chan->dcid);
4168                         rsp.dcid   = cpu_to_le16(chan->scid);
4169                         rsp.result = cpu_to_le16(res);
4170                         rsp.status = cpu_to_le16(stat);
4171                         l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
4172                                                         sizeof(rsp), &rsp);
4173                 }
4174
4175                 bh_unlock_sock(sk);
4176         }
4177
4178         read_unlock(&conn->chan_lock);
4179
4180         return 0;
4181 }
4182
4183 static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
4184 {
4185         struct l2cap_conn *conn = hcon->l2cap_data;
4186
4187         if (!conn)
4188                 conn = l2cap_conn_add(hcon, 0);
4189
4190         if (!conn)
4191                 goto drop;
4192
4193         BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
4194
4195         if (!(flags & ACL_CONT)) {
4196                 struct l2cap_hdr *hdr;
4197                 struct l2cap_chan *chan;
4198                 u16 cid;
4199                 int len;
4200
4201                 if (conn->rx_len) {
4202                         BT_ERR("Unexpected start frame (len %d)", skb->len);
4203                         kfree_skb(conn->rx_skb);
4204                         conn->rx_skb = NULL;
4205                         conn->rx_len = 0;
4206                         l2cap_conn_unreliable(conn, ECOMM);
4207                 }
4208
4209                 /* Start fragment always begin with Basic L2CAP header */
4210                 if (skb->len < L2CAP_HDR_SIZE) {
4211                         BT_ERR("Frame is too short (len %d)", skb->len);
4212                         l2cap_conn_unreliable(conn, ECOMM);
4213                         goto drop;
4214                 }
4215
4216                 hdr = (struct l2cap_hdr *) skb->data;
4217                 len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
4218                 cid = __le16_to_cpu(hdr->cid);
4219
4220                 if (len == skb->len) {
4221                         /* Complete frame received */
4222                         l2cap_recv_frame(conn, skb);
4223                         return 0;
4224                 }
4225
4226                 BT_DBG("Start: total len %d, frag len %d", len, skb->len);
4227
4228                 if (skb->len > len) {
4229                         BT_ERR("Frame is too long (len %d, expected len %d)",
4230                                 skb->len, len);
4231                         l2cap_conn_unreliable(conn, ECOMM);
4232                         goto drop;
4233                 }
4234
4235                 chan = l2cap_get_chan_by_scid(conn, cid);
4236
4237                 if (chan && chan->sk) {
4238                         struct sock *sk = chan->sk;
4239
4240                         if (chan->imtu < len - L2CAP_HDR_SIZE) {
4241                                 BT_ERR("Frame exceeding recv MTU (len %d, "
4242                                                         "MTU %d)", len,
4243                                                         chan->imtu);
4244                                 bh_unlock_sock(sk);
4245                                 l2cap_conn_unreliable(conn, ECOMM);
4246                                 goto drop;
4247                         }
4248                         bh_unlock_sock(sk);
4249                 }
4250
4251                 /* Allocate skb for the complete frame (with header) */
4252                 conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
4253                 if (!conn->rx_skb)
4254                         goto drop;
4255
4256                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4257                                                                 skb->len);
4258                 conn->rx_len = len - skb->len;
4259         } else {
4260                 BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
4261
4262                 if (!conn->rx_len) {
4263                         BT_ERR("Unexpected continuation frame (len %d)", skb->len);
4264                         l2cap_conn_unreliable(conn, ECOMM);
4265                         goto drop;
4266                 }
4267
4268                 if (skb->len > conn->rx_len) {
4269                         BT_ERR("Fragment is too long (len %d, expected %d)",
4270                                         skb->len, conn->rx_len);
4271                         kfree_skb(conn->rx_skb);
4272                         conn->rx_skb = NULL;
4273                         conn->rx_len = 0;
4274                         l2cap_conn_unreliable(conn, ECOMM);
4275                         goto drop;
4276                 }
4277
4278                 skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4279                                                                 skb->len);
4280                 conn->rx_len -= skb->len;
4281
4282                 if (!conn->rx_len) {
4283                         /* Complete frame received */
4284                         l2cap_recv_frame(conn, conn->rx_skb);
4285                         conn->rx_skb = NULL;
4286                 }
4287         }
4288
4289 drop:
4290         kfree_skb(skb);
4291         return 0;
4292 }
4293
4294 static int l2cap_debugfs_show(struct seq_file *f, void *p)
4295 {
4296         struct l2cap_chan *c;
4297
4298         read_lock_bh(&chan_list_lock);
4299
4300         list_for_each_entry(c, &chan_list, global_l) {
4301                 struct sock *sk = c->sk;
4302
4303                 seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4304                                         batostr(&bt_sk(sk)->src),
4305                                         batostr(&bt_sk(sk)->dst),
4306                                         c->state, __le16_to_cpu(c->psm),
4307                                         c->scid, c->dcid, c->imtu, c->omtu,
4308                                         c->sec_level, c->mode);
4309 }
4310
4311         read_unlock_bh(&chan_list_lock);
4312
4313         return 0;
4314 }
4315
4316 static int l2cap_debugfs_open(struct inode *inode, struct file *file)
4317 {
4318         return single_open(file, l2cap_debugfs_show, inode->i_private);
4319 }
4320
4321 static const struct file_operations l2cap_debugfs_fops = {
4322         .open           = l2cap_debugfs_open,
4323         .read           = seq_read,
4324         .llseek         = seq_lseek,
4325         .release        = single_release,
4326 };
4327
4328 static struct dentry *l2cap_debugfs;
4329
4330 static struct hci_proto l2cap_hci_proto = {
4331         .name           = "L2CAP",
4332         .id             = HCI_PROTO_L2CAP,
4333         .connect_ind    = l2cap_connect_ind,
4334         .connect_cfm    = l2cap_connect_cfm,
4335         .disconn_ind    = l2cap_disconn_ind,
4336         .disconn_cfm    = l2cap_disconn_cfm,
4337         .security_cfm   = l2cap_security_cfm,
4338         .recv_acldata   = l2cap_recv_acldata
4339 };
4340
4341 int __init l2cap_init(void)
4342 {
4343         int err;
4344
4345         err = l2cap_init_sockets();
4346         if (err < 0)
4347                 return err;
4348
4349         err = hci_register_proto(&l2cap_hci_proto);
4350         if (err < 0) {
4351                 BT_ERR("L2CAP protocol registration failed");
4352                 bt_sock_unregister(BTPROTO_L2CAP);
4353                 goto error;
4354         }
4355
4356         if (bt_debugfs) {
4357                 l2cap_debugfs = debugfs_create_file("l2cap", 0444,
4358                                         bt_debugfs, NULL, &l2cap_debugfs_fops);
4359                 if (!l2cap_debugfs)
4360                         BT_ERR("Failed to create L2CAP debug file");
4361         }
4362
4363         return 0;
4364
4365 error:
4366         l2cap_cleanup_sockets();
4367         return err;
4368 }
4369
4370 void l2cap_exit(void)
4371 {
4372         debugfs_remove(l2cap_debugfs);
4373
4374         if (hci_unregister_proto(&l2cap_hci_proto) < 0)
4375                 BT_ERR("L2CAP protocol unregistration failed");
4376
4377         l2cap_cleanup_sockets();
4378 }
4379
4380 module_param(disable_ertm, bool, 0644);
4381 MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");