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