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