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