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