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