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