l2cap_core.c 98.7 KB
Newer Older
1
/*
L
Linus Torvalds 已提交
2 3
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2000-2001 Qualcomm Incorporated
4
   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5
   Copyright (C) 2010 Google Inc.
L
Linus Torvalds 已提交
6 7 8 9 10 11 12 13 14 15 16

   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
17 18 19
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
L
Linus Torvalds 已提交
20 21
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

22 23
   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
L
Linus Torvalds 已提交
24 25 26
   SOFTWARE IS DISCLAIMED.
*/

27
/* Bluetooth L2CAP core. */
L
Linus Torvalds 已提交
28 29 30 31

#include <linux/module.h>

#include <linux/types.h>
32
#include <linux/capability.h>
L
Linus Torvalds 已提交
33 34 35 36 37 38 39 40 41 42 43
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/poll.h>
#include <linux/fcntl.h>
#include <linux/init.h>
#include <linux/interrupt.h>
#include <linux/socket.h>
#include <linux/skbuff.h>
#include <linux/list.h>
44
#include <linux/device.h>
45 46
#include <linux/debugfs.h>
#include <linux/seq_file.h>
47
#include <linux/uaccess.h>
48
#include <linux/crc16.h>
L
Linus Torvalds 已提交
49 50 51 52 53 54 55 56 57
#include <net/sock.h>

#include <asm/system.h>
#include <asm/unaligned.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>

58
int disable_ertm;
59

60
static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
61
static u8 l2cap_fixed_chan[8] = { 0x02, };
L
Linus Torvalds 已提交
62

63 64
static struct workqueue_struct *_busy_wq;

65 66
static LIST_HEAD(chan_list);
static DEFINE_RWLOCK(chan_list_lock);
L
Linus Torvalds 已提交
67

68 69
static void l2cap_busy_work(struct work_struct *work);

L
Linus Torvalds 已提交
70 71
static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
				u8 code, u8 ident, u16 dlen, void *data);
72 73
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
								void *data);
74
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
75 76
static void l2cap_send_disconn_req(struct l2cap_conn *conn,
				struct l2cap_chan *chan, int err);
L
Linus Torvalds 已提交
77

78 79
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);

80
/* ---- L2CAP channels ---- */
81
static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
82
{
83
	struct l2cap_chan *c;
84 85

	list_for_each_entry(c, &conn->chan_l, list) {
86
		if (c->dcid == cid)
87
			return c;
88
	}
89 90
	return NULL;

91 92
}

93
static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
94
{
95
	struct l2cap_chan *c;
96 97

	list_for_each_entry(c, &conn->chan_l, list) {
98
		if (c->scid == cid)
99
			return c;
100
	}
101
	return NULL;
102 103 104 105
}

/* Find channel with given SCID.
 * Returns locked socket */
106
static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
107
{
108
	struct l2cap_chan *c;
109 110 111

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_scid(conn, cid);
112 113
	if (c)
		bh_lock_sock(c->sk);
114
	read_unlock(&conn->chan_lock);
115
	return c;
116 117
}

118
static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
119
{
120
	struct l2cap_chan *c;
121 122

	list_for_each_entry(c, &conn->chan_l, list) {
123
		if (c->ident == ident)
124
			return c;
125
	}
126
	return NULL;
127 128
}

129
static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
130
{
131
	struct l2cap_chan *c;
132 133 134

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_ident(conn, ident);
135 136
	if (c)
		bh_lock_sock(c->sk);
137
	read_unlock(&conn->chan_lock);
138
	return c;
139 140
}

141
static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
142
{
143
	struct l2cap_chan *c;
144

145 146
	list_for_each_entry(c, &chan_list, global_l) {
		if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
147 148 149
			goto found;
	}

150
	c = NULL;
151
found:
152
	return c;
153 154 155 156
}

int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
{
157 158
	int err;

159
	write_lock_bh(&chan_list_lock);
160

161
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
162 163
		err = -EADDRINUSE;
		goto done;
164 165
	}

166 167 168 169 170 171 172 173 174
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

		err = -EINVAL;
		for (p = 0x1001; p < 0x1100; p += 2)
175
			if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
176 177 178 179 180 181
				chan->psm   = cpu_to_le16(p);
				chan->sport = cpu_to_le16(p);
				err = 0;
				break;
			}
	}
182

183
done:
184
	write_unlock_bh(&chan_list_lock);
185
	return err;
186 187 188 189
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
190
	write_lock_bh(&chan_list_lock);
191 192 193

	chan->scid = scid;

194
	write_unlock_bh(&chan_list_lock);
195 196 197 198

	return 0;
}

199
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
200
{
201
	u16 cid = L2CAP_CID_DYN_START;
202

203
	for (; cid < L2CAP_CID_DYN_END; cid++) {
204
		if (!__l2cap_get_chan_by_scid(conn, cid))
205 206 207 208 209 210
			return cid;
	}

	return 0;
}

211 212 213 214 215 216 217 218
static void l2cap_chan_set_timer(struct l2cap_chan *chan, long timeout)
{
       BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->sk->sk_state,
								 timeout);
       if (!mod_timer(&chan->chan_timer, jiffies + timeout))
	       sock_hold(chan->sk);
}

219
static void l2cap_chan_clear_timer(struct l2cap_chan *chan)
220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252
{
       BT_DBG("chan %p state %d", chan, chan->sk->sk_state);

       if (timer_pending(&chan->chan_timer) && del_timer(&chan->chan_timer))
	       __sock_put(chan->sk);
}

static void l2cap_chan_timeout(unsigned long arg)
{
	struct l2cap_chan *chan = (struct l2cap_chan *) arg;
	struct sock *sk = chan->sk;
	int reason;

	BT_DBG("chan %p state %d", chan, sk->sk_state);

	bh_lock_sock(sk);

	if (sock_owned_by_user(sk)) {
		/* sk is owned by user. Try again later */
		l2cap_chan_set_timer(chan, HZ / 5);
		bh_unlock_sock(sk);
		sock_put(sk);
		return;
	}

	if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
		reason = ECONNREFUSED;
	else if (sk->sk_state == BT_CONNECT &&
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

253
	l2cap_chan_close(chan, reason);
254 255 256 257 258 259 260

	bh_unlock_sock(sk);

	l2cap_sock_kill(sk);
	sock_put(sk);
}

261
struct l2cap_chan *l2cap_chan_create(struct sock *sk)
262 263 264 265 266 267 268 269 270
{
	struct l2cap_chan *chan;

	chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
	if (!chan)
		return NULL;

	chan->sk = sk;

271 272 273 274
	write_lock_bh(&chan_list_lock);
	list_add(&chan->global_l, &chan_list);
	write_unlock_bh(&chan_list_lock);

275 276
	setup_timer(&chan->chan_timer, l2cap_chan_timeout, (unsigned long) chan);

277 278 279
	return chan;
}

280
void l2cap_chan_destroy(struct l2cap_chan *chan)
281
{
282 283 284 285
	write_lock_bh(&chan_list_lock);
	list_del(&chan->global_l);
	write_unlock_bh(&chan_list_lock);

286 287 288
	kfree(chan);
}

289
static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
290
{
291
	struct sock *sk = chan->sk;
292

293
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
294
			chan->psm, chan->dcid);
295

296 297
	conn->disc_reason = 0x13;

298
	chan->conn = conn;
299

300
	if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
301 302
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
303
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
304 305
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
306 307
		} else {
			/* Alloc CID for connection-oriented socket */
308
			chan->scid = l2cap_alloc_cid(conn);
309
			chan->omtu = L2CAP_DEFAULT_MTU;
310
		}
311
	} else if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
312
		/* Connectionless socket */
313 314
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
315
		chan->omtu = L2CAP_DEFAULT_MTU;
316 317
	} else {
		/* Raw socket can send/recv signalling messages only */
318 319
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
320
		chan->omtu = L2CAP_DEFAULT_MTU;
321 322
	}

323 324 325
	sock_hold(sk);

	list_add(&chan->list, &conn->chan_l);
326 327
}

328
/* Delete channel.
329
 * Must be called on the locked socket. */
330
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
331
{
332
	struct sock *sk = chan->sk;
333
	struct l2cap_conn *conn = chan->conn;
334 335
	struct sock *parent = bt_sk(sk)->parent;

336
	l2cap_chan_clear_timer(chan);
337

338
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
339

340
	if (conn) {
341 342 343 344 345 346
		/* Delete from channel list */
		write_lock_bh(&conn->chan_lock);
		list_del(&chan->list);
		write_unlock_bh(&conn->chan_lock);
		__sock_put(sk);

347
		chan->conn = NULL;
348 349 350
		hci_conn_put(conn->hcon);
	}

351
	sk->sk_state = BT_CLOSED;
352 353 354 355 356 357 358 359 360 361
	sock_set_flag(sk, SOCK_ZAPPED);

	if (err)
		sk->sk_err = err;

	if (parent) {
		bt_accept_unlink(sk);
		parent->sk_data_ready(parent, 0);
	} else
		sk->sk_state_change(sk);
362

363 364
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE &&
			chan->conf_state & L2CAP_CONF_INPUT_DONE))
365
		return;
366

367
	skb_queue_purge(&chan->tx_q);
368

369
	if (chan->mode == L2CAP_MODE_ERTM) {
370 371
		struct srej_list *l, *tmp;

372 373 374
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
375

376 377
		skb_queue_purge(&chan->srej_q);
		skb_queue_purge(&chan->busy_q);
378

379
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
380 381 382 383
			list_del(&l->list);
			kfree(l);
		}
	}
384 385
}

386 387 388 389 390 391 392
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

	/* Close not yet accepted channels */
393 394 395 396 397 398 399
	while ((sk = bt_accept_dequeue(parent, NULL))) {
		l2cap_chan_clear_timer(l2cap_pi(sk)->chan);
		lock_sock(sk);
		l2cap_chan_close(l2cap_pi(sk)->chan, ECONNRESET);
		release_sock(sk);
		l2cap_sock_kill(sk);
	}
400 401 402 403 404

	parent->sk_state = BT_CLOSED;
	sock_set_flag(parent, SOCK_ZAPPED);
}

405
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
406 407 408 409 410 411 412 413 414 415 416 417 418
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

	BT_DBG("chan %p state %d socket %p", chan, sk->sk_state, sk->sk_socket);

	switch (sk->sk_state) {
	case BT_LISTEN:
		l2cap_chan_cleanup_listen(sk);
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
419
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
420
					conn->hcon->type == ACL_LINK) {
421
			l2cap_chan_clear_timer(chan);
422
			l2cap_chan_set_timer(chan, sk->sk_sndtimeo);
423 424 425 426 427 428
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
429
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
					conn->hcon->type == ACL_LINK) {
			struct l2cap_conn_rsp rsp;
			__u16 result;

			if (bt_sk(sk)->defer_setup)
				result = L2CAP_CR_SEC_BLOCK;
			else
				result = L2CAP_CR_BAD_PSM;

			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
			rsp.result = cpu_to_le16(result);
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
		}

		l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT:
	case BT_DISCONN:
		l2cap_chan_del(chan, reason);
		break;

	default:
		sock_set_flag(sk, SOCK_ZAPPED);
		break;
	}
}

461
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
462
{
463
	if (chan->chan_type == L2CAP_CHAN_RAW) {
464
		switch (chan->sec_level) {
465 466 467 468 469 470 471
		case BT_SECURITY_HIGH:
			return HCI_AT_DEDICATED_BONDING_MITM;
		case BT_SECURITY_MEDIUM:
			return HCI_AT_DEDICATED_BONDING;
		default:
			return HCI_AT_NO_BONDING;
		}
472
	} else if (chan->psm == cpu_to_le16(0x0001)) {
473 474
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
475

476
		if (chan->sec_level == BT_SECURITY_HIGH)
477
			return HCI_AT_NO_BONDING_MITM;
478
		else
479
			return HCI_AT_NO_BONDING;
480
	} else {
481
		switch (chan->sec_level) {
482
		case BT_SECURITY_HIGH:
483
			return HCI_AT_GENERAL_BONDING_MITM;
484
		case BT_SECURITY_MEDIUM:
485
			return HCI_AT_GENERAL_BONDING;
486
		default:
487
			return HCI_AT_NO_BONDING;
488
		}
489
	}
490 491 492
}

/* Service level security */
493
static inline int l2cap_check_security(struct l2cap_chan *chan)
494
{
495
	struct l2cap_conn *conn = chan->conn;
496 497
	__u8 auth_type;

498
	auth_type = l2cap_get_auth_type(chan);
499

500
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
501 502
}

503
static u8 l2cap_get_ident(struct l2cap_conn *conn)
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524
{
	u8 id;

	/* Get next available identificator.
	 *    1 - 128 are used by kernel.
	 *  129 - 199 are reserved.
	 *  200 - 254 are used by utilities like l2ping, etc.
	 */

	spin_lock_bh(&conn->lock);

	if (++conn->tx_ident > 128)
		conn->tx_ident = 1;

	id = conn->tx_ident;

	spin_unlock_bh(&conn->lock);

	return id;
}

525
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
526 527
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
528
	u8 flags;
529 530 531 532

	BT_DBG("code 0x%2.2x", code);

	if (!skb)
533
		return;
534

535 536 537 538 539
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

540 541
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;

542
	hci_send_acl(conn->hcon, skb, flags);
543 544
}

545
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
546 547 548
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
549
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
550
	struct l2cap_conn *conn = chan->conn;
551
	struct sock *sk = (struct sock *)pi;
552
	int count, hlen = L2CAP_HDR_SIZE + 2;
553
	u8 flags;
554

555 556 557
	if (sk->sk_state != BT_CONNECTED)
		return;

558
	if (chan->fcs == L2CAP_FCS_CRC16)
559
		hlen += 2;
560

561
	BT_DBG("chan %p, control 0x%2.2x", chan, control);
562

563
	count = min_t(unsigned int, conn->mtu, hlen);
564 565
	control |= L2CAP_CTRL_FRAME_TYPE;

566
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
567
		control |= L2CAP_CTRL_FINAL;
568
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
569 570
	}

571
	if (chan->conn_state & L2CAP_CONN_SEND_PBIT) {
572
		control |= L2CAP_CTRL_POLL;
573
		chan->conn_state &= ~L2CAP_CONN_SEND_PBIT;
574 575
	}

576 577
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
578
		return;
579 580

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
581
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
582
	lh->cid = cpu_to_le16(chan->dcid);
583 584
	put_unaligned_le16(control, skb_put(skb, 2));

585
	if (chan->fcs == L2CAP_FCS_CRC16) {
586 587 588 589
		u16 fcs = crc16(0, (u8 *)lh, count - 2);
		put_unaligned_le16(fcs, skb_put(skb, 2));
	}

590 591 592 593 594
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

595 596
	bt_cb(skb)->force_active = chan->force_active;

597
	hci_send_acl(chan->conn->hcon, skb, flags);
598 599
}

600
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
601
{
602
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
603
		control |= L2CAP_SUPER_RCV_NOT_READY;
604
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
605
	} else
606 607
		control |= L2CAP_SUPER_RCV_READY;

608
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
609

610
	l2cap_send_sframe(chan, control);
611 612
}

613
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
614
{
615
	return !(chan->conf_state & L2CAP_CONF_CONNECT_PEND);
616 617
}

618
static void l2cap_do_start(struct l2cap_chan *chan)
619
{
620
	struct l2cap_conn *conn = chan->conn;
621 622

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
623 624 625
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

626 627
		if (l2cap_check_security(chan) &&
				__l2cap_no_conn_pending(chan)) {
628
			struct l2cap_conn_req req;
629 630
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
631

632
			chan->ident = l2cap_get_ident(conn);
633
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
634

635 636
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
637
		}
638 639 640 641 642 643 644 645 646 647 648 649 650 651 652
	} else {
		struct l2cap_info_req req;
		req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
		conn->info_ident = l2cap_get_ident(conn);

		mod_timer(&conn->info_timer, jiffies +
					msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

		l2cap_send_cmd(conn, conn->info_ident,
					L2CAP_INFO_REQ, sizeof(req), &req);
	}
}

653 654 655
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
656
	if (!disable_ertm)
657 658 659 660 661 662 663 664 665 666 667 668
		local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;

	switch (mode) {
	case L2CAP_MODE_ERTM:
		return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
	case L2CAP_MODE_STREAMING:
		return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
	default:
		return 0x00;
	}
}

669
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
670
{
671
	struct sock *sk;
672 673
	struct l2cap_disconn_req req;

674 675 676
	if (!conn)
		return;

677 678
	sk = chan->sk;

679
	if (chan->mode == L2CAP_MODE_ERTM) {
680 681 682
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
683 684
	}

685 686
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
687 688
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
689 690

	sk->sk_state = BT_DISCONN;
691
	sk->sk_err = err;
692 693
}

L
Linus Torvalds 已提交
694
/* ---- L2CAP connections ---- */
695 696
static void l2cap_conn_start(struct l2cap_conn *conn)
{
697
	struct l2cap_chan *chan, *tmp;
698 699 700

	BT_DBG("conn %p", conn);

701
	read_lock(&conn->chan_lock);
702

703
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
704
		struct sock *sk = chan->sk;
705

706 707
		bh_lock_sock(sk);

708
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
709 710 711 712 713
			bh_unlock_sock(sk);
			continue;
		}

		if (sk->sk_state == BT_CONNECT) {
714
			struct l2cap_conn_req req;
715

716
			if (!l2cap_check_security(chan) ||
717
					!__l2cap_no_conn_pending(chan)) {
718 719 720
				bh_unlock_sock(sk);
				continue;
			}
721

722
			if (!l2cap_mode_supported(chan->mode,
723
					conn->feat_mask)
724
					&& chan->conf_state &
725
					L2CAP_CONF_STATE2_DEVICE) {
726
				/* l2cap_chan_close() calls list_del(chan)
727 728
				 * so release the lock */
				read_unlock_bh(&conn->chan_lock);
729
				 l2cap_chan_close(chan, ECONNRESET);
730
				read_lock_bh(&conn->chan_lock);
731 732
				bh_unlock_sock(sk);
				continue;
733
			}
734

735 736
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
737

738
			chan->ident = l2cap_get_ident(conn);
739
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
740

741 742
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
743

744 745
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
746
			char buf[128];
747 748
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
749

750
			if (l2cap_check_security(chan)) {
751 752 753 754 755 756 757 758 759 760 761
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					rsp.result = cpu_to_le16(L2CAP_CR_PEND);
					rsp.status = cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
					parent->sk_data_ready(parent, 0);

				} else {
					sk->sk_state = BT_CONFIG;
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
762 763 764 765 766
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

767 768
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
769

770
			if (chan->conf_state & L2CAP_CONF_REQ_SENT ||
771 772 773 774 775
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

776
			chan->conf_state |= L2CAP_CONF_REQ_SENT;
777
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
778 779
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
780 781 782 783 784
		}

		bh_unlock_sock(sk);
	}

785
	read_unlock(&conn->chan_lock);
786 787
}

788 789 790
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
791
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
792
{
793
	struct l2cap_chan *c, *c1 = NULL;
794

795
	read_lock(&chan_list_lock);
796

797 798
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
799

800 801 802
		if (state && sk->sk_state != state)
			continue;

803
		if (c->scid == cid) {
804
			/* Exact match. */
805 806 807 808
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
809 810 811

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
812
				c1 = c;
813 814
		}
	}
815

816
	read_unlock(&chan_list_lock);
817

818
	return c1;
819 820 821 822
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
823
	struct sock *parent, *sk;
824
	struct l2cap_chan *chan, *pchan;
825 826 827 828

	BT_DBG("");

	/* Check if we have socket listening on cid */
829
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
830
							conn->src);
831
	if (!pchan)
832 833
		return;

834 835
	parent = pchan->sk;

836 837
	bh_lock_sock(parent);

838 839 840 841 842 843 844 845 846 847
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
	if (!sk)
		goto clean;

848
	chan = l2cap_chan_create(sk);
849 850 851 852 853
	if (!chan) {
		l2cap_sock_kill(sk);
		goto clean;
	}

854 855
	l2cap_pi(sk)->chan = chan;

856
	write_lock_bh(&conn->chan_lock);
857 858 859 860

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
861

862 863 864
	bacpy(&bt_sk(sk)->src, conn->src);
	bacpy(&bt_sk(sk)->dst, conn->dst);

865 866
	bt_accept_enqueue(parent, sk);

867 868
	__l2cap_chan_add(conn, chan);

869
	l2cap_chan_set_timer(chan, sk->sk_sndtimeo);
870 871 872 873

	sk->sk_state = BT_CONNECTED;
	parent->sk_data_ready(parent, 0);

874
	write_unlock_bh(&conn->chan_lock);
875 876 877 878 879

clean:
	bh_unlock_sock(parent);
}

880 881
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
882
	struct l2cap_chan *chan;
883

884
	BT_DBG("conn %p", conn);
885

886 887 888
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

889
	read_lock(&conn->chan_lock);
890

891
	list_for_each_entry(chan, &conn->chan_l, list) {
892
		struct sock *sk = chan->sk;
893

894
		bh_lock_sock(sk);
895

896
		if (conn->hcon->type == LE_LINK) {
897
			l2cap_chan_clear_timer(chan);
898 899 900 901
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		}

902
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
903
			l2cap_chan_clear_timer(chan);
904 905 906
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		} else if (sk->sk_state == BT_CONNECT)
907
			l2cap_do_start(chan);
908

909
		bh_unlock_sock(sk);
910
	}
911

912
	read_unlock(&conn->chan_lock);
913 914 915 916 917
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
918
	struct l2cap_chan *chan;
919 920 921

	BT_DBG("conn %p", conn);

922
	read_lock(&conn->chan_lock);
923

924
	list_for_each_entry(chan, &conn->chan_l, list) {
925
		struct sock *sk = chan->sk;
926

927
		if (chan->force_reliable)
928 929 930
			sk->sk_err = err;
	}

931
	read_unlock(&conn->chan_lock);
932 933 934 935 936 937
}

static void l2cap_info_timeout(unsigned long arg)
{
	struct l2cap_conn *conn = (void *) arg;

938
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
939
	conn->info_ident = 0;
940

941 942 943
	l2cap_conn_start(conn);
}

L
Linus Torvalds 已提交
944 945
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
946
	struct l2cap_conn *conn = hcon->l2cap_data;
L
Linus Torvalds 已提交
947

948
	if (conn || status)
L
Linus Torvalds 已提交
949 950
		return conn;

951 952
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
	if (!conn)
L
Linus Torvalds 已提交
953 954 955 956 957
		return NULL;

	hcon->l2cap_data = conn;
	conn->hcon = hcon;

958 959
	BT_DBG("hcon %p conn %p", hcon, conn);

960 961 962 963 964
	if (hcon->hdev->le_mtu && hcon->type == LE_LINK)
		conn->mtu = hcon->hdev->le_mtu;
	else
		conn->mtu = hcon->hdev->acl_mtu;

L
Linus Torvalds 已提交
965 966 967
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

968 969
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
970
	spin_lock_init(&conn->lock);
971 972 973
	rwlock_init(&conn->chan_lock);

	INIT_LIST_HEAD(&conn->chan_l);
L
Linus Torvalds 已提交
974

975 976
	if (hcon->type != LE_LINK)
		setup_timer(&conn->info_timer, l2cap_info_timeout,
D
Dave Young 已提交
977 978
						(unsigned long) conn);

979 980
	conn->disc_reason = 0x13;

L
Linus Torvalds 已提交
981 982 983
	return conn;
}

984
static void l2cap_conn_del(struct hci_conn *hcon, int err)
L
Linus Torvalds 已提交
985
{
986
	struct l2cap_conn *conn = hcon->l2cap_data;
987
	struct l2cap_chan *chan, *l;
L
Linus Torvalds 已提交
988 989
	struct sock *sk;

990 991
	if (!conn)
		return;
L
Linus Torvalds 已提交
992 993 994

	BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);

995
	kfree_skb(conn->rx_skb);
L
Linus Torvalds 已提交
996 997

	/* Kill channels */
998
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
999
		sk = chan->sk;
L
Linus Torvalds 已提交
1000
		bh_lock_sock(sk);
1001
		l2cap_chan_del(chan, err);
L
Linus Torvalds 已提交
1002 1003 1004 1005
		bh_unlock_sock(sk);
		l2cap_sock_kill(sk);
	}

1006 1007
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
		del_timer_sync(&conn->info_timer);
1008

L
Linus Torvalds 已提交
1009 1010 1011 1012
	hcon->l2cap_data = NULL;
	kfree(conn);
}

1013
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1014
{
1015
	write_lock_bh(&conn->chan_lock);
1016
	__l2cap_chan_add(conn, chan);
1017
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
1018 1019 1020 1021 1022 1023 1024
}

/* ---- Socket interface ---- */

/* Find socket with psm and source bdaddr.
 * Returns closest match.
 */
1025
static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm, bdaddr_t *src)
L
Linus Torvalds 已提交
1026
{
1027
	struct l2cap_chan *c, *c1 = NULL;
L
Linus Torvalds 已提交
1028

1029
	read_lock(&chan_list_lock);
1030

1031 1032
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1033

L
Linus Torvalds 已提交
1034 1035 1036
		if (state && sk->sk_state != state)
			continue;

1037
		if (c->psm == psm) {
L
Linus Torvalds 已提交
1038
			/* Exact match. */
1039
			if (!bacmp(&bt_sk(sk)->src, src)) {
1040
				read_unlock(&chan_list_lock);
1041 1042
				return c;
			}
L
Linus Torvalds 已提交
1043 1044 1045

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1046
				c1 = c;
L
Linus Torvalds 已提交
1047 1048 1049
		}
	}

1050
	read_unlock(&chan_list_lock);
1051

1052
	return c1;
L
Linus Torvalds 已提交
1053 1054
}

1055
int l2cap_chan_connect(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1056
{
1057
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1058 1059 1060 1061 1062
	bdaddr_t *src = &bt_sk(sk)->src;
	bdaddr_t *dst = &bt_sk(sk)->dst;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1063
	__u8 auth_type;
1064
	int err;
L
Linus Torvalds 已提交
1065

1066
	BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
1067
							chan->psm);
L
Linus Torvalds 已提交
1068

1069 1070
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1071 1072 1073 1074
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

1075
	auth_type = l2cap_get_auth_type(chan);
1076

1077
	if (chan->dcid == L2CAP_CID_LE_DATA)
1078
		hcon = hci_connect(hdev, LE_LINK, dst,
1079
					chan->sec_level, auth_type);
1080 1081
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1082
					chan->sec_level, auth_type);
1083

1084 1085
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1086
		goto done;
1087
	}
L
Linus Torvalds 已提交
1088 1089 1090 1091

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1092
		err = -ENOMEM;
L
Linus Torvalds 已提交
1093 1094 1095 1096 1097 1098
		goto done;
	}

	/* Update source addr of the socket */
	bacpy(src, conn->src);

1099 1100
	l2cap_chan_add(conn, chan);

L
Linus Torvalds 已提交
1101
	sk->sk_state = BT_CONNECT;
1102
	l2cap_chan_set_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1103 1104

	if (hcon->state == BT_CONNECTED) {
1105
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1106
			l2cap_chan_clear_timer(chan);
1107
			if (l2cap_check_security(chan))
1108
				sk->sk_state = BT_CONNECTED;
1109
		} else
1110
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1111 1112
	}

1113 1114
	err = 0;

L
Linus Torvalds 已提交
1115 1116 1117 1118 1119 1120
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

1121
int __l2cap_wait_ack(struct sock *sk)
1122
{
1123
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1124 1125 1126 1127
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1128
	add_wait_queue(sk_sleep(sk), &wait);
1129
	while ((chan->unacked_frames > 0 && chan->conn)) {
1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148
		set_current_state(TASK_INTERRUPTIBLE);

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
			break;
		}

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock(sk);

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1149
	remove_wait_queue(sk_sleep(sk), &wait);
1150 1151 1152
	return err;
}

1153 1154
static void l2cap_monitor_timeout(unsigned long arg)
{
1155 1156
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1157

1158
	BT_DBG("chan %p", chan);
1159

1160
	bh_lock_sock(sk);
1161
	if (chan->retry_count >= chan->remote_max_tx) {
1162
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1163
		bh_unlock_sock(sk);
1164 1165 1166
		return;
	}

1167
	chan->retry_count++;
1168 1169
	__mod_monitor_timer();

1170
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1171
	bh_unlock_sock(sk);
1172 1173 1174 1175
}

static void l2cap_retrans_timeout(unsigned long arg)
{
1176 1177
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1178

1179
	BT_DBG("chan %p", chan);
1180

1181
	bh_lock_sock(sk);
1182
	chan->retry_count = 1;
1183 1184
	__mod_monitor_timer();

1185
	chan->conn_state |= L2CAP_CONN_WAIT_F;
1186

1187
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1188
	bh_unlock_sock(sk);
1189 1190
}

1191
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1192
{
1193
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1194

1195
	while ((skb = skb_peek(&chan->tx_q)) &&
1196
			chan->unacked_frames) {
1197
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1198
			break;
L
Linus Torvalds 已提交
1199

1200
		skb = skb_dequeue(&chan->tx_q);
1201
		kfree_skb(skb);
L
Linus Torvalds 已提交
1202

1203
		chan->unacked_frames--;
1204
	}
L
Linus Torvalds 已提交
1205

1206
	if (!chan->unacked_frames)
1207
		del_timer(&chan->retrans_timer);
1208
}
L
Linus Torvalds 已提交
1209

1210
void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1211
{
1212
	struct hci_conn *hcon = chan->conn->hcon;
1213
	u16 flags;
1214

1215
	BT_DBG("chan %p, skb %p len %d", chan, skb, skb->len);
L
Linus Torvalds 已提交
1216

1217
	if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1218 1219 1220 1221
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

1222
	bt_cb(skb)->force_active = chan->force_active;
1223
	hci_send_acl(hcon, skb, flags);
1224 1225
}

1226
void l2cap_streaming_send(struct l2cap_chan *chan)
1227
{
1228
	struct sk_buff *skb;
1229
	u16 control, fcs;
1230

1231
	while ((skb = skb_dequeue(&chan->tx_q))) {
1232
		control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1233
		control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1234
		put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1235

1236
		if (chan->fcs == L2CAP_FCS_CRC16) {
1237 1238
			fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
			put_unaligned_le16(fcs, skb->data + skb->len - 2);
1239 1240
		}

1241
		l2cap_do_send(chan, skb);
1242

1243
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1244 1245 1246
	}
}

1247
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1248 1249 1250 1251
{
	struct sk_buff *skb, *tx_skb;
	u16 control, fcs;

1252
	skb = skb_peek(&chan->tx_q);
1253 1254
	if (!skb)
		return;
1255

1256 1257
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1258 1259
			break;

1260
		if (skb_queue_is_last(&chan->tx_q, skb))
1261
			return;
1262

1263
	} while ((skb = skb_queue_next(&chan->tx_q, skb)));
1264

1265 1266
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1267
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1268 1269 1270 1271 1272 1273
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
	control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1274
	control &= L2CAP_CTRL_SAR;
1275

1276
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1277
		control |= L2CAP_CTRL_FINAL;
1278
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1279
	}
1280

1281
	control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1282
			| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1283

1284 1285
	put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1286
	if (chan->fcs == L2CAP_FCS_CRC16) {
1287 1288 1289 1290
		fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
		put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
	}

1291
	l2cap_do_send(chan, tx_skb);
1292 1293
}

1294
int l2cap_ertm_send(struct l2cap_chan *chan)
1295 1296
{
	struct sk_buff *skb, *tx_skb;
1297
	struct sock *sk = chan->sk;
1298
	u16 control, fcs;
1299
	int nsent = 0;
1300

1301 1302
	if (sk->sk_state != BT_CONNECTED)
		return -ENOTCONN;
1303

1304
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1305

1306 1307
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1308
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1309 1310 1311
			break;
		}

1312 1313
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1314 1315
		bt_cb(skb)->retries++;

1316
		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1317 1318
		control &= L2CAP_CTRL_SAR;

1319
		if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1320
			control |= L2CAP_CTRL_FINAL;
1321
			chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1322
		}
1323 1324
		control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
				| (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1325 1326
		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1327

1328
		if (chan->fcs == L2CAP_FCS_CRC16) {
1329 1330 1331 1332
			fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
			put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
		}

1333
		l2cap_do_send(chan, tx_skb);
1334

1335
		__mod_retrans_timer();
1336

1337 1338
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1339

1340
		if (bt_cb(skb)->retries == 1)
1341
			chan->unacked_frames++;
1342

1343
		chan->frames_sent++;
1344

1345 1346
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1347
		else
1348
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1349 1350

		nsent++;
1351 1352
	}

1353 1354 1355
	return nsent;
}

1356
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1357 1358 1359
{
	int ret;

1360 1361
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1362

1363
	chan->next_tx_seq = chan->expected_ack_seq;
1364
	ret = l2cap_ertm_send(chan);
1365 1366 1367
	return ret;
}

1368
static void l2cap_send_ack(struct l2cap_chan *chan)
1369 1370 1371
{
	u16 control = 0;

1372
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1373

1374
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
1375
		control |= L2CAP_SUPER_RCV_NOT_READY;
1376 1377
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
		l2cap_send_sframe(chan, control);
1378
		return;
1379
	}
1380

1381
	if (l2cap_ertm_send(chan) > 0)
1382 1383 1384
		return;

	control |= L2CAP_SUPER_RCV_READY;
1385
	l2cap_send_sframe(chan, control);
1386 1387
}

1388
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1389 1390 1391 1392 1393 1394 1395
{
	struct srej_list *tail;
	u16 control;

	control = L2CAP_SUPER_SELECT_REJECT;
	control |= L2CAP_CTRL_FINAL;

1396
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1397 1398
	control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;

1399
	l2cap_send_sframe(chan, control);
1400 1401
}

1402 1403
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
1404
	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1405 1406
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1407

1408
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1409
		return -EFAULT;
L
Linus Torvalds 已提交
1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420

	sent += count;
	len  -= count;

	/* Continuation fragments (no L2CAP header) */
	frag = &skb_shinfo(skb)->frag_list;
	while (len) {
		count = min_t(unsigned int, conn->mtu, len);

		*frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
		if (!*frag)
1421
			return err;
1422 1423
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1424 1425 1426 1427 1428 1429 1430 1431

		sent += count;
		len  -= count;

		frag = &(*frag)->next;
	}

	return sent;
1432
}
L
Linus Torvalds 已提交
1433

1434
struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1435
{
1436
	struct sock *sk = chan->sk;
1437
	struct l2cap_conn *conn = chan->conn;
1438 1439 1440 1441 1442 1443 1444 1445 1446 1447
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE + 2;
	struct l2cap_hdr *lh;

	BT_DBG("sk %p len %d", sk, (int)len);

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1448
		return ERR_PTR(err);
1449 1450 1451

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1452
	lh->cid = cpu_to_le16(chan->dcid);
1453
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1454
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1455 1456 1457 1458 1459 1460 1461 1462 1463

	err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1464
struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1465
{
1466
	struct sock *sk = chan->sk;
1467
	struct l2cap_conn *conn = chan->conn;
1468 1469 1470 1471 1472 1473 1474 1475 1476 1477
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

	BT_DBG("sk %p len %d", sk, (int)len);

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1478
		return ERR_PTR(err);
1479 1480 1481

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1482
	lh->cid = cpu_to_le16(chan->dcid);
1483 1484 1485 1486 1487 1488 1489 1490 1491 1492
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

	err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1493
struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1494
{
1495
	struct sock *sk = chan->sk;
1496
	struct l2cap_conn *conn = chan->conn;
1497 1498 1499 1500 1501 1502
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE + 2;
	struct l2cap_hdr *lh;

	BT_DBG("sk %p len %d", sk, (int)len);

1503 1504 1505
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1506 1507 1508
	if (sdulen)
		hlen += 2;

1509
	if (chan->fcs == L2CAP_FCS_CRC16)
1510 1511
		hlen += 2;

1512 1513 1514 1515
	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1516
		return ERR_PTR(err);
1517 1518 1519

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1520
	lh->cid = cpu_to_le16(chan->dcid);
1521 1522
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(control, skb_put(skb, 2));
1523 1524
	if (sdulen)
		put_unaligned_le16(sdulen, skb_put(skb, 2));
1525 1526 1527 1528 1529 1530

	err = l2cap_skbuff_fromiovec(sk, msg, len, count, skb);
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1531

1532
	if (chan->fcs == L2CAP_FCS_CRC16)
1533 1534
		put_unaligned_le16(0, skb_put(skb, 2));

1535
	bt_cb(skb)->retries = 0;
1536
	return skb;
L
Linus Torvalds 已提交
1537 1538
}

1539
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1540 1541 1542 1543 1544 1545
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
	u16 control;
	size_t size = 0;

1546
	skb_queue_head_init(&sar_queue);
1547
	control = L2CAP_SDU_START;
1548
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1549 1550 1551 1552
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1553 1554
	len -= chan->remote_mps;
	size += chan->remote_mps;
1555 1556 1557 1558

	while (len > 0) {
		size_t buflen;

1559
		if (len > chan->remote_mps) {
1560
			control = L2CAP_SDU_CONTINUE;
1561
			buflen = chan->remote_mps;
1562
		} else {
1563
			control = L2CAP_SDU_END;
1564 1565 1566
			buflen = len;
		}

1567
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1568 1569 1570 1571 1572 1573 1574 1575 1576
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1577 1578 1579
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1580 1581 1582 1583

	return size;
}

1584 1585 1586 1587 1588 1589 1590
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
{
	struct sk_buff *skb;
	u16 control;
	int err;

	/* Connectionless channel */
1591
	if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662
		skb = l2cap_create_connless_pdu(chan, msg, len);
		if (IS_ERR(skb))
			return PTR_ERR(skb);

		l2cap_do_send(chan, skb);
		return len;
	}

	switch (chan->mode) {
	case L2CAP_MODE_BASIC:
		/* Check outgoing MTU */
		if (len > chan->omtu)
			return -EMSGSIZE;

		/* Create a basic PDU */
		skb = l2cap_create_basic_pdu(chan, msg, len);
		if (IS_ERR(skb))
			return PTR_ERR(skb);

		l2cap_do_send(chan, skb);
		err = len;
		break;

	case L2CAP_MODE_ERTM:
	case L2CAP_MODE_STREAMING:
		/* Entire SDU fits into one PDU */
		if (len <= chan->remote_mps) {
			control = L2CAP_SDU_UNSEGMENTED;
			skb = l2cap_create_iframe_pdu(chan, msg, len, control,
									0);
			if (IS_ERR(skb))
				return PTR_ERR(skb);

			__skb_queue_tail(&chan->tx_q, skb);

			if (chan->tx_send_head == NULL)
				chan->tx_send_head = skb;

		} else {
			/* Segment SDU into multiples PDUs */
			err = l2cap_sar_segment_sdu(chan, msg, len);
			if (err < 0)
				return err;
		}

		if (chan->mode == L2CAP_MODE_STREAMING) {
			l2cap_streaming_send(chan);
			err = len;
			break;
		}

		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
				(chan->conn_state & L2CAP_CONN_WAIT_F)) {
			err = len;
			break;
		}

		err = l2cap_ertm_send(chan);
		if (err >= 0)
			err = len;

		break;

	default:
		BT_DBG("bad state %1.1x", chan->mode);
		err = -EBADFD;
	}

	return err;
}

L
Linus Torvalds 已提交
1663 1664 1665
static void l2cap_chan_ready(struct sock *sk)
{
	struct sock *parent = bt_sk(sk)->parent;
1666
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
L
Linus Torvalds 已提交
1667 1668 1669

	BT_DBG("sk %p, parent %p", sk, parent);

1670
	chan->conf_state = 0;
1671
	l2cap_chan_clear_timer(chan);
L
Linus Torvalds 已提交
1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690

	if (!parent) {
		/* Outgoing channel.
		 * Wake up socket sleeping on connect.
		 */
		sk->sk_state = BT_CONNECTED;
		sk->sk_state_change(sk);
	} else {
		/* Incoming channel.
		 * Wake up socket sleeping on accept.
		 */
		parent->sk_data_ready(parent, 0);
	}
}

/* Copy frame to all raw sockets on that connection */
static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct sk_buff *nskb;
1691
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1692 1693 1694

	BT_DBG("conn %p", conn);

1695 1696
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1697
		struct sock *sk = chan->sk;
1698
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
1699 1700 1701 1702 1703
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1704 1705
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1706 1707 1708 1709 1710
			continue;

		if (sock_queue_rcv_skb(sk, nskb))
			kfree_skb(nskb);
	}
1711
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722
}

/* ---- L2CAP signalling commands ---- */
static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
				u8 code, u8 ident, u16 dlen, void *data)
{
	struct sk_buff *skb, **frag;
	struct l2cap_cmd_hdr *cmd;
	struct l2cap_hdr *lh;
	int len, count;

1723 1724
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1725 1726 1727 1728 1729 1730 1731 1732 1733

	len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
	count = min_t(unsigned int, conn->mtu, len);

	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
		return NULL;

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1734
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1735 1736 1737 1738 1739

	if (conn->hcon->type == LE_LINK)
		lh->cid = cpu_to_le16(L2CAP_CID_LE_SIGNALING);
	else
		lh->cid = cpu_to_le16(L2CAP_CID_SIGNALING);
L
Linus Torvalds 已提交
1740 1741 1742 1743

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1744
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794

	if (dlen) {
		count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
		memcpy(skb_put(skb, count), data, count);
		data += count;
	}

	len -= skb->len;

	/* Continuation fragments (no L2CAP header) */
	frag = &skb_shinfo(skb)->frag_list;
	while (len) {
		count = min_t(unsigned int, conn->mtu, len);

		*frag = bt_skb_alloc(count, GFP_ATOMIC);
		if (!*frag)
			goto fail;

		memcpy(skb_put(*frag, count), data, count);

		len  -= count;
		data += count;

		frag = &(*frag)->next;
	}

	return skb;

fail:
	kfree_skb(skb);
	return NULL;
}

static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen, unsigned long *val)
{
	struct l2cap_conf_opt *opt = *ptr;
	int len;

	len = L2CAP_CONF_OPT_SIZE + opt->len;
	*ptr += len;

	*type = opt->type;
	*olen = opt->len;

	switch (opt->len) {
	case 1:
		*val = *((u8 *) opt->val);
		break;

	case 2:
1795
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1796 1797 1798
		break;

	case 4:
1799
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825
		break;

	default:
		*val = (unsigned long) opt->val;
		break;
	}

	BT_DBG("type 0x%2.2x len %d val 0x%lx", *type, opt->len, *val);
	return len;
}

static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
{
	struct l2cap_conf_opt *opt = *ptr;

	BT_DBG("type 0x%2.2x len %d val 0x%lx", type, len, val);

	opt->type = type;
	opt->len  = len;

	switch (len) {
	case 1:
		*((u8 *) opt->val)  = val;
		break;

	case 2:
1826
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1827 1828 1829
		break;

	case 4:
1830
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1831 1832 1833 1834 1835 1836 1837 1838 1839 1840
		break;

	default:
		memcpy(opt->val, (void *) val, len);
		break;
	}

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1841 1842
static void l2cap_ack_timeout(unsigned long arg)
{
1843
	struct l2cap_chan *chan = (void *) arg;
1844

1845 1846 1847
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1848 1849
}

1850
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1851
{
1852 1853
	struct sock *sk = chan->sk;

1854
	chan->expected_ack_seq = 0;
1855
	chan->unacked_frames = 0;
1856
	chan->buffer_seq = 0;
1857 1858
	chan->num_acked = 0;
	chan->frames_sent = 0;
1859

1860 1861 1862 1863 1864
	setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
							(unsigned long) chan);
	setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
							(unsigned long) chan);
	setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1865

1866 1867
	skb_queue_head_init(&chan->srej_q);
	skb_queue_head_init(&chan->busy_q);
1868

1869 1870
	INIT_LIST_HEAD(&chan->srej_l);

1871
	INIT_WORK(&chan->busy_work, l2cap_busy_work);
1872 1873

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1874 1875
}

1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888
static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
{
	switch (mode) {
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
		if (l2cap_mode_supported(mode, remote_feat_mask))
			return mode;
		/* fall through */
	default:
		return L2CAP_MODE_BASIC;
	}
}

1889
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1890 1891
{
	struct l2cap_conf_req *req = data;
1892
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
1893 1894
	void *ptr = req->data;

1895
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1896

1897
	if (chan->num_conf_req || chan->num_conf_rsp)
1898 1899
		goto done;

1900
	switch (chan->mode) {
1901 1902
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1903
		if (chan->conf_state & L2CAP_CONF_STATE2_DEVICE)
1904 1905
			break;

1906
		/* fall through */
1907
	default:
1908
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1909 1910 1911 1912
		break;
	}

done:
1913 1914
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1915

1916
	switch (chan->mode) {
1917
	case L2CAP_MODE_BASIC:
1918 1919
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1920 1921
			break;

1922 1923 1924 1925 1926 1927 1928
		rfc.mode            = L2CAP_MODE_BASIC;
		rfc.txwin_size      = 0;
		rfc.max_transmit    = 0;
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
		rfc.max_pdu_size    = 0;

1929 1930
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
1931 1932 1933 1934
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
1935 1936
		rfc.txwin_size      = chan->tx_win;
		rfc.max_transmit    = chan->max_tx;
1937 1938
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1939
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1940 1941
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1942

1943 1944 1945
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);

1946
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1947 1948
			break;

1949
		if (chan->fcs == L2CAP_FCS_NONE ||
1950
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1951 1952
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1953
		}
1954 1955 1956 1957 1958 1959 1960 1961
		break;

	case L2CAP_MODE_STREAMING:
		rfc.mode            = L2CAP_MODE_STREAMING;
		rfc.txwin_size      = 0;
		rfc.max_transmit    = 0;
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1962
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1963 1964
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1965

1966 1967 1968
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);

1969
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1970 1971
			break;

1972
		if (chan->fcs == L2CAP_FCS_NONE ||
1973
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1974 1975
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1976
		}
1977 1978
		break;
	}
L
Linus Torvalds 已提交
1979

1980
	req->dcid  = cpu_to_le16(chan->dcid);
1981
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
1982 1983 1984 1985

	return ptr - data;
}

1986
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1987
{
1988 1989
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
1990 1991
	void *req = chan->conf_req;
	int len = chan->conf_len;
1992 1993
	int type, hint, olen;
	unsigned long val;
1994
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1995
	u16 mtu = L2CAP_DEFAULT_MTU;
1996
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
1997

1998
	BT_DBG("chan %p", chan);
1999

2000 2001
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2002

2003
		hint  = type & L2CAP_CONF_HINT;
2004
		type &= L2CAP_CONF_MASK;
2005 2006 2007

		switch (type) {
		case L2CAP_CONF_MTU:
2008
			mtu = val;
2009 2010 2011
			break;

		case L2CAP_CONF_FLUSH_TO:
2012
			chan->flush_to = val;
2013 2014 2015 2016 2017
			break;

		case L2CAP_CONF_QOS:
			break;

2018 2019 2020 2021 2022
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2023 2024
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2025
				chan->conf_state |= L2CAP_CONF_NO_FCS_RECV;
2026 2027 2028

			break;

2029 2030 2031 2032 2033 2034 2035 2036 2037 2038
		default:
			if (hint)
				break;

			result = L2CAP_CONF_UNKNOWN;
			*((u8 *) ptr++) = type;
			break;
		}
	}

2039
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2040 2041
		goto done;

2042
	switch (chan->mode) {
2043 2044
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2045
		if (!(chan->conf_state & L2CAP_CONF_STATE2_DEVICE)) {
2046
			chan->mode = l2cap_select_mode(rfc.mode,
2047
					chan->conn->feat_mask);
2048 2049 2050
			break;
		}

2051
		if (chan->mode != rfc.mode)
2052
			return -ECONNREFUSED;
2053

2054 2055 2056 2057
		break;
	}

done:
2058
	if (chan->mode != rfc.mode) {
2059
		result = L2CAP_CONF_UNACCEPT;
2060
		rfc.mode = chan->mode;
2061

2062
		if (chan->num_conf_rsp == 1)
2063 2064 2065 2066 2067 2068 2069
			return -ECONNREFUSED;

		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
	}


2070 2071 2072 2073
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2074 2075 2076
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2077
			chan->omtu = mtu;
2078
			chan->conf_state |= L2CAP_CONF_MTU_DONE;
2079
		}
2080
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2081

2082 2083
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2084
			chan->fcs = L2CAP_FCS_NONE;
2085
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
2086 2087 2088
			break;

		case L2CAP_MODE_ERTM:
2089 2090
			chan->remote_tx_win = rfc.txwin_size;
			chan->remote_max_tx = rfc.max_transmit;
2091

2092 2093
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2094

2095
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2096

2097 2098 2099 2100
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2101

2102
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
2103 2104 2105 2106

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);

2107 2108 2109
			break;

		case L2CAP_MODE_STREAMING:
2110 2111
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2112

2113
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2114

2115
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
2116 2117 2118 2119

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);

2120 2121 2122
			break;

		default:
2123 2124
			result = L2CAP_CONF_UNACCEPT;

2125
			memset(&rfc, 0, sizeof(rfc));
2126
			rfc.mode = chan->mode;
2127
		}
2128

2129
		if (result == L2CAP_CONF_SUCCESS)
2130
			chan->conf_state |= L2CAP_CONF_OUTPUT_DONE;
2131
	}
2132
	rsp->scid   = cpu_to_le16(chan->dcid);
2133 2134 2135 2136
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2137 2138
}

2139
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2140 2141 2142 2143 2144 2145 2146
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2147
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2148 2149 2150 2151 2152 2153 2154 2155

	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);

		switch (type) {
		case L2CAP_CONF_MTU:
			if (val < L2CAP_DEFAULT_MIN_MTU) {
				*result = L2CAP_CONF_UNACCEPT;
2156
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2157
			} else
2158 2159
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2160 2161 2162
			break;

		case L2CAP_CONF_FLUSH_TO:
2163
			chan->flush_to = val;
2164
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2165
							2, chan->flush_to);
2166 2167 2168 2169 2170 2171
			break;

		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *)val, olen);

2172
			if ((chan->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
2173
							rfc.mode != chan->mode)
2174 2175
				return -ECONNREFUSED;

2176
			chan->fcs = 0;
2177 2178 2179 2180 2181 2182 2183

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
		}
	}

2184
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2185 2186
		return -ECONNREFUSED;

2187
	chan->mode = rfc.mode;
2188

2189 2190 2191
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2192 2193 2194
			chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
			chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2195 2196
			break;
		case L2CAP_MODE_STREAMING:
2197
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2198 2199 2200
		}
	}

2201
	req->dcid   = cpu_to_le16(chan->dcid);
2202 2203 2204 2205 2206
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2207
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2208 2209 2210 2211
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2212
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2213

2214
	rsp->scid   = cpu_to_le16(chan->dcid);
2215
	rsp->result = cpu_to_le16(result);
2216
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2217 2218 2219 2220

	return ptr - data;
}

2221
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2222 2223
{
	struct l2cap_conn_rsp rsp;
2224
	struct l2cap_conn *conn = chan->conn;
2225 2226
	u8 buf[128];

2227 2228
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2229 2230 2231 2232 2233
	rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
	rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
	l2cap_send_cmd(conn, chan->ident,
				L2CAP_CONN_RSP, sizeof(rsp), &rsp);

2234
	if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2235 2236
		return;

2237
	chan->conf_state |= L2CAP_CONF_REQ_SENT;
2238 2239 2240 2241 2242
	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

2243
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2244 2245 2246 2247 2248
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2249
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2250

2251
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267
		return;

	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);

		switch (type) {
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *)val, olen);
			goto done;
		}
	}

done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2268 2269 2270
		chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
		chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2271 2272
		break;
	case L2CAP_MODE_STREAMING:
2273
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2274 2275 2276
	}
}

2277 2278 2279 2280 2281 2282 2283 2284 2285 2286
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_cmd_rej *rej = (struct l2cap_cmd_rej *) data;

	if (rej->reason != 0x0000)
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
		del_timer(&conn->info_timer);
2287 2288

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2289
		conn->info_ident = 0;
2290

2291 2292 2293 2294 2295 2296
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2297 2298 2299 2300
static inline int l2cap_connect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
	struct l2cap_conn_rsp rsp;
2301
	struct l2cap_chan *chan = NULL, *pchan;
2302
	struct sock *parent, *sk = NULL;
2303
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2304 2305

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2306
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2307 2308 2309 2310

	BT_DBG("psm 0x%2.2x scid 0x%4.4x", psm, scid);

	/* Check if we have socket listening on psm */
2311 2312
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2313 2314 2315 2316
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2317 2318
	parent = pchan->sk;

2319 2320
	bh_lock_sock(parent);

2321 2322 2323
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2324
		conn->disc_reason = 0x05;
2325 2326 2327 2328
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2329 2330 2331 2332
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2333
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2334 2335 2336
		goto response;
	}

2337
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
L
Linus Torvalds 已提交
2338 2339 2340
	if (!sk)
		goto response;

2341
	chan = l2cap_chan_create(sk);
2342 2343 2344 2345 2346
	if (!chan) {
		l2cap_sock_kill(sk);
		goto response;
	}

2347 2348
	l2cap_pi(sk)->chan = chan;

2349
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2350 2351

	/* Check if we already have channel with that dcid */
2352 2353
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2354 2355 2356 2357 2358 2359 2360 2361 2362 2363
		sock_set_flag(sk, SOCK_ZAPPED);
		l2cap_sock_kill(sk);
		goto response;
	}

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
	bacpy(&bt_sk(sk)->src, conn->src);
	bacpy(&bt_sk(sk)->dst, conn->dst);
2364 2365
	chan->psm  = psm;
	chan->dcid = scid;
L
Linus Torvalds 已提交
2366

2367 2368
	bt_accept_enqueue(parent, sk);

2369 2370
	__l2cap_chan_add(conn, chan);

2371
	dcid = chan->scid;
L
Linus Torvalds 已提交
2372

2373
	l2cap_chan_set_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
2374

2375
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2376

2377
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2378
		if (l2cap_check_security(chan)) {
2379 2380 2381 2382 2383 2384 2385 2386 2387 2388
			if (bt_sk(sk)->defer_setup) {
				sk->sk_state = BT_CONNECT2;
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
				sk->sk_state = BT_CONFIG;
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2389 2390 2391 2392 2393 2394 2395 2396 2397
		} else {
			sk->sk_state = BT_CONNECT2;
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
		sk->sk_state = BT_CONNECT2;
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2398 2399
	}

2400
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2401 2402 2403 2404 2405

response:
	bh_unlock_sock(parent);

sendresp:
2406 2407 2408 2409
	rsp.scid   = cpu_to_le16(scid);
	rsp.dcid   = cpu_to_le16(dcid);
	rsp.result = cpu_to_le16(result);
	rsp.status = cpu_to_le16(status);
L
Linus Torvalds 已提交
2410
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425

	if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
		struct l2cap_info_req info;
		info.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
		conn->info_ident = l2cap_get_ident(conn);

		mod_timer(&conn->info_timer, jiffies +
					msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

		l2cap_send_cmd(conn, conn->info_ident,
					L2CAP_INFO_REQ, sizeof(info), &info);
	}

2426
	if (chan && !(chan->conf_state & L2CAP_CONF_REQ_SENT) &&
2427 2428
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2429
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2430
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2431 2432
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2433 2434
	}

L
Linus Torvalds 已提交
2435 2436 2437 2438 2439 2440 2441
	return 0;
}

static inline int l2cap_connect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
	u16 scid, dcid, result, status;
2442
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453
	struct sock *sk;
	u8 req[128];

	scid   = __le16_to_cpu(rsp->scid);
	dcid   = __le16_to_cpu(rsp->dcid);
	result = __le16_to_cpu(rsp->result);
	status = __le16_to_cpu(rsp->status);

	BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x", dcid, scid, result, status);

	if (scid) {
2454
		chan = l2cap_get_chan_by_scid(conn, scid);
2455
		if (!chan)
2456
			return -EFAULT;
L
Linus Torvalds 已提交
2457
	} else {
2458
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2459
		if (!chan)
2460
			return -EFAULT;
L
Linus Torvalds 已提交
2461 2462
	}

2463 2464
	sk = chan->sk;

L
Linus Torvalds 已提交
2465 2466 2467
	switch (result) {
	case L2CAP_CR_SUCCESS:
		sk->sk_state = BT_CONFIG;
2468
		chan->ident = 0;
2469
		chan->dcid = dcid;
2470
		chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2471

2472
		if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2473 2474
			break;

2475
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2476

L
Linus Torvalds 已提交
2477
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2478 2479
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2480 2481 2482
		break;

	case L2CAP_CR_PEND:
2483
		chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
2484 2485 2486
		break;

	default:
2487 2488 2489
		/* don't delete l2cap channel if sk is owned by user */
		if (sock_owned_by_user(sk)) {
			sk->sk_state = BT_DISCONN;
2490 2491
			l2cap_chan_clear_timer(chan);
			l2cap_chan_set_timer(chan, HZ / 5);
2492 2493 2494
			break;
		}

2495
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2496 2497 2498 2499 2500 2501 2502
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2503
static inline void set_default_fcs(struct l2cap_chan *chan)
2504
{
2505 2506
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);

2507 2508 2509
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2510
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2511
		chan->fcs = L2CAP_FCS_NONE;
2512
	else if (!(pi->chan->conf_state & L2CAP_CONF_NO_FCS_RECV))
2513
		chan->fcs = L2CAP_FCS_CRC16;
2514 2515
}

2516
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2517 2518 2519 2520
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2521
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2522
	struct sock *sk;
2523
	int len;
L
Linus Torvalds 已提交
2524 2525 2526 2527 2528 2529

	dcid  = __le16_to_cpu(req->dcid);
	flags = __le16_to_cpu(req->flags);

	BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);

2530
	chan = l2cap_get_chan_by_scid(conn, dcid);
2531
	if (!chan)
L
Linus Torvalds 已提交
2532 2533
		return -ENOENT;

2534 2535
	sk = chan->sk;

2536 2537 2538 2539 2540 2541
	if (sk->sk_state != BT_CONFIG) {
		struct l2cap_cmd_rej rej;

		rej.reason = cpu_to_le16(0x0002);
		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2542
		goto unlock;
2543
	}
2544

2545
	/* Reject if config buffer is too small. */
2546
	len = cmd_len - sizeof(*req);
2547
	if (chan->conf_len + len > sizeof(chan->conf_req)) {
2548
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2549
				l2cap_build_conf_rsp(chan, rsp,
2550 2551 2552 2553 2554
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2555 2556
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2557 2558 2559 2560

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2561
				l2cap_build_conf_rsp(chan, rsp,
2562
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2563 2564 2565 2566
		goto unlock;
	}

	/* Complete config. */
2567
	len = l2cap_parse_conf_req(chan, rsp);
2568
	if (len < 0) {
2569
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2570
		goto unlock;
2571
	}
L
Linus Torvalds 已提交
2572

2573
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2574
	chan->num_conf_rsp++;
2575 2576

	/* Reset config buffer. */
2577
	chan->conf_len = 0;
2578

2579
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE))
2580 2581
		goto unlock;

2582
	if (chan->conf_state & L2CAP_CONF_INPUT_DONE) {
2583
		set_default_fcs(chan);
2584

L
Linus Torvalds 已提交
2585
		sk->sk_state = BT_CONNECTED;
2586

2587 2588
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2589
		skb_queue_head_init(&chan->tx_q);
2590
		if (chan->mode == L2CAP_MODE_ERTM)
2591
			l2cap_ertm_init(chan);
2592

L
Linus Torvalds 已提交
2593
		l2cap_chan_ready(sk);
2594 2595 2596
		goto unlock;
	}

2597
	if (!(chan->conf_state & L2CAP_CONF_REQ_SENT)) {
2598
		u8 buf[64];
2599
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
L
Linus Torvalds 已提交
2600
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2601 2602
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613
	}

unlock:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
	u16 scid, flags, result;
2614
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2615
	struct sock *sk;
2616
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2617 2618 2619 2620 2621

	scid   = __le16_to_cpu(rsp->scid);
	flags  = __le16_to_cpu(rsp->flags);
	result = __le16_to_cpu(rsp->result);

2622 2623
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2624

2625
	chan = l2cap_get_chan_by_scid(conn, scid);
2626
	if (!chan)
L
Linus Torvalds 已提交
2627 2628
		return 0;

2629 2630
	sk = chan->sk;

L
Linus Torvalds 已提交
2631 2632
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2633
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2634 2635 2636
		break;

	case L2CAP_CONF_UNACCEPT:
2637
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2638 2639
			char req[64];

2640
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2641
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2642 2643 2644
				goto done;
			}

2645 2646
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2647 2648
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2649
			if (len < 0) {
2650
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2651 2652 2653 2654 2655
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2656
			chan->num_conf_req++;
2657 2658 2659
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2660 2661
		}

2662
	default:
2663
		sk->sk_err = ECONNRESET;
2664
		l2cap_chan_set_timer(chan, HZ * 5);
2665
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2666 2667 2668 2669 2670 2671
		goto done;
	}

	if (flags & 0x01)
		goto done;

2672
	chan->conf_state |= L2CAP_CONF_INPUT_DONE;
L
Linus Torvalds 已提交
2673

2674
	if (chan->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2675
		set_default_fcs(chan);
2676

L
Linus Torvalds 已提交
2677
		sk->sk_state = BT_CONNECTED;
2678 2679
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2680
		skb_queue_head_init(&chan->tx_q);
2681
		if (chan->mode ==  L2CAP_MODE_ERTM)
2682
			l2cap_ertm_init(chan);
2683

L
Linus Torvalds 已提交
2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696
		l2cap_chan_ready(sk);
	}

done:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
	struct l2cap_disconn_rsp rsp;
	u16 dcid, scid;
2697
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2698 2699 2700 2701 2702 2703 2704
	struct sock *sk;

	scid = __le16_to_cpu(req->scid);
	dcid = __le16_to_cpu(req->dcid);

	BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);

2705
	chan = l2cap_get_chan_by_scid(conn, dcid);
2706
	if (!chan)
L
Linus Torvalds 已提交
2707 2708
		return 0;

2709 2710
	sk = chan->sk;

2711 2712
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2713 2714 2715 2716
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2717 2718 2719
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
		sk->sk_state = BT_DISCONN;
2720 2721
		l2cap_chan_clear_timer(chan);
		l2cap_chan_set_timer(chan, HZ / 5);
2722 2723 2724 2725
		bh_unlock_sock(sk);
		return 0;
	}

2726
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2727 2728 2729 2730 2731 2732 2733 2734 2735 2736
	bh_unlock_sock(sk);

	l2cap_sock_kill(sk);
	return 0;
}

static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
	u16 dcid, scid;
2737
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2738 2739 2740 2741 2742 2743 2744
	struct sock *sk;

	scid = __le16_to_cpu(rsp->scid);
	dcid = __le16_to_cpu(rsp->dcid);

	BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);

2745
	chan = l2cap_get_chan_by_scid(conn, scid);
2746
	if (!chan)
L
Linus Torvalds 已提交
2747 2748
		return 0;

2749 2750
	sk = chan->sk;

2751 2752 2753
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
		sk->sk_state = BT_DISCONN;
2754 2755
		l2cap_chan_clear_timer(chan);
		l2cap_chan_set_timer(chan, HZ / 5);
2756 2757 2758 2759
		bh_unlock_sock(sk);
		return 0;
	}

2760
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775
	bh_unlock_sock(sk);

	l2cap_sock_kill(sk);
	return 0;
}

static inline int l2cap_information_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_info_req *req = (struct l2cap_info_req *) data;
	u16 type;

	type = __le16_to_cpu(req->type);

	BT_DBG("type 0x%4.4x", type);

2776 2777
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2778
		u32 feat_mask = l2cap_feat_mask;
2779 2780 2781
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
		rsp->type   = cpu_to_le16(L2CAP_IT_FEAT_MASK);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
2782
		if (!disable_ertm)
2783 2784
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2785
		put_unaligned_le32(feat_mask, rsp->data);
2786 2787
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2788 2789 2790 2791 2792 2793 2794 2795
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
		memcpy(buf + 4, l2cap_fixed_chan, 8);
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2796 2797 2798 2799 2800 2801 2802
	} else {
		struct l2cap_info_rsp rsp;
		rsp.type   = cpu_to_le16(type);
		rsp.result = cpu_to_le16(L2CAP_IR_NOTSUPP);
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(rsp), &rsp);
	}
L
Linus Torvalds 已提交
2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816

	return 0;
}

static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
	u16 type, result;

	type   = __le16_to_cpu(rsp->type);
	result = __le16_to_cpu(rsp->result);

	BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);

2817 2818 2819 2820 2821
	/* L2CAP Info req/rsp are unbound to channels, add extra checks */
	if (cmd->ident != conn->info_ident ||
			conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
		return 0;

2822 2823
	del_timer(&conn->info_timer);

2824 2825 2826 2827 2828 2829 2830 2831 2832
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2833
	if (type == L2CAP_IT_FEAT_MASK) {
2834
		conn->feat_mask = get_unaligned_le32(rsp->data);
2835

2836
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850
			struct l2cap_info_req req;
			req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);

			conn->info_ident = l2cap_get_ident(conn);

			l2cap_send_cmd(conn, conn->info_ident,
					L2CAP_INFO_REQ, sizeof(req), &req);
		} else {
			conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
			conn->info_ident = 0;

			l2cap_conn_start(conn);
		}
	} else if (type == L2CAP_IT_FIXED_CHAN) {
2851
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2852
		conn->info_ident = 0;
2853 2854 2855

		l2cap_conn_start(conn);
	}
2856

L
Linus Torvalds 已提交
2857 2858 2859
	return 0;
}

2860
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887
							u16 to_multiplier)
{
	u16 max_latency;

	if (min > max || min < 6 || max > 3200)
		return -EINVAL;

	if (to_multiplier < 10 || to_multiplier > 3200)
		return -EINVAL;

	if (max >= to_multiplier * 8)
		return -EINVAL;

	max_latency = (to_multiplier * 8 / max) - 1;
	if (latency > 499 || latency > max_latency)
		return -EINVAL;

	return 0;
}

static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
					struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct hci_conn *hcon = conn->hcon;
	struct l2cap_conn_param_update_req *req;
	struct l2cap_conn_param_update_rsp rsp;
	u16 min, max, latency, to_multiplier, cmd_len;
2888
	int err;
2889 2890 2891 2892 2893 2894 2895 2896 2897

	if (!(hcon->link_mode & HCI_LM_MASTER))
		return -EINVAL;

	cmd_len = __le16_to_cpu(cmd->len);
	if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
		return -EPROTO;

	req = (struct l2cap_conn_param_update_req *) data;
2898 2899
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
2900 2901 2902 2903 2904 2905 2906
	latency		= __le16_to_cpu(req->latency);
	to_multiplier	= __le16_to_cpu(req->to_multiplier);

	BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
						min, max, latency, to_multiplier);

	memset(&rsp, 0, sizeof(rsp));
2907 2908 2909

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
2910 2911 2912 2913 2914 2915 2916
		rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
	else
		rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);

	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
							sizeof(rsp), &rsp);

2917 2918 2919
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

2920 2921 2922
	return 0;
}

2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988
static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
{
	int err = 0;

	switch (cmd->code) {
	case L2CAP_COMMAND_REJ:
		l2cap_command_rej(conn, cmd, data);
		break;

	case L2CAP_CONN_REQ:
		err = l2cap_connect_req(conn, cmd, data);
		break;

	case L2CAP_CONN_RSP:
		err = l2cap_connect_rsp(conn, cmd, data);
		break;

	case L2CAP_CONF_REQ:
		err = l2cap_config_req(conn, cmd, cmd_len, data);
		break;

	case L2CAP_CONF_RSP:
		err = l2cap_config_rsp(conn, cmd, data);
		break;

	case L2CAP_DISCONN_REQ:
		err = l2cap_disconnect_req(conn, cmd, data);
		break;

	case L2CAP_DISCONN_RSP:
		err = l2cap_disconnect_rsp(conn, cmd, data);
		break;

	case L2CAP_ECHO_REQ:
		l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
		break;

	case L2CAP_ECHO_RSP:
		break;

	case L2CAP_INFO_REQ:
		err = l2cap_information_req(conn, cmd, data);
		break;

	case L2CAP_INFO_RSP:
		err = l2cap_information_rsp(conn, cmd, data);
		break;

	default:
		BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
		err = -EINVAL;
		break;
	}

	return err;
}

static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
					struct l2cap_cmd_hdr *cmd, u8 *data)
{
	switch (cmd->code) {
	case L2CAP_COMMAND_REJ:
		return 0;

	case L2CAP_CONN_PARAM_UPDATE_REQ:
2989
		return l2cap_conn_param_update_req(conn, cmd, data);
2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001

	case L2CAP_CONN_PARAM_UPDATE_RSP:
		return 0;

	default:
		BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
		return -EINVAL;
	}
}

static inline void l2cap_sig_channel(struct l2cap_conn *conn,
							struct sk_buff *skb)
L
Linus Torvalds 已提交
3002 3003 3004 3005
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3006
	int err;
L
Linus Torvalds 已提交
3007 3008 3009 3010

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3011
		u16 cmd_len;
L
Linus Torvalds 已提交
3012 3013 3014 3015
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3016
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3017

3018
		BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len, cmd.ident);
L
Linus Torvalds 已提交
3019

3020
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3021 3022 3023 3024
			BT_DBG("corrupted command");
			break;
		}

3025 3026 3027 3028
		if (conn->hcon->type == LE_LINK)
			err = l2cap_le_sig_cmd(conn, &cmd, data);
		else
			err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
L
Linus Torvalds 已提交
3029 3030 3031

		if (err) {
			struct l2cap_cmd_rej rej;
3032 3033

			BT_ERR("Wrong link type (%d)", err);
L
Linus Torvalds 已提交
3034 3035

			/* FIXME: Map err to a valid reason */
3036
			rej.reason = cpu_to_le16(0);
L
Linus Torvalds 已提交
3037 3038 3039
			l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
		}

3040 3041
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3042 3043 3044 3045 3046
	}

	kfree_skb(skb);
}

3047
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3048 3049 3050 3051
{
	u16 our_fcs, rcv_fcs;
	int hdr_size = L2CAP_HDR_SIZE + 2;

3052
	if (chan->fcs == L2CAP_FCS_CRC16) {
3053 3054 3055 3056 3057
		skb_trim(skb, skb->len - 2);
		rcv_fcs = get_unaligned_le16(skb->data + skb->len);
		our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);

		if (our_fcs != rcv_fcs)
3058
			return -EBADMSG;
3059 3060 3061 3062
	}
	return 0;
}

3063
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3064 3065 3066
{
	u16 control = 0;

3067
	chan->frames_sent = 0;
3068

3069
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3070

3071
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3072
		control |= L2CAP_SUPER_RCV_NOT_READY;
3073 3074
		l2cap_send_sframe(chan, control);
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
3075 3076
	}

3077 3078
	if (chan->conn_state & L2CAP_CONN_REMOTE_BUSY)
		l2cap_retransmit_frames(chan);
3079

3080
	l2cap_ertm_send(chan);
3081

3082
	if (!(chan->conn_state & L2CAP_CONN_LOCAL_BUSY) &&
3083
			chan->frames_sent == 0) {
3084
		control |= L2CAP_SUPER_RCV_READY;
3085
		l2cap_send_sframe(chan, control);
3086 3087 3088
	}
}

3089
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
3090 3091
{
	struct sk_buff *next_skb;
3092
	int tx_seq_offset, next_tx_seq_offset;
3093 3094 3095 3096

	bt_cb(skb)->tx_seq = tx_seq;
	bt_cb(skb)->sar = sar;

3097
	next_skb = skb_peek(&chan->srej_q);
3098
	if (!next_skb) {
3099
		__skb_queue_tail(&chan->srej_q, skb);
3100
		return 0;
3101 3102
	}

3103
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3104 3105 3106
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

3107
	do {
3108 3109 3110
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3111
		next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
3112
						chan->buffer_seq) % 64;
3113 3114 3115 3116
		if (next_tx_seq_offset < 0)
			next_tx_seq_offset += 64;

		if (next_tx_seq_offset > tx_seq_offset) {
3117
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3118
			return 0;
3119 3120
		}

3121
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3122 3123
			break;

3124
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3125

3126
	__skb_queue_tail(&chan->srej_q, skb);
3127 3128

	return 0;
3129 3130
}

3131
static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3132 3133
{
	struct sk_buff *_skb;
3134
	int err;
3135 3136 3137

	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3138
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
3139 3140
			goto drop;

3141
		return sock_queue_rcv_skb(chan->sk, skb);
3142 3143

	case L2CAP_SDU_START:
3144
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
3145 3146
			goto drop;

3147
		chan->sdu_len = get_unaligned_le16(skb->data);
3148

3149
		if (chan->sdu_len > chan->imtu)
3150 3151
			goto disconnect;

3152 3153
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu)
3154 3155 3156 3157 3158 3159
			return -ENOMEM;

		/* pull sdu_len bytes only after alloc, because of Local Busy
		 * condition we have to be sure that this will be executed
		 * only once, i.e., when alloc does not fail */
		skb_pull(skb, 2);
3160

3161
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3162

3163
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3164
		chan->partial_sdu_len = skb->len;
3165 3166 3167
		break;

	case L2CAP_SDU_CONTINUE:
3168
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3169 3170
			goto disconnect;

3171
		if (!chan->sdu)
3172 3173
			goto disconnect;

3174 3175
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
3176 3177
			goto drop;

3178
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3179

3180 3181 3182
		break;

	case L2CAP_SDU_END:
3183
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3184 3185
			goto disconnect;

3186
		if (!chan->sdu)
3187 3188
			goto disconnect;

3189
		if (!(chan->conn_state & L2CAP_CONN_SAR_RETRY)) {
3190
			chan->partial_sdu_len += skb->len;
3191

3192
			if (chan->partial_sdu_len > chan->imtu)
3193
				goto drop;
3194

3195
			if (chan->partial_sdu_len != chan->sdu_len)
3196
				goto drop;
3197

3198
			memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3199
		}
3200

3201
		_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3202
		if (!_skb) {
3203
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
3204 3205 3206
			return -ENOMEM;
		}

3207
		err = sock_queue_rcv_skb(chan->sk, _skb);
3208
		if (err < 0) {
3209
			kfree_skb(_skb);
3210
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
3211 3212 3213
			return err;
		}

3214 3215
		chan->conn_state &= ~L2CAP_CONN_SAR_RETRY;
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3216

3217
		kfree_skb(chan->sdu);
3218 3219 3220 3221
		break;
	}

	kfree_skb(skb);
3222
	return 0;
3223 3224

drop:
3225 3226
	kfree_skb(chan->sdu);
	chan->sdu = NULL;
3227 3228

disconnect:
3229
	l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3230 3231 3232 3233
	kfree_skb(skb);
	return 0;
}

3234
static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
3235 3236 3237 3238 3239
{
	struct sk_buff *skb;
	u16 control;
	int err;

3240
	while ((skb = skb_dequeue(&chan->busy_q))) {
3241
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3242
		err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3243
		if (err < 0) {
3244
			skb_queue_head(&chan->busy_q, skb);
3245 3246 3247
			return -EBUSY;
		}

3248
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3249 3250
	}

3251
	if (!(chan->conn_state & L2CAP_CONN_RNR_SENT))
3252 3253
		goto done;

3254
	control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3255
	control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3256
	l2cap_send_sframe(chan, control);
3257
	chan->retry_count = 1;
3258

3259
	del_timer(&chan->retrans_timer);
3260 3261
	__mod_monitor_timer();

3262
	chan->conn_state |= L2CAP_CONN_WAIT_F;
3263 3264

done:
3265 3266
	chan->conn_state &= ~L2CAP_CONN_LOCAL_BUSY;
	chan->conn_state &= ~L2CAP_CONN_RNR_SENT;
3267

3268
	BT_DBG("chan %p, Exit local busy", chan);
3269 3270 3271 3272

	return 0;
}

3273 3274 3275
static void l2cap_busy_work(struct work_struct *work)
{
	DECLARE_WAITQUEUE(wait, current);
3276 3277 3278
	struct l2cap_chan *chan =
		container_of(work, struct l2cap_chan, busy_work);
	struct sock *sk = chan->sk;
3279 3280 3281 3282 3283
	int n_tries = 0, timeo = HZ/5, err;
	struct sk_buff *skb;

	lock_sock(sk);

3284
	add_wait_queue(sk_sleep(sk), &wait);
3285
	while ((skb = skb_peek(&chan->busy_q))) {
3286 3287 3288 3289
		set_current_state(TASK_INTERRUPTIBLE);

		if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
			err = -EBUSY;
3290
			l2cap_send_disconn_req(chan->conn, chan, EBUSY);
3291
			break;
3292 3293 3294 3295 3296 3297 3298
		}

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
3299
			break;
3300 3301 3302 3303 3304 3305 3306 3307
		}

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock(sk);

		err = sock_error(sk);
		if (err)
3308
			break;
3309

3310
		if (l2cap_try_push_rx_skb(chan) == 0)
3311 3312 3313 3314
			break;
	}

	set_current_state(TASK_RUNNING);
3315
	remove_wait_queue(sk_sleep(sk), &wait);
3316 3317 3318 3319

	release_sock(sk);
}

3320
static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3321 3322 3323
{
	int sctrl, err;

3324
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3325
		bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3326
		__skb_queue_tail(&chan->busy_q, skb);
3327
		return l2cap_try_push_rx_skb(chan);
3328 3329


3330 3331
	}

3332
	err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3333
	if (err >= 0) {
3334
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3335 3336 3337 3338
		return err;
	}

	/* Busy Condition */
3339
	BT_DBG("chan %p, Enter local busy", chan);
3340

3341
	chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3342
	bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3343
	__skb_queue_tail(&chan->busy_q, skb);
3344

3345
	sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3346
	sctrl |= L2CAP_SUPER_RCV_NOT_READY;
3347
	l2cap_send_sframe(chan, sctrl);
3348

3349
	chan->conn_state |= L2CAP_CONN_RNR_SENT;
3350

3351
	del_timer(&chan->ack_timer);
3352

3353
	queue_work(_busy_wq, &chan->busy_work);
3354 3355 3356 3357

	return err;
}

3358
static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3359 3360 3361 3362
{
	struct sk_buff *_skb;
	int err = -EINVAL;

3363 3364 3365 3366 3367
	/*
	 * TODO: We have to notify the userland if some data is lost with the
	 * Streaming Mode.
	 */

3368 3369
	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3370
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3371
			kfree_skb(chan->sdu);
3372 3373 3374
			break;
		}

3375
		err = sock_queue_rcv_skb(chan->sk, skb);
3376 3377 3378 3379 3380 3381
		if (!err)
			return 0;

		break;

	case L2CAP_SDU_START:
3382
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3383
			kfree_skb(chan->sdu);
3384 3385 3386
			break;
		}

3387
		chan->sdu_len = get_unaligned_le16(skb->data);
3388 3389
		skb_pull(skb, 2);

3390
		if (chan->sdu_len > chan->imtu) {
3391 3392 3393 3394
			err = -EMSGSIZE;
			break;
		}

3395 3396
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu) {
3397 3398 3399 3400
			err = -ENOMEM;
			break;
		}

3401
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3402

3403
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3404
		chan->partial_sdu_len = skb->len;
3405 3406 3407 3408
		err = 0;
		break;

	case L2CAP_SDU_CONTINUE:
3409
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3410 3411
			break;

3412
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3413

3414 3415 3416
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
			kfree_skb(chan->sdu);
3417 3418 3419 3420 3421 3422
		else
			err = 0;

		break;

	case L2CAP_SDU_END:
3423
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3424 3425
			break;

3426
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3427

3428
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3429
		chan->partial_sdu_len += skb->len;
3430

3431
		if (chan->partial_sdu_len > chan->imtu)
3432 3433
			goto drop;

3434 3435
		if (chan->partial_sdu_len == chan->sdu_len) {
			_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3436
			err = sock_queue_rcv_skb(chan->sk, _skb);
3437 3438 3439 3440 3441
			if (err < 0)
				kfree_skb(_skb);
		}
		err = 0;

3442
drop:
3443
		kfree_skb(chan->sdu);
3444 3445 3446 3447 3448 3449 3450
		break;
	}

	kfree_skb(skb);
	return err;
}

3451
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3452 3453
{
	struct sk_buff *skb;
3454
	u16 control;
3455

3456
	while ((skb = skb_peek(&chan->srej_q))) {
3457 3458 3459
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3460
		skb = skb_dequeue(&chan->srej_q);
3461
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3462
		l2cap_ertm_reassembly_sdu(chan, skb, control);
3463 3464
		chan->buffer_seq_srej =
			(chan->buffer_seq_srej + 1) % 64;
3465
		tx_seq = (tx_seq + 1) % 64;
3466 3467 3468
	}
}

3469
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3470 3471 3472 3473
{
	struct srej_list *l, *tmp;
	u16 control;

3474
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3475 3476 3477 3478 3479 3480 3481
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
		control = L2CAP_SUPER_SELECT_REJECT;
		control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3482
		l2cap_send_sframe(chan, control);
3483
		list_del(&l->list);
3484
		list_add_tail(&l->list, &chan->srej_l);
3485 3486 3487
	}
}

3488
static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3489 3490 3491 3492
{
	struct srej_list *new;
	u16 control;

3493
	while (tx_seq != chan->expected_tx_seq) {
3494
		control = L2CAP_SUPER_SELECT_REJECT;
3495
		control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3496
		l2cap_send_sframe(chan, control);
3497 3498

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3499 3500
		new->tx_seq = chan->expected_tx_seq;
		chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3501
		list_add_tail(&new->list, &chan->srej_l);
3502
	}
3503
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3504 3505
}

3506
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3507 3508
{
	u8 tx_seq = __get_txseq(rx_control);
3509
	u8 req_seq = __get_reqseq(rx_control);
3510
	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3511
	int tx_seq_offset, expected_tx_seq_offset;
3512
	int num_to_ack = (chan->tx_win/6) + 1;
3513 3514
	int err = 0;

3515 3516
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
							tx_seq, rx_control);
3517

3518
	if (L2CAP_CTRL_FINAL & rx_control &&
3519
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3520
		del_timer(&chan->monitor_timer);
3521
		if (chan->unacked_frames > 0)
3522
			__mod_retrans_timer();
3523
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3524 3525
	}

3526 3527
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3528

3529
	if (tx_seq == chan->expected_tx_seq)
3530
		goto expected;
3531

3532
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3533 3534 3535 3536
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

	/* invalid tx_seq */
3537
	if (tx_seq_offset >= chan->tx_win) {
3538
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3539 3540 3541
		goto drop;
	}

3542
	if (chan->conn_state == L2CAP_CONN_LOCAL_BUSY)
3543 3544
		goto drop;

3545
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3546
		struct srej_list *first;
3547

3548
		first = list_first_entry(&chan->srej_l,
3549 3550
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3551
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3552
			l2cap_check_srej_gap(chan, tx_seq);
3553 3554 3555 3556

			list_del(&first->list);
			kfree(first);

3557
			if (list_empty(&chan->srej_l)) {
3558
				chan->buffer_seq = chan->buffer_seq_srej;
3559 3560
				chan->conn_state &= ~L2CAP_CONN_SREJ_SENT;
				l2cap_send_ack(chan);
3561
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3562 3563 3564
			}
		} else {
			struct srej_list *l;
3565 3566

			/* duplicated tx_seq */
3567
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3568
				goto drop;
3569

3570
			list_for_each_entry(l, &chan->srej_l, list) {
3571
				if (l->tx_seq == tx_seq) {
3572
					l2cap_resend_srejframe(chan, tx_seq);
3573 3574 3575
					return 0;
				}
			}
3576
			l2cap_send_srejframe(chan, tx_seq);
3577 3578
		}
	} else {
3579
		expected_tx_seq_offset =
3580
			(chan->expected_tx_seq - chan->buffer_seq) % 64;
3581 3582 3583 3584 3585 3586 3587
		if (expected_tx_seq_offset < 0)
			expected_tx_seq_offset += 64;

		/* duplicated tx_seq */
		if (tx_seq_offset < expected_tx_seq_offset)
			goto drop;

3588
		chan->conn_state |= L2CAP_CONN_SREJ_SENT;
3589

3590
		BT_DBG("chan %p, Enter SREJ", chan);
3591

3592
		INIT_LIST_HEAD(&chan->srej_l);
3593
		chan->buffer_seq_srej = chan->buffer_seq;
3594

3595 3596
		__skb_queue_head_init(&chan->srej_q);
		__skb_queue_head_init(&chan->busy_q);
3597
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3598

3599
		chan->conn_state |= L2CAP_CONN_SEND_PBIT;
3600

3601
		l2cap_send_srejframe(chan, tx_seq);
3602

3603
		del_timer(&chan->ack_timer);
3604
	}
3605 3606
	return 0;

3607
expected:
3608
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3609

3610
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3611 3612
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3613
		__skb_queue_tail(&chan->srej_q, skb);
3614 3615 3616
		return 0;
	}

3617
	err = l2cap_push_rx_skb(chan, skb, rx_control);
3618 3619 3620
	if (err < 0)
		return 0;

3621
	if (rx_control & L2CAP_CTRL_FINAL) {
3622 3623
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3624
		else
3625
			l2cap_retransmit_frames(chan);
3626 3627
	}

3628 3629
	__mod_ack_timer();

3630 3631
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3632
		l2cap_send_ack(chan);
3633

3634
	return 0;
3635 3636 3637 3638

drop:
	kfree_skb(skb);
	return 0;
3639 3640
}

3641
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3642
{
3643
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3644 3645
						rx_control);

3646 3647
	chan->expected_ack_seq = __get_reqseq(rx_control);
	l2cap_drop_acked_frames(chan);
3648

3649
	if (rx_control & L2CAP_CTRL_POLL) {
3650 3651 3652
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
			if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3653
					(chan->unacked_frames > 0))
3654 3655
				__mod_retrans_timer();

3656 3657
			chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
			l2cap_send_srejtail(chan);
3658
		} else {
3659
			l2cap_send_i_or_rr_or_rnr(chan);
3660
		}
3661

3662
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3663
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3664

3665 3666
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3667
		else
3668
			l2cap_retransmit_frames(chan);
3669

3670
	} else {
3671
		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3672
				(chan->unacked_frames > 0))
3673
			__mod_retrans_timer();
3674

3675 3676 3677
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT)
			l2cap_send_ack(chan);
3678
		else
3679
			l2cap_ertm_send(chan);
3680 3681
	}
}
3682

3683
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3684 3685
{
	u8 tx_seq = __get_reqseq(rx_control);
3686

3687
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3688

3689
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3690

3691 3692
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3693 3694

	if (rx_control & L2CAP_CTRL_FINAL) {
3695 3696
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3697
		else
3698
			l2cap_retransmit_frames(chan);
3699
	} else {
3700
		l2cap_retransmit_frames(chan);
3701

3702 3703
		if (chan->conn_state & L2CAP_CONN_WAIT_F)
			chan->conn_state |= L2CAP_CONN_REJ_ACT;
3704 3705
	}
}
3706
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3707 3708
{
	u8 tx_seq = __get_reqseq(rx_control);
3709

3710
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3711

3712
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3713

3714
	if (rx_control & L2CAP_CTRL_POLL) {
3715 3716
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3717

3718 3719
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		l2cap_retransmit_one_frame(chan, tx_seq);
3720

3721
		l2cap_ertm_send(chan);
3722

3723
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3724
			chan->srej_save_reqseq = tx_seq;
3725
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3726
		}
3727
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3728
		if ((chan->conn_state & L2CAP_CONN_SREJ_ACT) &&
3729
				chan->srej_save_reqseq == tx_seq)
3730
			chan->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3731
		else
3732
			l2cap_retransmit_one_frame(chan, tx_seq);
3733
	} else {
3734 3735
		l2cap_retransmit_one_frame(chan, tx_seq);
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3736
			chan->srej_save_reqseq = tx_seq;
3737
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3738
		}
3739 3740 3741
	}
}

3742
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3743 3744 3745
{
	u8 tx_seq = __get_reqseq(rx_control);

3746
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3747

3748
	chan->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3749 3750
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3751

3752
	if (rx_control & L2CAP_CTRL_POLL)
3753
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
3754

3755
	if (!(chan->conn_state & L2CAP_CONN_SREJ_SENT)) {
3756
		del_timer(&chan->retrans_timer);
3757
		if (rx_control & L2CAP_CTRL_POLL)
3758
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3759
		return;
3760
	}
3761 3762

	if (rx_control & L2CAP_CTRL_POLL)
3763
		l2cap_send_srejtail(chan);
3764
	else
3765
		l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3766 3767
}

3768
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3769
{
3770
	BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3771

3772
	if (L2CAP_CTRL_FINAL & rx_control &&
3773
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3774
		del_timer(&chan->monitor_timer);
3775
		if (chan->unacked_frames > 0)
3776
			__mod_retrans_timer();
3777
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3778 3779 3780 3781
	}

	switch (rx_control & L2CAP_CTRL_SUPERVISE) {
	case L2CAP_SUPER_RCV_READY:
3782
		l2cap_data_channel_rrframe(chan, rx_control);
3783 3784
		break;

3785
	case L2CAP_SUPER_REJECT:
3786
		l2cap_data_channel_rejframe(chan, rx_control);
3787
		break;
3788

3789
	case L2CAP_SUPER_SELECT_REJECT:
3790
		l2cap_data_channel_srejframe(chan, rx_control);
3791 3792 3793
		break;

	case L2CAP_SUPER_RCV_NOT_READY:
3794
		l2cap_data_channel_rnrframe(chan, rx_control);
3795 3796 3797
		break;
	}

3798
	kfree_skb(skb);
3799 3800 3801
	return 0;
}

3802 3803
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3804
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817
	u16 control;
	u8 req_seq;
	int len, next_tx_seq_offset, req_seq_offset;

	control = get_unaligned_le16(skb->data);
	skb_pull(skb, 2);
	len = skb->len;

	/*
	 * We can just drop the corrupted I-frame here.
	 * Receiver will miss it and start proper recovery
	 * procedures and ask retransmission.
	 */
3818
	if (l2cap_check_fcs(chan, skb))
3819 3820 3821 3822 3823
		goto drop;

	if (__is_sar_start(control) && __is_iframe(control))
		len -= 2;

3824
	if (chan->fcs == L2CAP_FCS_CRC16)
3825 3826
		len -= 2;

3827
	if (len > chan->mps) {
3828
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3829 3830 3831 3832
		goto drop;
	}

	req_seq = __get_reqseq(control);
3833
	req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3834 3835 3836 3837
	if (req_seq_offset < 0)
		req_seq_offset += 64;

	next_tx_seq_offset =
3838
		(chan->next_tx_seq - chan->expected_ack_seq) % 64;
3839 3840 3841 3842 3843
	if (next_tx_seq_offset < 0)
		next_tx_seq_offset += 64;

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3844
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3845 3846 3847 3848 3849
		goto drop;
	}

	if (__is_iframe(control)) {
		if (len < 0) {
3850
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3851 3852 3853
			goto drop;
		}

3854
		l2cap_data_channel_iframe(chan, control, skb);
3855 3856 3857
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3858
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3859 3860 3861
			goto drop;
		}

3862
		l2cap_data_channel_sframe(chan, control, skb);
3863 3864 3865 3866 3867 3868 3869 3870 3871
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3872 3873
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3874
	struct l2cap_chan *chan;
3875
	struct sock *sk = NULL;
3876
	u16 control;
3877 3878
	u8 tx_seq;
	int len;
L
Linus Torvalds 已提交
3879

3880
	chan = l2cap_get_chan_by_scid(conn, cid);
3881
	if (!chan) {
L
Linus Torvalds 已提交
3882 3883 3884 3885
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3886
	sk = chan->sk;
3887

3888
	BT_DBG("chan %p, len %d", chan, skb->len);
L
Linus Torvalds 已提交
3889 3890 3891 3892

	if (sk->sk_state != BT_CONNECTED)
		goto drop;

3893
	switch (chan->mode) {
3894 3895 3896 3897 3898
	case L2CAP_MODE_BASIC:
		/* If socket recv buffers overflows we drop data here
		 * which is *bad* because L2CAP has to be reliable.
		 * But we don't have any other choice. L2CAP doesn't
		 * provide flow control mechanism. */
L
Linus Torvalds 已提交
3899

3900
		if (chan->imtu < skb->len)
3901
			goto drop;
L
Linus Torvalds 已提交
3902

3903 3904 3905 3906 3907
		if (!sock_queue_rcv_skb(sk, skb))
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3908 3909
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3910
		} else {
3911
			if (sk_add_backlog(sk, skb))
3912 3913
				goto drop;
		}
3914

3915
		goto done;
3916

3917 3918 3919 3920 3921
	case L2CAP_MODE_STREAMING:
		control = get_unaligned_le16(skb->data);
		skb_pull(skb, 2);
		len = skb->len;

3922
		if (l2cap_check_fcs(chan, skb))
3923 3924
			goto drop;

3925 3926 3927
		if (__is_sar_start(control))
			len -= 2;

3928
		if (chan->fcs == L2CAP_FCS_CRC16)
3929 3930
			len -= 2;

3931
		if (len > chan->mps || len < 0 || __is_sframe(control))
3932 3933 3934 3935
			goto drop;

		tx_seq = __get_txseq(control);

3936 3937
		if (chan->expected_tx_seq == tx_seq)
			chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3938
		else
3939
			chan->expected_tx_seq = (tx_seq + 1) % 64;
3940

3941
		l2cap_streaming_reassembly_sdu(chan, skb, control);
3942 3943 3944

		goto done;

3945
	default:
3946
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3947 3948
		break;
	}
L
Linus Torvalds 已提交
3949 3950 3951 3952 3953

drop:
	kfree_skb(skb);

done:
3954 3955 3956
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3957 3958 3959
	return 0;
}

3960
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3961
{
3962
	struct sock *sk = NULL;
3963
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3964

3965 3966
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
3967 3968
		goto drop;

3969 3970
	sk = chan->sk;

3971 3972
	bh_lock_sock(sk);

L
Linus Torvalds 已提交
3973 3974 3975 3976 3977
	BT_DBG("sk %p, len %d", sk, skb->len);

	if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
		goto drop;

3978
	if (l2cap_pi(sk)->chan->imtu < skb->len)
L
Linus Torvalds 已提交
3979 3980 3981 3982 3983 3984 3985 3986 3987
		goto drop;

	if (!sock_queue_rcv_skb(sk, skb))
		goto done;

drop:
	kfree_skb(skb);

done:
3988 3989
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3990 3991 3992
	return 0;
}

3993 3994
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
3995
	struct sock *sk = NULL;
3996
	struct l2cap_chan *chan;
3997

3998 3999
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
4000 4001
		goto drop;

4002 4003
	sk = chan->sk;

4004 4005 4006 4007 4008 4009 4010
	bh_lock_sock(sk);

	BT_DBG("sk %p, len %d", sk, skb->len);

	if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
		goto drop;

4011
	if (l2cap_pi(sk)->chan->imtu < skb->len)
4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025
		goto drop;

	if (!sock_queue_rcv_skb(sk, skb))
		goto done;

drop:
	kfree_skb(skb);

done:
	if (sk)
		bh_unlock_sock(sk);
	return 0;
}

L
Linus Torvalds 已提交
4026 4027 4028
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4029 4030
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4031 4032 4033 4034 4035

	skb_pull(skb, L2CAP_HDR_SIZE);
	cid = __le16_to_cpu(lh->cid);
	len = __le16_to_cpu(lh->len);

4036 4037 4038 4039 4040
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4041 4042 4043
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4044
	case L2CAP_CID_LE_SIGNALING:
4045
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4046 4047 4048
		l2cap_sig_channel(conn, skb);
		break;

4049
	case L2CAP_CID_CONN_LESS:
4050
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
4051 4052 4053 4054
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4055 4056 4057 4058
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

L
Linus Torvalds 已提交
4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

/* ---- L2CAP interface with lower layer (HCI) ---- */

static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
{
	int exact = 0, lm1 = 0, lm2 = 0;
4070
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4071 4072

	if (type != ACL_LINK)
4073
		return -EINVAL;
L
Linus Torvalds 已提交
4074 4075 4076 4077

	BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));

	/* Find listening sockets and check their link_mode */
4078 4079 4080
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4081

L
Linus Torvalds 已提交
4082 4083 4084 4085
		if (sk->sk_state != BT_LISTEN)
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4086
			lm1 |= HCI_LM_ACCEPT;
4087
			if (c->role_switch)
4088
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4089
			exact++;
4090 4091
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4092
			if (c->role_switch)
4093 4094
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4095
	}
4096
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4097 4098 4099 4100 4101 4102

	return exact ? lm1 : lm2;
}

static int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
{
4103 4104
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4105 4106
	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);

4107
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4108
		return -EINVAL;
L
Linus Torvalds 已提交
4109 4110 4111 4112 4113

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
4114
	} else
L
Linus Torvalds 已提交
4115 4116 4117 4118 4119
		l2cap_conn_del(hcon, bt_err(status));

	return 0;
}

4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132
static int l2cap_disconn_ind(struct hci_conn *hcon)
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

	if (hcon->type != ACL_LINK || !conn)
		return 0x13;

	return conn->disc_reason;
}

static int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4133 4134 4135
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4136
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4137
		return -EINVAL;
L
Linus Torvalds 已提交
4138 4139

	l2cap_conn_del(hcon, bt_err(reason));
4140

L
Linus Torvalds 已提交
4141 4142 4143
	return 0;
}

4144
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4145
{
4146
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4147 4148
		return;

4149
	if (encrypt == 0x00) {
4150
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4151 4152
			l2cap_chan_clear_timer(chan);
			l2cap_chan_set_timer(chan, HZ * 5);
4153
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4154
			l2cap_chan_close(chan, ECONNREFUSED);
4155
	} else {
4156
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4157
			l2cap_chan_clear_timer(chan);
4158 4159 4160
	}
}

4161
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4162
{
4163
	struct l2cap_conn *conn = hcon->l2cap_data;
4164
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4165

4166
	if (!conn)
L
Linus Torvalds 已提交
4167
		return 0;
4168

L
Linus Torvalds 已提交
4169 4170
	BT_DBG("conn %p", conn);

4171
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4172

4173
	list_for_each_entry(chan, &conn->chan_l, list) {
4174
		struct sock *sk = chan->sk;
4175

L
Linus Torvalds 已提交
4176 4177
		bh_lock_sock(sk);

4178
		if (chan->conf_state & L2CAP_CONF_CONNECT_PEND) {
4179 4180 4181 4182
			bh_unlock_sock(sk);
			continue;
		}

4183
		if (!status && (sk->sk_state == BT_CONNECTED ||
4184
						sk->sk_state == BT_CONFIG)) {
4185
			l2cap_check_encryption(chan, encrypt);
4186 4187 4188 4189
			bh_unlock_sock(sk);
			continue;
		}

4190 4191 4192
		if (sk->sk_state == BT_CONNECT) {
			if (!status) {
				struct l2cap_conn_req req;
4193 4194
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4195

4196
				chan->ident = l2cap_get_ident(conn);
4197
				chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
4198

4199
				l2cap_send_cmd(conn, chan->ident,
4200 4201
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
4202 4203
				l2cap_chan_clear_timer(chan);
				l2cap_chan_set_timer(chan, HZ / 10);
4204 4205 4206 4207
			}
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
			__u16 result;
L
Linus Torvalds 已提交
4208

4209 4210 4211 4212 4213
			if (!status) {
				sk->sk_state = BT_CONFIG;
				result = L2CAP_CR_SUCCESS;
			} else {
				sk->sk_state = BT_DISCONN;
4214
				l2cap_chan_set_timer(chan, HZ / 10);
4215 4216 4217
				result = L2CAP_CR_SEC_BLOCK;
			}

4218 4219
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4220
			rsp.result = cpu_to_le16(result);
4221
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4222 4223
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4224
		}
L
Linus Torvalds 已提交
4225 4226 4227 4228

		bh_unlock_sock(sk);
	}

4229
	read_unlock(&conn->chan_lock);
4230

L
Linus Torvalds 已提交
4231 4232 4233 4234 4235 4236 4237
	return 0;
}

static int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4238 4239 4240 4241
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4242 4243 4244 4245
		goto drop;

	BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);

4246
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4247
		struct l2cap_hdr *hdr;
4248
		struct l2cap_chan *chan;
4249
		u16 cid;
L
Linus Torvalds 已提交
4250 4251 4252 4253 4254 4255 4256 4257 4258 4259
		int len;

		if (conn->rx_len) {
			BT_ERR("Unexpected start frame (len %d)", skb->len);
			kfree_skb(conn->rx_skb);
			conn->rx_skb = NULL;
			conn->rx_len = 0;
			l2cap_conn_unreliable(conn, ECOMM);
		}

4260 4261
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4262 4263 4264 4265 4266 4267 4268
			BT_ERR("Frame is too short (len %d)", skb->len);
			l2cap_conn_unreliable(conn, ECOMM);
			goto drop;
		}

		hdr = (struct l2cap_hdr *) skb->data;
		len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
4269
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285

		if (len == skb->len) {
			/* Complete frame received */
			l2cap_recv_frame(conn, skb);
			return 0;
		}

		BT_DBG("Start: total len %d, frag len %d", len, skb->len);

		if (skb->len > len) {
			BT_ERR("Frame is too long (len %d, expected len %d)",
				skb->len, len);
			l2cap_conn_unreliable(conn, ECOMM);
			goto drop;
		}

4286
		chan = l2cap_get_chan_by_scid(conn, cid);
4287

4288 4289
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4290

4291
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4292 4293
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4294
							chan->imtu);
4295 4296 4297 4298
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4299
			bh_unlock_sock(sk);
4300
		}
4301

L
Linus Torvalds 已提交
4302
		/* Allocate skb for the complete frame (with header) */
4303 4304
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4305 4306
			goto drop;

4307
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4308
								skb->len);
L
Linus Torvalds 已提交
4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328
		conn->rx_len = len - skb->len;
	} else {
		BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);

		if (!conn->rx_len) {
			BT_ERR("Unexpected continuation frame (len %d)", skb->len);
			l2cap_conn_unreliable(conn, ECOMM);
			goto drop;
		}

		if (skb->len > conn->rx_len) {
			BT_ERR("Fragment is too long (len %d, expected %d)",
					skb->len, conn->rx_len);
			kfree_skb(conn->rx_skb);
			conn->rx_skb = NULL;
			conn->rx_len = 0;
			l2cap_conn_unreliable(conn, ECOMM);
			goto drop;
		}

4329
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4330
								skb->len);
L
Linus Torvalds 已提交
4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344
		conn->rx_len -= skb->len;

		if (!conn->rx_len) {
			/* Complete frame received */
			l2cap_recv_frame(conn, conn->rx_skb);
			conn->rx_skb = NULL;
		}
	}

drop:
	kfree_skb(skb);
	return 0;
}

4345
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4346
{
4347
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4348

4349
	read_lock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4350

4351 4352
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4353

4354
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4355 4356
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4357 4358 4359
					sk->sk_state, __le16_to_cpu(c->psm),
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4360
	}
L
Linus Torvalds 已提交
4361

4362
	read_unlock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4363

4364
	return 0;
L
Linus Torvalds 已提交
4365 4366
}

4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379
static int l2cap_debugfs_open(struct inode *inode, struct file *file)
{
	return single_open(file, l2cap_debugfs_show, inode->i_private);
}

static const struct file_operations l2cap_debugfs_fops = {
	.open		= l2cap_debugfs_open,
	.read		= seq_read,
	.llseek		= seq_lseek,
	.release	= single_release,
};

static struct dentry *l2cap_debugfs;
L
Linus Torvalds 已提交
4380 4381 4382 4383 4384 4385 4386

static struct hci_proto l2cap_hci_proto = {
	.name		= "L2CAP",
	.id		= HCI_PROTO_L2CAP,
	.connect_ind	= l2cap_connect_ind,
	.connect_cfm	= l2cap_connect_cfm,
	.disconn_ind	= l2cap_disconn_ind,
4387
	.disconn_cfm	= l2cap_disconn_cfm,
4388
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4389 4390 4391
	.recv_acldata	= l2cap_recv_acldata
};

4392
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4393 4394
{
	int err;
4395

4396
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4397 4398 4399
	if (err < 0)
		return err;

4400
	_busy_wq = create_singlethread_workqueue("l2cap");
4401
	if (!_busy_wq) {
4402
		err = -ENOMEM;
L
Linus Torvalds 已提交
4403 4404 4405 4406 4407 4408 4409 4410 4411 4412
		goto error;
	}

	err = hci_register_proto(&l2cap_hci_proto);
	if (err < 0) {
		BT_ERR("L2CAP protocol registration failed");
		bt_sock_unregister(BTPROTO_L2CAP);
		goto error;
	}

4413 4414 4415 4416 4417 4418
	if (bt_debugfs) {
		l2cap_debugfs = debugfs_create_file("l2cap", 0444,
					bt_debugfs, NULL, &l2cap_debugfs_fops);
		if (!l2cap_debugfs)
			BT_ERR("Failed to create L2CAP debug file");
	}
L
Linus Torvalds 已提交
4419 4420 4421 4422

	return 0;

error:
4423
	destroy_workqueue(_busy_wq);
4424
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4425 4426 4427
	return err;
}

4428
void l2cap_exit(void)
L
Linus Torvalds 已提交
4429
{
4430
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4431

4432 4433 4434
	flush_workqueue(_busy_wq);
	destroy_workqueue(_busy_wq);

L
Linus Torvalds 已提交
4435 4436 4437
	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4438
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4439 4440
}

4441 4442
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");