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