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