l2cap_core.c 108.0 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.
6
   Copyright (C) 2011 ProFUSION Embedded Systems
L
Linus Torvalds 已提交
7 8 9 10 11 12 13 14 15 16 17

   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
18 19 20
   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 已提交
21 22
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

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

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

#include <linux/module.h>

#include <linux/types.h>
33
#include <linux/capability.h>
L
Linus Torvalds 已提交
34 35 36 37 38 39 40 41 42 43 44
#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>
45
#include <linux/device.h>
46 47
#include <linux/debugfs.h>
#include <linux/seq_file.h>
48
#include <linux/uaccess.h>
49
#include <linux/crc16.h>
L
Linus Torvalds 已提交
50 51 52 53 54 55 56
#include <net/sock.h>

#include <asm/unaligned.h>

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>
57
#include <net/bluetooth/smp.h>
L
Linus Torvalds 已提交
58

59
bool disable_ertm;
60

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

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

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

75
/* ---- L2CAP channels ---- */
76

77
static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
78
{
79
	struct l2cap_chan *c;
80

81 82 83
	list_for_each_entry(c, &conn->chan_l, list) {
		if (c->dcid == cid)
			return c;
84
	}
85
	return NULL;
86 87
}

88
static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
89
{
90
	struct l2cap_chan *c;
91

92 93 94
	list_for_each_entry(c, &conn->chan_l, list) {
		if (c->scid == cid)
			return c;
95
	}
96
	return NULL;
97 98 99 100
}

/* Find channel with given SCID.
 * Returns locked socket */
101
static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
102
{
103
	struct l2cap_chan *c;
104

105
	mutex_lock(&conn->chan_lock);
106
	c = __l2cap_get_chan_by_scid(conn, cid);
107 108
	mutex_unlock(&conn->chan_lock);

109
	return c;
110 111
}

112
static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
113
{
114
	struct l2cap_chan *c;
115

116 117 118
	list_for_each_entry(c, &conn->chan_l, list) {
		if (c->ident == ident)
			return c;
119
	}
120
	return NULL;
121 122
}

123
static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
124
{
125
	struct l2cap_chan *c;
126

127
	mutex_lock(&conn->chan_lock);
128
	c = __l2cap_get_chan_by_ident(conn, ident);
129 130
	mutex_unlock(&conn->chan_lock);

131
	return c;
132 133
}

134
static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
135
{
136
	struct l2cap_chan *c;
137

138 139
	list_for_each_entry(c, &chan_list, global_l) {
		if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
140
			return c;
141
	}
142
	return NULL;
143 144 145 146
}

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

149
	write_lock(&chan_list_lock);
150

151
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
152 153
		err = -EADDRINUSE;
		goto done;
154 155
	}

156 157 158 159 160 161 162 163 164
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

		err = -EINVAL;
		for (p = 0x1001; p < 0x1100; p += 2)
165
			if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
166 167 168 169 170 171
				chan->psm   = cpu_to_le16(p);
				chan->sport = cpu_to_le16(p);
				err = 0;
				break;
			}
	}
172

173
done:
174
	write_unlock(&chan_list_lock);
175
	return err;
176 177 178 179
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
180
	write_lock(&chan_list_lock);
181 182 183

	chan->scid = scid;

184
	write_unlock(&chan_list_lock);
185 186 187 188

	return 0;
}

189
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
190
{
191
	u16 cid = L2CAP_CID_DYN_START;
192

193
	for (; cid < L2CAP_CID_DYN_END; cid++) {
194
		if (!__l2cap_get_chan_by_scid(conn, cid))
195 196 197 198 199 200
			return cid;
	}

	return 0;
}

201
static void __l2cap_state_change(struct l2cap_chan *chan, int state)
202
{
203
	BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
204 205
						state_to_string(state));

206 207 208 209
	chan->state = state;
	chan->ops->state_change(chan->data, state);
}

210 211 212 213 214 215 216 217 218
static void l2cap_state_change(struct l2cap_chan *chan, int state)
{
	struct sock *sk = chan->sk;

	lock_sock(sk);
	__l2cap_state_change(chan, state);
	release_sock(sk);
}

219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234
static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
{
	struct sock *sk = chan->sk;

	sk->sk_err = err;
}

static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
{
	struct sock *sk = chan->sk;

	lock_sock(sk);
	__l2cap_chan_set_err(chan, err);
	release_sock(sk);
}

235
static void l2cap_chan_timeout(struct work_struct *work)
236
{
237 238
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							chan_timer.work);
239
	struct l2cap_conn *conn = chan->conn;
240 241
	int reason;

242
	BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
243

244
	mutex_lock(&conn->chan_lock);
245
	l2cap_chan_lock(chan);
246

247
	if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
248
		reason = ECONNREFUSED;
249
	else if (chan->state == BT_CONNECT &&
250 251 252 253 254
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

255
	l2cap_chan_close(chan, reason);
256

257
	l2cap_chan_unlock(chan);
258

259
	chan->ops->close(chan->data);
260 261
	mutex_unlock(&conn->chan_lock);

262
	l2cap_chan_put(chan);
263 264
}

265
struct l2cap_chan *l2cap_chan_create(void)
266 267 268 269 270 271 272
{
	struct l2cap_chan *chan;

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

273 274
	mutex_init(&chan->lock);

275
	write_lock(&chan_list_lock);
276
	list_add(&chan->global_l, &chan_list);
277
	write_unlock(&chan_list_lock);
278

279
	INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
280

281 282
	chan->state = BT_OPEN;

283 284
	atomic_set(&chan->refcnt, 1);

285
	BT_DBG("chan %p", chan);
286

287 288 289
	return chan;
}

290
void l2cap_chan_destroy(struct l2cap_chan *chan)
291
{
292
	write_lock(&chan_list_lock);
293
	list_del(&chan->global_l);
294
	write_unlock(&chan_list_lock);
295

296
	l2cap_chan_put(chan);
297 298
}

299 300 301 302 303 304 305 306 307 308 309
void l2cap_chan_set_defaults(struct l2cap_chan *chan)
{
	chan->fcs  = L2CAP_FCS_CRC16;
	chan->max_tx = L2CAP_DEFAULT_MAX_TX;
	chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
	chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	chan->sec_level = BT_SECURITY_LOW;

	set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
}

310
static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
311
{
312
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
313
	       __le16_to_cpu(chan->psm), chan->dcid);
314

315
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
316

317
	chan->conn = conn;
318

319 320
	switch (chan->chan_type) {
	case L2CAP_CHAN_CONN_ORIENTED:
321 322
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
323
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
324 325
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
326 327
		} else {
			/* Alloc CID for connection-oriented socket */
328
			chan->scid = l2cap_alloc_cid(conn);
329
			chan->omtu = L2CAP_DEFAULT_MTU;
330
		}
331 332 333
		break;

	case L2CAP_CHAN_CONN_LESS:
334
		/* Connectionless socket */
335 336
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
337
		chan->omtu = L2CAP_DEFAULT_MTU;
338 339 340
		break;

	default:
341
		/* Raw socket can send/recv signalling messages only */
342 343
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
344
		chan->omtu = L2CAP_DEFAULT_MTU;
345 346
	}

347 348 349 350 351 352 353
	chan->local_id		= L2CAP_BESTEFFORT_ID;
	chan->local_stype	= L2CAP_SERV_BESTEFFORT;
	chan->local_msdu	= L2CAP_DEFAULT_MAX_SDU_SIZE;
	chan->local_sdu_itime	= L2CAP_DEFAULT_SDU_ITIME;
	chan->local_acc_lat	= L2CAP_DEFAULT_ACC_LAT;
	chan->local_flush_to	= L2CAP_DEFAULT_FLUSH_TO;

354
	l2cap_chan_hold(chan);
355

356
	list_add(&chan->list, &conn->chan_l);
357 358
}

359
static void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
360 361 362
{
	mutex_lock(&conn->chan_lock);
	__l2cap_chan_add(conn, chan);
363
	mutex_unlock(&conn->chan_lock);
364 365
}

366
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
367
{
368
	struct sock *sk = chan->sk;
369
	struct l2cap_conn *conn = chan->conn;
370 371
	struct sock *parent = bt_sk(sk)->parent;

372
	__clear_chan_timer(chan);
373

374
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
375

376
	if (conn) {
377
		/* Delete from channel list */
378
		list_del(&chan->list);
379

380
		l2cap_chan_put(chan);
381

382
		chan->conn = NULL;
383 384 385
		hci_conn_put(conn->hcon);
	}

386 387
	lock_sock(sk);

388
	__l2cap_state_change(chan, BT_CLOSED);
389 390 391
	sock_set_flag(sk, SOCK_ZAPPED);

	if (err)
392
		__l2cap_chan_set_err(chan, err);
393 394 395 396 397 398

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

400 401
	release_sock(sk);

402 403
	if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
			test_bit(CONF_INPUT_DONE, &chan->conf_state)))
404
		return;
405

406
	skb_queue_purge(&chan->tx_q);
407

408
	if (chan->mode == L2CAP_MODE_ERTM) {
409 410
		struct srej_list *l, *tmp;

411 412 413
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
414

415
		skb_queue_purge(&chan->srej_q);
416

417
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
418 419 420 421
			list_del(&l->list);
			kfree(l);
		}
	}
422 423
}

424 425 426 427 428 429 430
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

	/* Close not yet accepted channels */
431
	while ((sk = bt_accept_dequeue(parent, NULL))) {
432
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;
433

434
		l2cap_chan_lock(chan);
435
		__clear_chan_timer(chan);
436
		l2cap_chan_close(chan, ECONNRESET);
437
		l2cap_chan_unlock(chan);
438

439
		chan->ops->close(chan->data);
440
	}
441 442
}

443
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
444 445 446 447
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

448 449
	BT_DBG("chan %p state %s sk %p", chan,
					state_to_string(chan->state), sk);
450

451
	switch (chan->state) {
452
	case BT_LISTEN:
453
		lock_sock(sk);
454
		l2cap_chan_cleanup_listen(sk);
455

456
		__l2cap_state_change(chan, BT_CLOSED);
457
		sock_set_flag(sk, SOCK_ZAPPED);
458
		release_sock(sk);
459 460 461 462
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
463
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
464
					conn->hcon->type == ACL_LINK) {
465
			__set_chan_timer(chan, sk->sk_sndtimeo);
466 467 468 469 470 471
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
472
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
473 474 475 476 477 478 479 480
					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;
481
			l2cap_state_change(chan, BT_DISCONN);
482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499

			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:
500
		lock_sock(sk);
501
		sock_set_flag(sk, SOCK_ZAPPED);
502
		release_sock(sk);
503 504 505 506
		break;
	}
}

507
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
508
{
509
	if (chan->chan_type == L2CAP_CHAN_RAW) {
510
		switch (chan->sec_level) {
511 512 513 514 515 516 517
		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;
		}
518
	} else if (chan->psm == cpu_to_le16(0x0001)) {
519 520
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
521

522
		if (chan->sec_level == BT_SECURITY_HIGH)
523
			return HCI_AT_NO_BONDING_MITM;
524
		else
525
			return HCI_AT_NO_BONDING;
526
	} else {
527
		switch (chan->sec_level) {
528
		case BT_SECURITY_HIGH:
529
			return HCI_AT_GENERAL_BONDING_MITM;
530
		case BT_SECURITY_MEDIUM:
531
			return HCI_AT_GENERAL_BONDING;
532
		default:
533
			return HCI_AT_NO_BONDING;
534
		}
535
	}
536 537 538
}

/* Service level security */
539
int l2cap_chan_check_security(struct l2cap_chan *chan)
540
{
541
	struct l2cap_conn *conn = chan->conn;
542 543
	__u8 auth_type;

544
	auth_type = l2cap_get_auth_type(chan);
545

546
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
547 548
}

549
static u8 l2cap_get_ident(struct l2cap_conn *conn)
550 551 552 553 554 555 556 557 558
{
	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.
	 */

559
	spin_lock(&conn->lock);
560 561 562 563 564 565

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

	id = conn->tx_ident;

566
	spin_unlock(&conn->lock);
567 568 569 570

	return id;
}

571
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
572 573
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
574
	u8 flags;
575 576 577 578

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

	if (!skb)
579
		return;
580

581 582 583 584 585
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

586
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
587
	skb->priority = HCI_PRIO_MAX;
588

589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
	hci_send_acl(conn->hchan, skb, flags);
}

static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
{
	struct hci_conn *hcon = chan->conn->hcon;
	u16 flags;

	BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
							skb->priority);

	if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
					lmp_no_flush_capable(hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;
605

606 607
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
	hci_send_acl(chan->conn->hchan, skb, flags);
608 609
}

610
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
611 612 613
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
614
	struct l2cap_conn *conn = chan->conn;
615
	int count, hlen;
616

617
	if (chan->state != BT_CONNECTED)
618 619
		return;

620 621 622 623 624
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

625
	if (chan->fcs == L2CAP_FCS_CRC16)
626
		hlen += L2CAP_FCS_SIZE;
627

628
	BT_DBG("chan %p, control 0x%8.8x", chan, control);
629

630
	count = min_t(unsigned int, conn->mtu, hlen);
631 632

	control |= __set_sframe(chan);
633

634
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
635
		control |= __set_ctrl_final(chan);
636

637
	if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
638
		control |= __set_ctrl_poll(chan);
639

640 641
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
642
		return;
643 644

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
645
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
646
	lh->cid = cpu_to_le16(chan->dcid);
647 648

	__put_control(chan, control, skb_put(skb, __ctrl_size(chan)));
649

650
	if (chan->fcs == L2CAP_FCS_CRC16) {
651 652
		u16 fcs = crc16(0, (u8 *)lh, count - L2CAP_FCS_SIZE);
		put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
653 654
	}

655 656
	skb->priority = HCI_PRIO_MAX;
	l2cap_do_send(chan, skb);
657 658
}

659
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u32 control)
660
{
661
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
662
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
663
		set_bit(CONN_RNR_SENT, &chan->conn_state);
664
	} else
665
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
666

667
	control |= __set_reqseq(chan, chan->buffer_seq);
668

669
	l2cap_send_sframe(chan, control);
670 671
}

672
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
673
{
674
	return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
675 676
}

677 678 679 680 681 682 683 684 685 686 687 688 689 690 691
static void l2cap_send_conn_req(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;
	struct l2cap_conn_req req;

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

	chan->ident = l2cap_get_ident(conn);

	set_bit(CONF_CONNECT_PEND, &chan->conf_state);

	l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
}

692
static void l2cap_do_start(struct l2cap_chan *chan)
693
{
694
	struct l2cap_conn *conn = chan->conn;
695 696

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
697 698 699
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

700
		if (l2cap_chan_check_security(chan) &&
701 702
				__l2cap_no_conn_pending(chan))
			l2cap_send_conn_req(chan);
703 704 705 706 707 708 709
	} 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);

710
		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
711 712 713 714 715 716

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

717 718 719
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
720
	if (!disable_ertm)
721 722 723 724 725 726 727 728 729 730 731 732
		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;
	}
}

733
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
734
{
735
	struct sock *sk = chan->sk;
736 737
	struct l2cap_disconn_req req;

738 739 740
	if (!conn)
		return;

741
	if (chan->mode == L2CAP_MODE_ERTM) {
742 743 744
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
745 746
	}

747 748
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
749 750
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
751

752
	lock_sock(sk);
753
	__l2cap_state_change(chan, BT_DISCONN);
754
	__l2cap_chan_set_err(chan, err);
755
	release_sock(sk);
756 757
}

L
Linus Torvalds 已提交
758
/* ---- L2CAP connections ---- */
759 760
static void l2cap_conn_start(struct l2cap_conn *conn)
{
761
	struct l2cap_chan *chan, *tmp;
762 763 764

	BT_DBG("conn %p", conn);

765
	mutex_lock(&conn->chan_lock);
766

767
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
768
		struct sock *sk = chan->sk;
769

770
		l2cap_chan_lock(chan);
771

772
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
773
			l2cap_chan_unlock(chan);
774 775 776
			continue;
		}

777
		if (chan->state == BT_CONNECT) {
778
			if (!l2cap_chan_check_security(chan) ||
779
					!__l2cap_no_conn_pending(chan)) {
780
				l2cap_chan_unlock(chan);
781 782
				continue;
			}
783

784 785 786
			if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
					&& test_bit(CONF_STATE2_DEVICE,
					&chan->conf_state)) {
787
				l2cap_chan_close(chan, ECONNRESET);
788
				l2cap_chan_unlock(chan);
789
				continue;
790
			}
791

792
			l2cap_send_conn_req(chan);
793

794
		} else if (chan->state == BT_CONNECT2) {
795
			struct l2cap_conn_rsp rsp;
796
			char buf[128];
797 798
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
799

800
			if (l2cap_chan_check_security(chan)) {
801
				lock_sock(sk);
802 803 804 805
				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);
806 807
					if (parent)
						parent->sk_data_ready(parent, 0);
808 809

				} else {
810
					__l2cap_state_change(chan, BT_CONFIG);
811 812 813
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
814
				release_sock(sk);
815 816 817 818 819
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

820 821
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
822

823
			if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
824
					rsp.result != L2CAP_CR_SUCCESS) {
825
				l2cap_chan_unlock(chan);
826 827 828
				continue;
			}

829
			set_bit(CONF_REQ_SENT, &chan->conf_state);
830
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
831 832
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
833 834
		}

835
		l2cap_chan_unlock(chan);
836 837
	}

838
	mutex_unlock(&conn->chan_lock);
839 840
}

841 842 843
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
844 845
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid,
						    bdaddr_t *src)
846
{
847
	struct l2cap_chan *c, *c1 = NULL;
848

849
	read_lock(&chan_list_lock);
850

851 852
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
853

854
		if (state && c->state != state)
855 856
			continue;

857
		if (c->scid == cid) {
858
			/* Exact match. */
859 860 861 862
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
863 864 865

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
866
				c1 = c;
867 868
		}
	}
869

870
	read_unlock(&chan_list_lock);
871

872
	return c1;
873 874 875 876
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
877
	struct sock *parent, *sk;
878
	struct l2cap_chan *chan, *pchan;
879 880 881 882

	BT_DBG("");

	/* Check if we have socket listening on cid */
883
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
884
							conn->src);
885
	if (!pchan)
886 887
		return;

888 889
	parent = pchan->sk;

890
	lock_sock(parent);
891

892 893 894 895 896 897
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

898 899
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
900 901
		goto clean;

902
	sk = chan->sk;
903

904 905 906 907 908
	hci_conn_hold(conn->hcon);

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

909 910
	bt_accept_enqueue(parent, sk);

911
	l2cap_chan_add(conn, chan);
912

913
	__set_chan_timer(chan, sk->sk_sndtimeo);
914

915
	__l2cap_state_change(chan, BT_CONNECTED);
916 917 918
	parent->sk_data_ready(parent, 0);

clean:
919
	release_sock(parent);
920 921
}

922
static void l2cap_chan_ready(struct l2cap_chan *chan)
923
{
924
	struct sock *sk = chan->sk;
925 926 927 928 929
	struct sock *parent;

	lock_sock(sk);

	parent = bt_sk(sk)->parent;
930 931 932 933 934 935

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

	chan->conf_state = 0;
	__clear_chan_timer(chan);

936
	__l2cap_state_change(chan, BT_CONNECTED);
937 938 939 940
	sk->sk_state_change(sk);

	if (parent)
		parent->sk_data_ready(parent, 0);
941 942

	release_sock(sk);
943 944
}

945 946
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
947
	struct l2cap_chan *chan;
948

949
	BT_DBG("conn %p", conn);
950

951 952 953
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

954 955 956
	if (conn->hcon->out && conn->hcon->type == LE_LINK)
		smp_conn_security(conn, conn->hcon->pending_sec_level);

957
	mutex_lock(&conn->chan_lock);
958

959
	list_for_each_entry(chan, &conn->chan_l, list) {
960

961
		l2cap_chan_lock(chan);
962

963
		if (conn->hcon->type == LE_LINK) {
964
			if (smp_conn_security(conn, chan->sec_level))
965
				l2cap_chan_ready(chan);
966

967
		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
968
			struct sock *sk = chan->sk;
969
			__clear_chan_timer(chan);
970
			lock_sock(sk);
971
			__l2cap_state_change(chan, BT_CONNECTED);
972
			sk->sk_state_change(sk);
973
			release_sock(sk);
974

975
		} else if (chan->state == BT_CONNECT)
976
			l2cap_do_start(chan);
977

978
		l2cap_chan_unlock(chan);
979
	}
980

981
	mutex_unlock(&conn->chan_lock);
982 983 984 985 986
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
987
	struct l2cap_chan *chan;
988 989 990

	BT_DBG("conn %p", conn);

991
	mutex_lock(&conn->chan_lock);
992

993
	list_for_each_entry(chan, &conn->chan_l, list) {
994
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
995
			__l2cap_chan_set_err(chan, err);
996 997
	}

998
	mutex_unlock(&conn->chan_lock);
999 1000
}

1001
static void l2cap_info_timeout(struct work_struct *work)
1002
{
1003
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1004
							info_timer.work);
1005

1006
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1007
	conn->info_ident = 0;
1008

1009 1010 1011
	l2cap_conn_start(conn);
}

1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023
static void l2cap_conn_del(struct hci_conn *hcon, int err)
{
	struct l2cap_conn *conn = hcon->l2cap_data;
	struct l2cap_chan *chan, *l;

	if (!conn)
		return;

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

	kfree_skb(conn->rx_skb);

1024 1025
	mutex_lock(&conn->chan_lock);

1026 1027
	/* Kill channels */
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1028 1029
		l2cap_chan_lock(chan);

1030
		l2cap_chan_del(chan, err);
1031 1032 1033

		l2cap_chan_unlock(chan);

1034 1035 1036
		chan->ops->close(chan->data);
	}

1037 1038
	mutex_unlock(&conn->chan_lock);

1039 1040
	hci_chan_del(conn->hchan);

1041
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1042
		cancel_delayed_work_sync(&conn->info_timer);
1043

1044
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1045
		cancel_delayed_work_sync(&conn->security_timer);
1046
		smp_chan_destroy(conn);
1047
	}
1048 1049 1050 1051 1052

	hcon->l2cap_data = NULL;
	kfree(conn);
}

1053
static void security_timeout(struct work_struct *work)
1054
{
1055 1056
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
						security_timer.work);
1057 1058 1059 1060

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

L
Linus Torvalds 已提交
1061 1062
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
1063
	struct l2cap_conn *conn = hcon->l2cap_data;
1064
	struct hci_chan *hchan;
L
Linus Torvalds 已提交
1065

1066
	if (conn || status)
L
Linus Torvalds 已提交
1067 1068
		return conn;

1069 1070 1071 1072
	hchan = hci_chan_create(hcon);
	if (!hchan)
		return NULL;

1073
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1074 1075
	if (!conn) {
		hci_chan_del(hchan);
L
Linus Torvalds 已提交
1076
		return NULL;
1077
	}
L
Linus Torvalds 已提交
1078 1079 1080

	hcon->l2cap_data = conn;
	conn->hcon = hcon;
1081
	conn->hchan = hchan;
L
Linus Torvalds 已提交
1082

1083
	BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1084

1085 1086 1087 1088 1089
	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 已提交
1090 1091 1092
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

1093 1094
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
1095
	spin_lock_init(&conn->lock);
1096
	mutex_init(&conn->chan_lock);
1097 1098

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

1100
	if (hcon->type == LE_LINK)
1101
		INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1102
	else
1103
		INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
D
Dave Young 已提交
1104

1105
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1106

L
Linus Torvalds 已提交
1107 1108 1109 1110 1111 1112 1113 1114
	return conn;
}

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

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

1119
	read_lock(&chan_list_lock);
1120

1121 1122
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1123

1124
		if (state && c->state != state)
L
Linus Torvalds 已提交
1125 1126
			continue;

1127
		if (c->psm == psm) {
L
Linus Torvalds 已提交
1128
			/* Exact match. */
1129
			if (!bacmp(&bt_sk(sk)->src, src)) {
1130
				read_unlock(&chan_list_lock);
1131 1132
				return c;
			}
L
Linus Torvalds 已提交
1133 1134 1135

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1136
				c1 = c;
L
Linus Torvalds 已提交
1137 1138 1139
		}
	}

1140
	read_unlock(&chan_list_lock);
1141

1142
	return c1;
L
Linus Torvalds 已提交
1143 1144
}

1145
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *dst)
L
Linus Torvalds 已提交
1146
{
1147
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1148 1149 1150 1151
	bdaddr_t *src = &bt_sk(sk)->src;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1152
	__u8 auth_type;
1153
	int err;
L
Linus Torvalds 已提交
1154

1155
	BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
1156
	       __le16_to_cpu(chan->psm));
L
Linus Torvalds 已提交
1157

1158 1159
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1160 1161
		return -EHOSTUNREACH;

1162
	hci_dev_lock(hdev);
L
Linus Torvalds 已提交
1163

1164
	l2cap_chan_lock(chan);
1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190

	/* PSM must be odd and lsb of upper byte must be 0 */
	if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid &&
					chan->chan_type != L2CAP_CHAN_RAW) {
		err = -EINVAL;
		goto done;
	}

	if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !(psm || cid)) {
		err = -EINVAL;
		goto done;
	}

	switch (chan->mode) {
	case L2CAP_MODE_BASIC:
		break;
	case L2CAP_MODE_ERTM:
	case L2CAP_MODE_STREAMING:
		if (!disable_ertm)
			break;
		/* fall through */
	default:
		err = -ENOTSUPP;
		goto done;
	}

1191 1192
	lock_sock(sk);

1193 1194 1195 1196 1197 1198
	switch (sk->sk_state) {
	case BT_CONNECT:
	case BT_CONNECT2:
	case BT_CONFIG:
		/* Already connecting */
		err = 0;
1199
		release_sock(sk);
1200 1201 1202 1203 1204
		goto done;

	case BT_CONNECTED:
		/* Already connected */
		err = -EISCONN;
1205
		release_sock(sk);
1206 1207 1208 1209 1210 1211 1212 1213 1214
		goto done;

	case BT_OPEN:
	case BT_BOUND:
		/* Can connect */
		break;

	default:
		err = -EBADFD;
1215
		release_sock(sk);
1216 1217 1218 1219
		goto done;
	}

	/* Set destination address and psm */
1220
	bacpy(&bt_sk(sk)->dst, dst);
1221 1222 1223

	release_sock(sk);

1224 1225
	chan->psm = psm;
	chan->dcid = cid;
L
Linus Torvalds 已提交
1226

1227
	auth_type = l2cap_get_auth_type(chan);
1228

1229
	if (chan->dcid == L2CAP_CID_LE_DATA)
1230
		hcon = hci_connect(hdev, LE_LINK, dst,
1231
					chan->sec_level, auth_type);
1232 1233
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1234
					chan->sec_level, auth_type);
1235

1236 1237
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1238
		goto done;
1239
	}
L
Linus Torvalds 已提交
1240 1241 1242 1243

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1244
		err = -ENOMEM;
L
Linus Torvalds 已提交
1245 1246 1247 1248 1249 1250
		goto done;
	}

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

1251
	l2cap_chan_unlock(chan);
1252
	l2cap_chan_add(conn, chan);
1253
	l2cap_chan_lock(chan);
1254

1255
	l2cap_state_change(chan, BT_CONNECT);
1256
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1257 1258

	if (hcon->state == BT_CONNECTED) {
1259
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1260
			__clear_chan_timer(chan);
1261
			if (l2cap_chan_check_security(chan))
1262
				l2cap_state_change(chan, BT_CONNECTED);
1263
		} else
1264
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1265 1266
	}

1267 1268
	err = 0;

L
Linus Torvalds 已提交
1269
done:
1270
	l2cap_chan_unlock(chan);
1271
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1272 1273 1274 1275
	hci_dev_put(hdev);
	return err;
}

1276
int __l2cap_wait_ack(struct sock *sk)
1277
{
1278
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1279 1280 1281 1282
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1283
	add_wait_queue(sk_sleep(sk), &wait);
1284 1285
	set_current_state(TASK_INTERRUPTIBLE);
	while (chan->unacked_frames > 0 && chan->conn) {
1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296
		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);
1297
		set_current_state(TASK_INTERRUPTIBLE);
1298 1299 1300 1301 1302 1303

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1304
	remove_wait_queue(sk_sleep(sk), &wait);
1305 1306 1307
	return err;
}

1308
static void l2cap_monitor_timeout(struct work_struct *work)
1309
{
1310 1311
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							monitor_timer.work);
1312

1313
	BT_DBG("chan %p", chan);
1314

1315 1316
	l2cap_chan_lock(chan);

1317
	if (chan->retry_count >= chan->remote_max_tx) {
1318
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1319
		l2cap_chan_unlock(chan);
1320
		l2cap_chan_put(chan);
1321 1322 1323
		return;
	}

1324
	chan->retry_count++;
1325
	__set_monitor_timer(chan);
1326

1327
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1328
	l2cap_chan_unlock(chan);
1329
	l2cap_chan_put(chan);
1330 1331
}

1332
static void l2cap_retrans_timeout(struct work_struct *work)
1333
{
1334 1335
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							retrans_timer.work);
1336

1337
	BT_DBG("chan %p", chan);
1338

1339 1340
	l2cap_chan_lock(chan);

1341
	chan->retry_count = 1;
1342
	__set_monitor_timer(chan);
1343

1344
	set_bit(CONN_WAIT_F, &chan->conn_state);
1345

1346
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1347 1348

	l2cap_chan_unlock(chan);
1349
	l2cap_chan_put(chan);
1350 1351
}

1352
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1353
{
1354
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1355

1356
	while ((skb = skb_peek(&chan->tx_q)) &&
1357
			chan->unacked_frames) {
1358
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1359
			break;
L
Linus Torvalds 已提交
1360

1361
		skb = skb_dequeue(&chan->tx_q);
1362
		kfree_skb(skb);
L
Linus Torvalds 已提交
1363

1364
		chan->unacked_frames--;
1365
	}
L
Linus Torvalds 已提交
1366

1367
	if (!chan->unacked_frames)
1368
		__clear_retrans_timer(chan);
1369
}
L
Linus Torvalds 已提交
1370

1371
static void l2cap_streaming_send(struct l2cap_chan *chan)
1372
{
1373
	struct sk_buff *skb;
1374 1375
	u32 control;
	u16 fcs;
1376

1377
	while ((skb = skb_dequeue(&chan->tx_q))) {
1378
		control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1379
		control |= __set_txseq(chan, chan->next_tx_seq);
1380
		__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1381

1382
		if (chan->fcs == L2CAP_FCS_CRC16) {
1383 1384 1385 1386
			fcs = crc16(0, (u8 *)skb->data,
						skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs,
					skb->data + skb->len - L2CAP_FCS_SIZE);
1387 1388
		}

1389
		l2cap_do_send(chan, skb);
1390

1391
		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1392 1393 1394
	}
}

1395
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1396 1397
{
	struct sk_buff *skb, *tx_skb;
1398 1399
	u16 fcs;
	u32 control;
1400

1401
	skb = skb_peek(&chan->tx_q);
1402 1403
	if (!skb)
		return;
1404

1405
	while (bt_cb(skb)->tx_seq != tx_seq) {
1406
		if (skb_queue_is_last(&chan->tx_q, skb))
1407
			return;
1408

1409 1410
		skb = skb_queue_next(&chan->tx_q, skb);
	}
1411

1412 1413
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1414
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1415 1416 1417 1418 1419
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
1420 1421

	control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1422
	control &= __get_sar_mask(chan);
1423

1424
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1425
		control |= __set_ctrl_final(chan);
1426

1427
	control |= __set_reqseq(chan, chan->buffer_seq);
1428
	control |= __set_txseq(chan, tx_seq);
1429

1430
	__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1431

1432
	if (chan->fcs == L2CAP_FCS_CRC16) {
1433 1434 1435 1436
		fcs = crc16(0, (u8 *)tx_skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
		put_unaligned_le16(fcs,
				tx_skb->data + tx_skb->len - L2CAP_FCS_SIZE);
1437 1438
	}

1439
	l2cap_do_send(chan, tx_skb);
1440 1441
}

1442
static int l2cap_ertm_send(struct l2cap_chan *chan)
1443 1444
{
	struct sk_buff *skb, *tx_skb;
1445 1446
	u16 fcs;
	u32 control;
1447
	int nsent = 0;
1448

1449
	if (chan->state != BT_CONNECTED)
1450
		return -ENOTCONN;
1451

1452
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1453

1454 1455
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1456
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1457 1458 1459
			break;
		}

1460 1461
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1462 1463
		bt_cb(skb)->retries++;

1464
		control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1465
		control &= __get_sar_mask(chan);
1466

1467
		if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1468
			control |= __set_ctrl_final(chan);
1469

1470
		control |= __set_reqseq(chan, chan->buffer_seq);
1471
		control |= __set_txseq(chan, chan->next_tx_seq);
1472

1473
		__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1474

1475
		if (chan->fcs == L2CAP_FCS_CRC16) {
1476 1477 1478 1479
			fcs = crc16(0, (u8 *)skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs, skb->data +
						tx_skb->len - L2CAP_FCS_SIZE);
1480 1481
		}

1482
		l2cap_do_send(chan, tx_skb);
1483

1484
		__set_retrans_timer(chan);
1485

1486
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
1487 1488

		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1489

1490
		if (bt_cb(skb)->retries == 1) {
1491
			chan->unacked_frames++;
1492 1493 1494

			if (!nsent++)
				__clear_ack_timer(chan);
1495
		}
1496

1497
		chan->frames_sent++;
1498

1499 1500
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1501
		else
1502
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1503 1504
	}

1505 1506 1507
	return nsent;
}

1508
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1509 1510 1511
{
	int ret;

1512 1513
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1514

1515
	chan->next_tx_seq = chan->expected_ack_seq;
1516
	ret = l2cap_ertm_send(chan);
1517 1518 1519
	return ret;
}

1520
static void __l2cap_send_ack(struct l2cap_chan *chan)
1521
{
1522
	u32 control = 0;
1523

1524
	control |= __set_reqseq(chan, chan->buffer_seq);
1525

1526
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1527
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1528
		set_bit(CONN_RNR_SENT, &chan->conn_state);
1529
		l2cap_send_sframe(chan, control);
1530
		return;
1531
	}
1532

1533
	if (l2cap_ertm_send(chan) > 0)
1534 1535
		return;

1536
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1537
	l2cap_send_sframe(chan, control);
1538 1539
}

1540 1541 1542 1543 1544 1545
static void l2cap_send_ack(struct l2cap_chan *chan)
{
	__clear_ack_timer(chan);
	__l2cap_send_ack(chan);
}

1546
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1547 1548
{
	struct srej_list *tail;
1549
	u32 control;
1550

1551
	control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1552
	control |= __set_ctrl_final(chan);
1553

1554
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1555
	control |= __set_reqseq(chan, tail->tx_seq);
1556

1557
	l2cap_send_sframe(chan, control);
1558 1559
}

1560 1561 1562
static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
					 struct msghdr *msg, int len,
					 int count, struct sk_buff *skb)
1563
{
1564
	struct l2cap_conn *conn = chan->conn;
1565
	struct sk_buff **frag;
1566
	int sent = 0;
L
Linus Torvalds 已提交
1567

1568
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1569
		return -EFAULT;
L
Linus Torvalds 已提交
1570 1571 1572 1573 1574 1575 1576 1577 1578

	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);

1579
		*frag = chan->ops->alloc_skb(chan, count,
1580
					     msg->msg_flags & MSG_DONTWAIT);
1581

1582 1583
		if (IS_ERR(*frag))
			return PTR_ERR(*frag);
1584 1585
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1586

1587 1588
		(*frag)->priority = skb->priority;

L
Linus Torvalds 已提交
1589 1590 1591 1592 1593 1594 1595
		sent += count;
		len  -= count;

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

	return sent;
1596
}
L
Linus Torvalds 已提交
1597

1598 1599 1600
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1601
{
1602
	struct l2cap_conn *conn = chan->conn;
1603
	struct sk_buff *skb;
1604
	int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1605 1606
	struct l2cap_hdr *lh;

1607
	BT_DBG("chan %p len %d priority %u", chan, (int)len, priority);
1608 1609

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1610 1611

	skb = chan->ops->alloc_skb(chan, count + hlen,
1612 1613 1614
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1615

1616 1617
	skb->priority = priority;

1618 1619
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1620
	lh->cid = cpu_to_le16(chan->dcid);
1621
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1622
	put_unaligned(chan->psm, skb_put(skb, 2));
1623

1624
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1625 1626 1627 1628 1629 1630 1631
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1632 1633 1634
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1635
{
1636
	struct l2cap_conn *conn = chan->conn;
1637 1638 1639 1640
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

1641
	BT_DBG("chan %p len %d", chan, (int)len);
1642 1643

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1644 1645

	skb = chan->ops->alloc_skb(chan, count + hlen,
1646 1647 1648
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1649

1650 1651
	skb->priority = priority;

1652 1653
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1654
	lh->cid = cpu_to_le16(chan->dcid);
1655 1656
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

1657
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1658 1659 1660 1661 1662 1663 1664
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1665 1666
static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
1667
						u32 control, u16 sdulen)
1668
{
1669
	struct l2cap_conn *conn = chan->conn;
1670
	struct sk_buff *skb;
1671
	int err, count, hlen;
1672 1673
	struct l2cap_hdr *lh;

1674
	BT_DBG("chan %p len %d", chan, (int)len);
1675

1676 1677 1678
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1679 1680 1681 1682 1683
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1684
	if (sdulen)
1685
		hlen += L2CAP_SDULEN_SIZE;
1686

1687
	if (chan->fcs == L2CAP_FCS_CRC16)
1688
		hlen += L2CAP_FCS_SIZE;
1689

1690
	count = min_t(unsigned int, (conn->mtu - hlen), len);
1691 1692

	skb = chan->ops->alloc_skb(chan, count + hlen,
1693 1694 1695
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1696 1697 1698

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1699
	lh->cid = cpu_to_le16(chan->dcid);
1700
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1701 1702 1703

	__put_control(chan, control, skb_put(skb, __ctrl_size(chan)));

1704
	if (sdulen)
1705
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1706

1707
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1708 1709 1710 1711
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1712

1713
	if (chan->fcs == L2CAP_FCS_CRC16)
1714
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1715

1716
	bt_cb(skb)->retries = 0;
1717
	return skb;
L
Linus Torvalds 已提交
1718 1719
}

1720
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1721 1722 1723
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1724
	u32 control;
1725 1726
	size_t size = 0;

1727
	skb_queue_head_init(&sar_queue);
1728
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1729
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1730 1731 1732 1733
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1734 1735
	len -= chan->remote_mps;
	size += chan->remote_mps;
1736 1737 1738 1739

	while (len > 0) {
		size_t buflen;

1740
		if (len > chan->remote_mps) {
1741
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1742
			buflen = chan->remote_mps;
1743
		} else {
1744
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
1745 1746 1747
			buflen = len;
		}

1748
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1749 1750 1751 1752 1753 1754 1755 1756 1757
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1758 1759 1760
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1761 1762 1763 1764

	return size;
}

1765 1766
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
								u32 priority)
1767 1768
{
	struct sk_buff *skb;
1769
	u32 control;
1770 1771 1772
	int err;

	/* Connectionless channel */
1773
	if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1774
		skb = l2cap_create_connless_pdu(chan, msg, len, priority);
1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788
		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 */
1789
		skb = l2cap_create_basic_pdu(chan, msg, len, priority);
1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800
		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) {
1801
			control = __set_ctrl_sar(chan, L2CAP_SAR_UNSEGMENTED);
1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824
			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;
		}

1825 1826
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
				test_bit(CONN_WAIT_F, &chan->conn_state)) {
1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844
			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 已提交
1845 1846 1847 1848
/* 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;
1849
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1850 1851 1852

	BT_DBG("conn %p", conn);

1853
	mutex_lock(&conn->chan_lock);
1854

1855
	list_for_each_entry(chan, &conn->chan_l, list) {
1856
		struct sock *sk = chan->sk;
1857
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
1858 1859 1860 1861 1862
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1863 1864
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1865 1866
			continue;

1867
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
1868 1869
			kfree_skb(nskb);
	}
1870

1871
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882
}

/* ---- 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;

1883 1884
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1885 1886 1887 1888 1889 1890 1891 1892 1893

	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);
1894
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1895 1896 1897 1898 1899

	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 已提交
1900 1901 1902 1903

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1904
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954

	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:
1955
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1956 1957 1958
		break;

	case 4:
1959
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985
		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:
1986
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1987 1988 1989
		break;

	case 4:
1990
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1991 1992 1993 1994 1995 1996 1997 1998 1999 2000
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

2001 2002 2003 2004
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

2005
	switch (chan->mode) {
2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031
	case L2CAP_MODE_ERTM:
		efs.id		= chan->local_id;
		efs.stype	= chan->local_stype;
		efs.msdu	= cpu_to_le16(chan->local_msdu);
		efs.sdu_itime	= cpu_to_le32(chan->local_sdu_itime);
		efs.acc_lat	= cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
		efs.flush_to	= cpu_to_le32(L2CAP_DEFAULT_FLUSH_TO);
		break;

	case L2CAP_MODE_STREAMING:
		efs.id		= 1;
		efs.stype	= L2CAP_SERV_BESTEFFORT;
		efs.msdu	= cpu_to_le16(chan->local_msdu);
		efs.sdu_itime	= cpu_to_le32(chan->local_sdu_itime);
		efs.acc_lat	= 0;
		efs.flush_to	= 0;
		break;

	default:
		return;
	}

	l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
							(unsigned long) &efs);
}

2032
static void l2cap_ack_timeout(struct work_struct *work)
2033
{
2034 2035
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							ack_timer.work);
2036

2037 2038
	BT_DBG("chan %p", chan);

2039 2040
	l2cap_chan_lock(chan);

2041
	__l2cap_send_ack(chan);
2042 2043

	l2cap_chan_unlock(chan);
2044 2045

	l2cap_chan_put(chan);
2046 2047
}

2048
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
2049
{
2050
	chan->expected_ack_seq = 0;
2051
	chan->unacked_frames = 0;
2052
	chan->buffer_seq = 0;
2053 2054
	chan->num_acked = 0;
	chan->frames_sent = 0;
2055

2056 2057 2058
	INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
	INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
	INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
2059

2060
	skb_queue_head_init(&chan->srej_q);
2061

2062
	INIT_LIST_HEAD(&chan->srej_l);
2063 2064
}

2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077
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;
	}
}

2078 2079 2080 2081 2082
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

2083 2084 2085 2086 2087
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

2088 2089 2090
static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
{
	if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
2091
						__l2cap_ews_supported(chan)) {
2092 2093
		/* use extended control field */
		set_bit(FLAG_EXT_CTRL, &chan->flags);
2094 2095
		chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
	} else {
2096 2097
		chan->tx_win = min_t(u16, chan->tx_win,
						L2CAP_DEFAULT_TX_WINDOW);
2098 2099
		chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	}
2100 2101
}

2102
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2103 2104
{
	struct l2cap_conf_req *req = data;
2105
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
2106
	void *ptr = req->data;
2107
	u16 size;
L
Linus Torvalds 已提交
2108

2109
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2110

2111
	if (chan->num_conf_req || chan->num_conf_rsp)
2112 2113
		goto done;

2114
	switch (chan->mode) {
2115 2116
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2117
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2118 2119
			break;

2120 2121 2122
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2123
		/* fall through */
2124
	default:
2125
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2126 2127 2128 2129
		break;
	}

done:
2130 2131
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2132

2133
	switch (chan->mode) {
2134
	case L2CAP_MODE_BASIC:
2135 2136
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2137 2138
			break;

2139 2140 2141 2142 2143 2144 2145
		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;

2146 2147
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
2148 2149 2150 2151
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2152
		rfc.max_transmit    = chan->max_tx;
2153 2154
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2155 2156 2157 2158 2159 2160

		size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
		rfc.max_pdu_size = cpu_to_le16(size);
2161

2162 2163 2164 2165
		l2cap_txwin_setup(chan);

		rfc.txwin_size = min_t(u16, chan->tx_win,
						L2CAP_DEFAULT_TX_WINDOW);
2166

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

2170 2171 2172
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2173
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2174 2175
			break;

2176
		if (chan->fcs == L2CAP_FCS_NONE ||
2177
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2178 2179
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2180
		}
2181 2182 2183 2184

		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
								chan->tx_win);
2185 2186 2187 2188 2189 2190 2191 2192
		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;
2193 2194 2195 2196 2197 2198

		size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
		rfc.max_pdu_size = cpu_to_le16(size);
2199

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

2203 2204 2205
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2206
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2207 2208
			break;

2209
		if (chan->fcs == L2CAP_FCS_NONE ||
2210
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2211 2212
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2213
		}
2214 2215
		break;
	}
L
Linus Torvalds 已提交
2216

2217
	req->dcid  = cpu_to_le16(chan->dcid);
2218
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2219 2220 2221 2222

	return ptr - data;
}

2223
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2224
{
2225 2226
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
2227 2228
	void *req = chan->conf_req;
	int len = chan->conf_len;
2229 2230
	int type, hint, olen;
	unsigned long val;
2231
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2232 2233
	struct l2cap_conf_efs efs;
	u8 remote_efs = 0;
2234
	u16 mtu = L2CAP_DEFAULT_MTU;
2235
	u16 result = L2CAP_CONF_SUCCESS;
2236
	u16 size;
L
Linus Torvalds 已提交
2237

2238
	BT_DBG("chan %p", chan);
2239

2240 2241
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2242

2243
		hint  = type & L2CAP_CONF_HINT;
2244
		type &= L2CAP_CONF_MASK;
2245 2246 2247

		switch (type) {
		case L2CAP_CONF_MTU:
2248
			mtu = val;
2249 2250 2251
			break;

		case L2CAP_CONF_FLUSH_TO:
2252
			chan->flush_to = val;
2253 2254 2255 2256 2257
			break;

		case L2CAP_CONF_QOS:
			break;

2258 2259 2260 2261 2262
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2263 2264
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2265
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2266
			break;
2267

2268 2269 2270 2271
		case L2CAP_CONF_EFS:
			remote_efs = 1;
			if (olen == sizeof(efs))
				memcpy(&efs, (void *) val, olen);
2272 2273
			break;

2274 2275 2276
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;
2277

2278 2279
			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2280
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2281
			chan->remote_tx_win = val;
2282 2283
			break;

2284 2285 2286 2287 2288 2289 2290 2291 2292 2293
		default:
			if (hint)
				break;

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

2294
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2295 2296
		goto done;

2297
	switch (chan->mode) {
2298 2299
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2300
		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2301
			chan->mode = l2cap_select_mode(rfc.mode,
2302
					chan->conn->feat_mask);
2303 2304 2305
			break;
		}

2306 2307 2308 2309 2310 2311 2312
		if (remote_efs) {
			if (__l2cap_efs_supported(chan))
				set_bit(FLAG_EFS_ENABLE, &chan->flags);
			else
				return -ECONNREFUSED;
		}

2313
		if (chan->mode != rfc.mode)
2314
			return -ECONNREFUSED;
2315

2316 2317 2318 2319
		break;
	}

done:
2320
	if (chan->mode != rfc.mode) {
2321
		result = L2CAP_CONF_UNACCEPT;
2322
		rfc.mode = chan->mode;
2323

2324
		if (chan->num_conf_rsp == 1)
2325 2326 2327 2328 2329 2330
			return -ECONNREFUSED;

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

2331 2332 2333 2334
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2335 2336 2337
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2338
			chan->omtu = mtu;
2339
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2340
		}
2341
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2342

2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353
		if (remote_efs) {
			if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != chan->local_stype) {

				result = L2CAP_CONF_UNACCEPT;

				if (chan->num_conf_req >= 1)
					return -ECONNREFUSED;

				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
2354
							sizeof(efs),
2355
							(unsigned long) &efs);
2356
			} else {
2357
				/* Send PENDING Conf Rsp */
2358 2359
				result = L2CAP_CONF_PENDING;
				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2360 2361 2362
			}
		}

2363 2364
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2365
			chan->fcs = L2CAP_FCS_NONE;
2366
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2367 2368 2369
			break;

		case L2CAP_MODE_ERTM:
2370 2371 2372 2373
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2374

2375
			chan->remote_max_tx = rfc.max_transmit;
2376

2377 2378 2379 2380 2381 2382 2383
			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
						chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
			rfc.max_pdu_size = cpu_to_le16(size);
			chan->remote_mps = size;
2384

2385
			rfc.retrans_timeout =
2386
				__constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2387
			rfc.monitor_timeout =
2388
				__constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2389

2390
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2391 2392 2393 2394

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

2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407
			if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
				chan->remote_id = efs.id;
				chan->remote_stype = efs.stype;
				chan->remote_msdu = le16_to_cpu(efs.msdu);
				chan->remote_flush_to =
						le32_to_cpu(efs.flush_to);
				chan->remote_acc_lat =
						le32_to_cpu(efs.acc_lat);
				chan->remote_sdu_itime =
					le32_to_cpu(efs.sdu_itime);
				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
					sizeof(efs), (unsigned long) &efs);
			}
2408 2409 2410
			break;

		case L2CAP_MODE_STREAMING:
2411 2412 2413 2414 2415 2416 2417
			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
						chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
			rfc.max_pdu_size = cpu_to_le16(size);
			chan->remote_mps = size;
2418

2419
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2420 2421 2422 2423

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

2424 2425 2426
			break;

		default:
2427 2428
			result = L2CAP_CONF_UNACCEPT;

2429
			memset(&rfc, 0, sizeof(rfc));
2430
			rfc.mode = chan->mode;
2431
		}
2432

2433
		if (result == L2CAP_CONF_SUCCESS)
2434
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2435
	}
2436
	rsp->scid   = cpu_to_le16(chan->dcid);
2437 2438 2439 2440
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2441 2442
}

2443
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2444 2445 2446 2447 2448
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
2449
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2450
	struct l2cap_conf_efs efs;
2451

2452
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2453 2454 2455 2456 2457 2458 2459 2460

	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;
2461
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2462
			} else
2463 2464
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2465 2466 2467
			break;

		case L2CAP_CONF_FLUSH_TO:
2468
			chan->flush_to = val;
2469
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2470
							2, chan->flush_to);
2471 2472 2473 2474 2475 2476
			break;

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

2477
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2478
							rfc.mode != chan->mode)
2479 2480
				return -ECONNREFUSED;

2481
			chan->fcs = 0;
2482 2483 2484 2485

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2486 2487 2488 2489

		case L2CAP_CONF_EWS:
			chan->tx_win = min_t(u16, val,
						L2CAP_DEFAULT_EXT_WINDOW);
2490 2491
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
							chan->tx_win);
2492
			break;
2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505

		case L2CAP_CONF_EFS:
			if (olen == sizeof(efs))
				memcpy(&efs, (void *)val, olen);

			if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != chan->local_stype)
				return -ECONNREFUSED;

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
					sizeof(efs), (unsigned long) &efs);
			break;
2506 2507 2508
		}
	}

2509
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2510 2511
		return -ECONNREFUSED;

2512
	chan->mode = rfc.mode;
2513

2514
	if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
2515 2516
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2517 2518 2519
			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);
2520 2521 2522 2523 2524 2525 2526 2527 2528

			if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
				chan->local_msdu = le16_to_cpu(efs.msdu);
				chan->local_sdu_itime =
						le32_to_cpu(efs.sdu_itime);
				chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
				chan->local_flush_to =
						le32_to_cpu(efs.flush_to);
			}
2529
			break;
2530

2531
		case L2CAP_MODE_STREAMING:
2532
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2533 2534 2535
		}
	}

2536
	req->dcid   = cpu_to_le16(chan->dcid);
2537 2538 2539 2540 2541
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2542
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2543 2544 2545 2546
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2547
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2548

2549
	rsp->scid   = cpu_to_le16(chan->dcid);
2550
	rsp->result = cpu_to_le16(result);
2551
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2552 2553 2554 2555

	return ptr - data;
}

2556
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2557 2558
{
	struct l2cap_conn_rsp rsp;
2559
	struct l2cap_conn *conn = chan->conn;
2560 2561
	u8 buf[128];

2562 2563
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2564 2565 2566 2567 2568
	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);

2569
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2570 2571 2572 2573 2574 2575 2576
		return;

	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

2577
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2578 2579 2580 2581 2582
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2583
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2584

2585
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598
		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;
		}
	}

2599 2600 2601 2602 2603 2604 2605 2606 2607 2608
	/* Use sane default values in case a misbehaving remote device
	 * did not send an RFC option.
	 */
	rfc.mode = chan->mode;
	rfc.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
	rfc.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
	rfc.max_pdu_size = cpu_to_le16(chan->imtu);

	BT_ERR("Expected RFC option was not found, using defaults");

2609 2610 2611
done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2612 2613 2614
		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);
2615 2616
		break;
	case L2CAP_MODE_STREAMING:
2617
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2618 2619 2620
	}
}

2621 2622
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2623
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2624

2625
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2626 2627 2628 2629
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
2630
		cancel_delayed_work(&conn->info_timer);
2631 2632

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2633
		conn->info_ident = 0;
2634

2635 2636 2637 2638 2639 2640
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2641 2642 2643 2644
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;
2645
	struct l2cap_chan *chan = NULL, *pchan;
2646
	struct sock *parent, *sk = NULL;
2647
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2648 2649

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2650
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2651

2652
	BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
L
Linus Torvalds 已提交
2653 2654

	/* Check if we have socket listening on psm */
2655 2656
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2657 2658 2659 2660
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2661 2662
	parent = pchan->sk;

2663
	mutex_lock(&conn->chan_lock);
2664
	lock_sock(parent);
2665

2666 2667 2668
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2669
		conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
2670 2671 2672 2673
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2674 2675 2676 2677
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2678
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2679 2680 2681
		goto response;
	}

2682 2683
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2684 2685
		goto response;

2686 2687
	sk = chan->sk;

L
Linus Torvalds 已提交
2688
	/* Check if we already have channel with that dcid */
2689
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
L
Linus Torvalds 已提交
2690
		sock_set_flag(sk, SOCK_ZAPPED);
2691
		chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2692 2693 2694 2695 2696 2697 2698
		goto response;
	}

	hci_conn_hold(conn->hcon);

	bacpy(&bt_sk(sk)->src, conn->src);
	bacpy(&bt_sk(sk)->dst, conn->dst);
2699 2700
	chan->psm  = psm;
	chan->dcid = scid;
L
Linus Torvalds 已提交
2701

2702 2703
	bt_accept_enqueue(parent, sk);

2704
	__l2cap_chan_add(conn, chan);
2705

2706
	dcid = chan->scid;
L
Linus Torvalds 已提交
2707

2708
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
2709

2710
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2711

2712
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2713
		if (l2cap_chan_check_security(chan)) {
2714
			if (bt_sk(sk)->defer_setup) {
2715
				__l2cap_state_change(chan, BT_CONNECT2);
2716 2717 2718 2719
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
2720
				__l2cap_state_change(chan, BT_CONFIG);
2721 2722 2723
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2724
		} else {
2725
			__l2cap_state_change(chan, BT_CONNECT2);
2726 2727 2728 2729
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
2730
		__l2cap_state_change(chan, BT_CONNECT2);
2731 2732
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2733 2734 2735
	}

response:
2736
	release_sock(parent);
2737
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
2738 2739

sendresp:
2740 2741 2742 2743
	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 已提交
2744
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2745 2746 2747 2748 2749 2750 2751 2752

	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);

2753
		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
2754 2755 2756 2757 2758

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

2759
	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2760 2761
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2762
		set_bit(CONF_REQ_SENT, &chan->conf_state);
2763
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2764 2765
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2766 2767
	}

L
Linus Torvalds 已提交
2768 2769 2770 2771 2772 2773 2774
	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;
2775
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2776
	u8 req[128];
2777
	int err;
L
Linus Torvalds 已提交
2778 2779 2780 2781 2782 2783

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

2784 2785
	BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
						dcid, scid, result, status);
L
Linus Torvalds 已提交
2786

2787 2788
	mutex_lock(&conn->chan_lock);

L
Linus Torvalds 已提交
2789
	if (scid) {
2790 2791 2792 2793 2794
		chan = __l2cap_get_chan_by_scid(conn, scid);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
2795
	} else {
2796 2797 2798 2799 2800
		chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
2801 2802
	}

2803 2804
	err = 0;

2805
	l2cap_chan_lock(chan);
2806

L
Linus Torvalds 已提交
2807 2808
	switch (result) {
	case L2CAP_CR_SUCCESS:
2809
		l2cap_state_change(chan, BT_CONFIG);
2810
		chan->ident = 0;
2811
		chan->dcid = dcid;
2812
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2813

2814
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2815 2816
			break;

L
Linus Torvalds 已提交
2817
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2818 2819
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2820 2821 2822
		break;

	case L2CAP_CR_PEND:
2823
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2824 2825 2826
		break;

	default:
2827
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2828 2829 2830
		break;
	}

2831
	l2cap_chan_unlock(chan);
2832 2833 2834 2835 2836

unlock:
	mutex_unlock(&conn->chan_lock);

	return err;
L
Linus Torvalds 已提交
2837 2838
}

2839
static inline void set_default_fcs(struct l2cap_chan *chan)
2840 2841 2842 2843
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2844
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2845
		chan->fcs = L2CAP_FCS_NONE;
2846
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2847
		chan->fcs = L2CAP_FCS_CRC16;
2848 2849
}

2850
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2851 2852 2853 2854
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2855
	struct l2cap_chan *chan;
2856
	int len;
L
Linus Torvalds 已提交
2857 2858 2859 2860 2861 2862

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

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

2863
	chan = l2cap_get_chan_by_scid(conn, dcid);
2864
	if (!chan)
L
Linus Torvalds 已提交
2865 2866
		return -ENOENT;

2867
	l2cap_chan_lock(chan);
2868

2869
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2870 2871 2872 2873 2874
		struct l2cap_cmd_rej_cid rej;

		rej.reason = cpu_to_le16(L2CAP_REJ_INVALID_CID);
		rej.scid = cpu_to_le16(chan->scid);
		rej.dcid = cpu_to_le16(chan->dcid);
2875 2876 2877

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2878
		goto unlock;
2879
	}
2880

2881
	/* Reject if config buffer is too small. */
2882
	len = cmd_len - sizeof(*req);
2883
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2884
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2885
				l2cap_build_conf_rsp(chan, rsp,
2886 2887 2888 2889 2890
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2891 2892
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2893 2894 2895 2896

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2897
				l2cap_build_conf_rsp(chan, rsp,
2898
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2899 2900 2901 2902
		goto unlock;
	}

	/* Complete config. */
2903
	len = l2cap_parse_conf_req(chan, rsp);
2904
	if (len < 0) {
2905
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2906
		goto unlock;
2907
	}
L
Linus Torvalds 已提交
2908

2909
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2910
	chan->num_conf_rsp++;
2911 2912

	/* Reset config buffer. */
2913
	chan->conf_len = 0;
2914

2915
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2916 2917
		goto unlock;

2918
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2919
		set_default_fcs(chan);
2920

2921
		l2cap_state_change(chan, BT_CONNECTED);
2922

2923 2924
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2925
		skb_queue_head_init(&chan->tx_q);
2926
		if (chan->mode == L2CAP_MODE_ERTM)
2927
			l2cap_ertm_init(chan);
2928

2929
		l2cap_chan_ready(chan);
2930 2931 2932
		goto unlock;
	}

2933
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2934
		u8 buf[64];
L
Linus Torvalds 已提交
2935
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2936 2937
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2938 2939
	}

2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950
	/* Got Conf Rsp PENDING from remote side and asume we sent
	   Conf Rsp PENDING in the code above */
	if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
			test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {

		/* check compatibility */

		clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
		set_bit(CONF_OUTPUT_DONE, &chan->conf_state);

		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2951
					l2cap_build_conf_rsp(chan, rsp,
2952 2953 2954
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

L
Linus Torvalds 已提交
2955
unlock:
2956
	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
2957 2958 2959 2960 2961 2962 2963
	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;
2964
	struct l2cap_chan *chan;
2965
	int len = le16_to_cpu(cmd->len) - sizeof(*rsp);
L
Linus Torvalds 已提交
2966 2967 2968 2969 2970

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

2971 2972
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
	       result, len);
L
Linus Torvalds 已提交
2973

2974
	chan = l2cap_get_chan_by_scid(conn, scid);
2975
	if (!chan)
L
Linus Torvalds 已提交
2976 2977
		return 0;

2978
	l2cap_chan_lock(chan);
2979

L
Linus Torvalds 已提交
2980 2981
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2982
		l2cap_conf_rfc_get(chan, rsp->data, len);
2983
		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2984 2985
		break;

2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004
	case L2CAP_CONF_PENDING:
		set_bit(CONF_REM_CONF_PEND, &chan->conf_state);

		if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
			char buf[64];

			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								buf, &result);
			if (len < 0) {
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
				goto done;
			}

			/* check compatibility */

			clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);

			l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3005
						l2cap_build_conf_rsp(chan, buf,
3006 3007 3008 3009
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

L
Linus Torvalds 已提交
3010
	case L2CAP_CONF_UNACCEPT:
3011
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
3012 3013
			char req[64];

3014
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3015
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
3016 3017 3018
				goto done;
			}

3019 3020
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
3021 3022
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
3023
			if (len < 0) {
3024
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
3025 3026 3027 3028 3029
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
3030
			chan->num_conf_req++;
3031 3032 3033
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
3034 3035
		}

3036
	default:
3037
		l2cap_chan_set_err(chan, ECONNRESET);
3038

3039
		__set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
3040
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
3041 3042 3043 3044 3045 3046
		goto done;
	}

	if (flags & 0x01)
		goto done;

3047
	set_bit(CONF_INPUT_DONE, &chan->conf_state);
L
Linus Torvalds 已提交
3048

3049
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
3050
		set_default_fcs(chan);
3051

3052
		l2cap_state_change(chan, BT_CONNECTED);
3053 3054
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
3055
		skb_queue_head_init(&chan->tx_q);
3056
		if (chan->mode ==  L2CAP_MODE_ERTM)
3057
			l2cap_ertm_init(chan);
3058

3059
		l2cap_chan_ready(chan);
L
Linus Torvalds 已提交
3060 3061 3062
	}

done:
3063
	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
3064 3065 3066 3067 3068 3069 3070 3071
	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;
3072
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3073 3074 3075 3076 3077 3078 3079
	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);

3080 3081 3082 3083 3084
	mutex_lock(&conn->chan_lock);

	chan = __l2cap_get_chan_by_scid(conn, dcid);
	if (!chan) {
		mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
3085
		return 0;
3086
	}
L
Linus Torvalds 已提交
3087

3088 3089
	l2cap_chan_lock(chan);

3090 3091
	sk = chan->sk;

3092 3093
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
3094 3095
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

3096
	lock_sock(sk);
L
Linus Torvalds 已提交
3097
	sk->sk_shutdown = SHUTDOWN_MASK;
3098
	release_sock(sk);
L
Linus Torvalds 已提交
3099

3100
	l2cap_chan_del(chan, ECONNRESET);
3101 3102

	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
3103

3104
	chan->ops->close(chan->data);
3105 3106 3107

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3108 3109 3110 3111 3112 3113 3114
	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;
3115
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3116 3117 3118 3119 3120 3121

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

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

3122 3123 3124 3125 3126
	mutex_lock(&conn->chan_lock);

	chan = __l2cap_get_chan_by_scid(conn, scid);
	if (!chan) {
		mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
3127
		return 0;
3128
	}
L
Linus Torvalds 已提交
3129

3130
	l2cap_chan_lock(chan);
3131 3132

	l2cap_chan_del(chan, 0);
3133 3134

	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
3135

3136
	chan->ops->close(chan->data);
3137 3138 3139

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151
	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);

3152 3153
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
3154
		u32 feat_mask = l2cap_feat_mask;
3155 3156 3157
		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);
3158
		if (!disable_ertm)
3159 3160
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
3161
		if (enable_hs)
3162 3163
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
3164

3165
		put_unaligned_le32(feat_mask, rsp->data);
3166 3167
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3168 3169 3170
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3171 3172 3173 3174 3175 3176

		if (enable_hs)
			l2cap_fixed_chan[0] |= L2CAP_FC_A2MP;
		else
			l2cap_fixed_chan[0] &= ~L2CAP_FC_A2MP;

3177 3178
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3179
		memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3180 3181
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3182 3183 3184 3185 3186 3187 3188
	} 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 已提交
3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202

	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);

3203 3204 3205 3206 3207
	/* 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;

3208
	cancel_delayed_work(&conn->info_timer);
3209

3210 3211 3212 3213 3214 3215 3216 3217 3218
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

3219 3220
	switch (type) {
	case L2CAP_IT_FEAT_MASK:
3221
		conn->feat_mask = get_unaligned_le32(rsp->data);
3222

3223
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236
			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);
		}
3237 3238 3239 3240
		break;

	case L2CAP_IT_FIXED_CHAN:
		conn->fixed_chan_mask = rsp->data[0];
3241
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3242
		conn->info_ident = 0;
3243 3244

		l2cap_conn_start(conn);
3245
		break;
3246
	}
3247

L
Linus Torvalds 已提交
3248 3249 3250
	return 0;
}

3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272
static inline int l2cap_create_channel_req(struct l2cap_conn *conn,
					struct l2cap_cmd_hdr *cmd, u16 cmd_len,
					void *data)
{
	struct l2cap_create_chan_req *req = data;
	struct l2cap_create_chan_rsp rsp;
	u16 psm, scid;

	if (cmd_len != sizeof(*req))
		return -EPROTO;

	if (!enable_hs)
		return -EINVAL;

	psm = le16_to_cpu(req->psm);
	scid = le16_to_cpu(req->scid);

	BT_DBG("psm %d, scid %d, amp_id %d", psm, scid, req->amp_id);

	/* Placeholder: Always reject */
	rsp.dcid = 0;
	rsp.scid = cpu_to_le16(scid);
3273 3274
	rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
	rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289

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

	return 0;
}

static inline int l2cap_create_channel_rsp(struct l2cap_conn *conn,
					struct l2cap_cmd_hdr *cmd, void *data)
{
	BT_DBG("conn %p", conn);

	return l2cap_connect_rsp(conn, cmd, data);
}

3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409
static void l2cap_send_move_chan_rsp(struct l2cap_conn *conn, u8 ident,
							u16 icid, u16 result)
{
	struct l2cap_move_chan_rsp rsp;

	BT_DBG("icid %d, result %d", icid, result);

	rsp.icid = cpu_to_le16(icid);
	rsp.result = cpu_to_le16(result);

	l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_RSP, sizeof(rsp), &rsp);
}

static void l2cap_send_move_chan_cfm(struct l2cap_conn *conn,
				struct l2cap_chan *chan, u16 icid, u16 result)
{
	struct l2cap_move_chan_cfm cfm;
	u8 ident;

	BT_DBG("icid %d, result %d", icid, result);

	ident = l2cap_get_ident(conn);
	if (chan)
		chan->ident = ident;

	cfm.icid = cpu_to_le16(icid);
	cfm.result = cpu_to_le16(result);

	l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM, sizeof(cfm), &cfm);
}

static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
								u16 icid)
{
	struct l2cap_move_chan_cfm_rsp rsp;

	BT_DBG("icid %d", icid);

	rsp.icid = cpu_to_le16(icid);
	l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
}

static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
{
	struct l2cap_move_chan_req *req = data;
	u16 icid = 0;
	u16 result = L2CAP_MR_NOT_ALLOWED;

	if (cmd_len != sizeof(*req))
		return -EPROTO;

	icid = le16_to_cpu(req->icid);

	BT_DBG("icid %d, dest_amp_id %d", icid, req->dest_amp_id);

	if (!enable_hs)
		return -EINVAL;

	/* Placeholder: Always refuse */
	l2cap_send_move_chan_rsp(conn, cmd->ident, icid, result);

	return 0;
}

static inline int l2cap_move_channel_rsp(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
{
	struct l2cap_move_chan_rsp *rsp = data;
	u16 icid, result;

	if (cmd_len != sizeof(*rsp))
		return -EPROTO;

	icid = le16_to_cpu(rsp->icid);
	result = le16_to_cpu(rsp->result);

	BT_DBG("icid %d, result %d", icid, result);

	/* Placeholder: Always unconfirmed */
	l2cap_send_move_chan_cfm(conn, NULL, icid, L2CAP_MC_UNCONFIRMED);

	return 0;
}

static inline int l2cap_move_channel_confirm(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
{
	struct l2cap_move_chan_cfm *cfm = data;
	u16 icid, result;

	if (cmd_len != sizeof(*cfm))
		return -EPROTO;

	icid = le16_to_cpu(cfm->icid);
	result = le16_to_cpu(cfm->result);

	BT_DBG("icid %d, result %d", icid, result);

	l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);

	return 0;
}

static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, void *data)
{
	struct l2cap_move_chan_cfm_rsp *rsp = data;
	u16 icid;

	if (cmd_len != sizeof(*rsp))
		return -EPROTO;

	icid = le16_to_cpu(rsp->icid);

	BT_DBG("icid %d", icid);

	return 0;
}

3410
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437
							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;
3438
	int err;
3439 3440 3441 3442 3443 3444 3445 3446 3447

	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;
3448 3449
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3450 3451 3452 3453 3454 3455 3456
	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));
3457 3458 3459

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3460 3461 3462 3463 3464 3465 3466
		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);

3467 3468 3469
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3470 3471 3472
	return 0;
}

3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521
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;

3522 3523 3524 3525 3526 3527 3528 3529
	case L2CAP_CREATE_CHAN_REQ:
		err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
		break;

	case L2CAP_CREATE_CHAN_RSP:
		err = l2cap_create_channel_rsp(conn, cmd, data);
		break;

3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545
	case L2CAP_MOVE_CHAN_REQ:
		err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
		break;

	case L2CAP_MOVE_CHAN_RSP:
		err = l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
		break;

	case L2CAP_MOVE_CHAN_CFM:
		err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
		break;

	case L2CAP_MOVE_CHAN_CFM_RSP:
		err = l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
		break;

3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562
	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:
3563
		return l2cap_conn_param_update_req(conn, cmd, data);
3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575

	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 已提交
3576 3577 3578 3579
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3580
	int err;
L
Linus Torvalds 已提交
3581 3582 3583 3584

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3585
		u16 cmd_len;
L
Linus Torvalds 已提交
3586 3587 3588 3589
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3590
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3591

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

3594
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3595 3596 3597 3598
			BT_DBG("corrupted command");
			break;
		}

3599 3600 3601 3602
		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 已提交
3603 3604

		if (err) {
3605
			struct l2cap_cmd_rej_unk rej;
3606 3607

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

			/* FIXME: Map err to a valid reason */
3610
			rej.reason = cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
L
Linus Torvalds 已提交
3611 3612 3613
			l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
		}

3614 3615
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3616 3617 3618 3619 3620
	}

	kfree_skb(skb);
}

3621
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3622 3623
{
	u16 our_fcs, rcv_fcs;
3624 3625 3626 3627 3628 3629
	int hdr_size;

	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hdr_size = L2CAP_EXT_HDR_SIZE;
	else
		hdr_size = L2CAP_ENH_HDR_SIZE;
3630

3631
	if (chan->fcs == L2CAP_FCS_CRC16) {
3632
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3633 3634 3635 3636
		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)
3637
			return -EBADMSG;
3638 3639 3640 3641
	}
	return 0;
}

3642
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3643
{
3644
	u32 control = 0;
3645

3646
	chan->frames_sent = 0;
3647

3648
	control |= __set_reqseq(chan, chan->buffer_seq);
3649

3650
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3651
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3652
		l2cap_send_sframe(chan, control);
3653
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3654 3655
	}

3656
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3657
		l2cap_retransmit_frames(chan);
3658

3659
	l2cap_ertm_send(chan);
3660

3661
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3662
			chan->frames_sent == 0) {
3663
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3664
		l2cap_send_sframe(chan, control);
3665 3666 3667
	}
}

3668
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3669 3670
{
	struct sk_buff *next_skb;
3671
	int tx_seq_offset, next_tx_seq_offset;
3672 3673 3674 3675

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

3676
	next_skb = skb_peek(&chan->srej_q);
3677

3678
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3679

3680
	while (next_skb) {
3681 3682 3683
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3684 3685
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3686 3687

		if (next_tx_seq_offset > tx_seq_offset) {
3688
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3689
			return 0;
3690 3691
		}

3692
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3693 3694 3695 3696
			next_skb = NULL;
		else
			next_skb = skb_queue_next(&chan->srej_q, next_skb);
	}
3697

3698
	__skb_queue_tail(&chan->srej_q, skb);
3699 3700

	return 0;
3701 3702
}

3703 3704
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3705
{
3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721
	/* skb->len reflects data in skb as well as all fragments
	 * skb->data_len reflects only data in fragments
	 */
	if (!skb_has_frag_list(skb))
		skb_shinfo(skb)->frag_list = new_frag;

	new_frag->next = NULL;

	(*last_frag)->next = new_frag;
	*last_frag = new_frag;

	skb->len += new_frag->len;
	skb->data_len += new_frag->len;
	skb->truesize += new_frag->truesize;
}

3722
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3723 3724
{
	int err = -EINVAL;
3725

3726 3727
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3728 3729
		if (chan->sdu)
			break;
3730

3731 3732
		err = chan->ops->recv(chan->data, skb);
		break;
3733

3734
	case L2CAP_SAR_START:
3735 3736
		if (chan->sdu)
			break;
3737

3738
		chan->sdu_len = get_unaligned_le16(skb->data);
3739
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3740

3741 3742 3743 3744
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3745

3746 3747
		if (skb->len >= chan->sdu_len)
			break;
3748

3749 3750
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3751

3752 3753
		skb = NULL;
		err = 0;
3754 3755
		break;

3756
	case L2CAP_SAR_CONTINUE:
3757
		if (!chan->sdu)
3758
			break;
3759

3760 3761 3762
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3763

3764 3765
		if (chan->sdu->len >= chan->sdu_len)
			break;
3766

3767
		err = 0;
3768 3769
		break;

3770
	case L2CAP_SAR_END:
3771
		if (!chan->sdu)
3772
			break;
3773

3774 3775 3776
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3777

3778 3779
		if (chan->sdu->len != chan->sdu_len)
			break;
3780

3781
		err = chan->ops->recv(chan->data, chan->sdu);
3782

3783 3784 3785 3786 3787
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3788
		}
3789 3790 3791
		break;
	}

3792 3793 3794 3795 3796 3797 3798
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3799

3800
	return err;
3801 3802
}

3803
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3804
{
3805
	BT_DBG("chan %p, Enter local busy", chan);
3806

3807 3808
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3809
	__set_ack_timer(chan);
3810 3811 3812 3813
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
3814
	u32 control;
3815

3816
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3817 3818
		goto done;

3819
	control = __set_reqseq(chan, chan->buffer_seq);
3820
	control |= __set_ctrl_poll(chan);
3821
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3822
	l2cap_send_sframe(chan, control);
3823
	chan->retry_count = 1;
3824

3825 3826
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3827

3828
	set_bit(CONN_WAIT_F, &chan->conn_state);
3829 3830

done:
3831 3832
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3833

3834
	BT_DBG("chan %p, Exit local busy", chan);
3835 3836
}

3837
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3838
{
3839 3840 3841 3842 3843
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3844 3845 3846
	}
}

3847
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3848 3849
{
	struct sk_buff *skb;
3850
	u32 control;
3851

3852 3853 3854 3855
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3856 3857 3858
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3859
		skb = skb_dequeue(&chan->srej_q);
3860
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3861
		err = l2cap_reassemble_sdu(chan, skb, control);
3862 3863 3864 3865 3866 3867

		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
			break;
		}

3868 3869
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3870 3871 3872
	}
}

3873
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3874 3875
{
	struct srej_list *l, *tmp;
3876
	u32 control;
3877

3878
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3879 3880 3881 3882 3883
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
3884
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3885
		control |= __set_reqseq(chan, l->tx_seq);
3886
		l2cap_send_sframe(chan, control);
3887
		list_del(&l->list);
3888
		list_add_tail(&l->list, &chan->srej_l);
3889 3890 3891
	}
}

3892
static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3893 3894
{
	struct srej_list *new;
3895
	u32 control;
3896

3897
	while (tx_seq != chan->expected_tx_seq) {
3898
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3899
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3900
		l2cap_send_sframe(chan, control);
3901 3902

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3903 3904 3905
		if (!new)
			return -ENOMEM;

3906
		new->tx_seq = chan->expected_tx_seq;
3907 3908 3909

		chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);

3910
		list_add_tail(&new->list, &chan->srej_l);
3911
	}
3912 3913

	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3914 3915

	return 0;
3916 3917
}

3918
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3919
{
3920
	u16 tx_seq = __get_txseq(chan, rx_control);
3921
	u16 req_seq = __get_reqseq(chan, rx_control);
3922
	u8 sar = __get_ctrl_sar(chan, rx_control);
3923
	int tx_seq_offset, expected_tx_seq_offset;
3924
	int num_to_ack = (chan->tx_win/6) + 1;
3925 3926
	int err = 0;

3927
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3928
							tx_seq, rx_control);
3929

3930
	if (__is_ctrl_final(chan, rx_control) &&
3931
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3932
		__clear_monitor_timer(chan);
3933
		if (chan->unacked_frames > 0)
3934
			__set_retrans_timer(chan);
3935
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3936 3937
	}

3938 3939
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3940

3941
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3942 3943

	/* invalid tx_seq */
3944
	if (tx_seq_offset >= chan->tx_win) {
3945
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3946 3947 3948
		goto drop;
	}

3949 3950 3951
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
			l2cap_send_ack(chan);
3952
		goto drop;
3953
	}
3954

3955 3956 3957
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

3958
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3959
		struct srej_list *first;
3960

3961
		first = list_first_entry(&chan->srej_l,
3962 3963
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3964
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3965
			l2cap_check_srej_gap(chan, tx_seq);
3966 3967 3968 3969

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

3970
			if (list_empty(&chan->srej_l)) {
3971
				chan->buffer_seq = chan->buffer_seq_srej;
3972
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3973
				l2cap_send_ack(chan);
3974
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3975 3976 3977
			}
		} else {
			struct srej_list *l;
3978 3979

			/* duplicated tx_seq */
3980
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3981
				goto drop;
3982

3983
			list_for_each_entry(l, &chan->srej_l, list) {
3984
				if (l->tx_seq == tx_seq) {
3985
					l2cap_resend_srejframe(chan, tx_seq);
3986 3987 3988
					return 0;
				}
			}
3989 3990 3991 3992 3993 3994

			err = l2cap_send_srejframe(chan, tx_seq);
			if (err < 0) {
				l2cap_send_disconn_req(chan->conn, chan, -err);
				return err;
			}
3995 3996
		}
	} else {
3997 3998
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
3999 4000 4001 4002 4003

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

4004
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
4005

4006
		BT_DBG("chan %p, Enter SREJ", chan);
4007

4008
		INIT_LIST_HEAD(&chan->srej_l);
4009
		chan->buffer_seq_srej = chan->buffer_seq;
4010

4011
		__skb_queue_head_init(&chan->srej_q);
4012
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4013

4014 4015 4016
		/* Set P-bit only if there are some I-frames to ack. */
		if (__clear_ack_timer(chan))
			set_bit(CONN_SEND_PBIT, &chan->conn_state);
4017

4018 4019 4020 4021 4022
		err = l2cap_send_srejframe(chan, tx_seq);
		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, -err);
			return err;
		}
4023
	}
4024 4025
	return 0;

4026
expected:
4027
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4028

4029
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4030 4031
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
4032
		__skb_queue_tail(&chan->srej_q, skb);
4033 4034 4035
		return 0;
	}

4036
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
4037 4038
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

4039 4040 4041 4042
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
4043

4044
	if (__is_ctrl_final(chan, rx_control)) {
4045
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4046
			l2cap_retransmit_frames(chan);
4047 4048
	}

4049

4050 4051
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
4052
		l2cap_send_ack(chan);
4053 4054
	else
		__set_ack_timer(chan);
4055

4056
	return 0;
4057 4058 4059 4060

drop:
	kfree_skb(skb);
	return 0;
4061 4062
}

4063
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
4064
{
4065
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
4066
				__get_reqseq(chan, rx_control), rx_control);
4067

4068
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
4069
	l2cap_drop_acked_frames(chan);
4070

4071
	if (__is_ctrl_poll(chan, rx_control)) {
4072 4073 4074
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
			if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4075
					(chan->unacked_frames > 0))
4076
				__set_retrans_timer(chan);
4077

4078
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4079
			l2cap_send_srejtail(chan);
4080
		} else {
4081
			l2cap_send_i_or_rr_or_rnr(chan);
4082
		}
4083

4084
	} else if (__is_ctrl_final(chan, rx_control)) {
4085
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4086

4087
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4088
			l2cap_retransmit_frames(chan);
4089

4090
	} else {
4091
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4092
				(chan->unacked_frames > 0))
4093
			__set_retrans_timer(chan);
4094

4095 4096
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4097
			l2cap_send_ack(chan);
4098
		else
4099
			l2cap_ertm_send(chan);
4100 4101
	}
}
4102

4103
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4104
{
4105
	u16 tx_seq = __get_reqseq(chan, rx_control);
4106

4107
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4108

4109
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4110

4111 4112
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4113

4114
	if (__is_ctrl_final(chan, rx_control)) {
4115
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4116
			l2cap_retransmit_frames(chan);
4117
	} else {
4118
		l2cap_retransmit_frames(chan);
4119

4120 4121
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
4122 4123
	}
}
4124
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
4125
{
4126
	u16 tx_seq = __get_reqseq(chan, rx_control);
4127

4128
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4129

4130
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4131

4132
	if (__is_ctrl_poll(chan, rx_control)) {
4133 4134
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
4135

4136
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4137
		l2cap_retransmit_one_frame(chan, tx_seq);
4138

4139
		l2cap_ertm_send(chan);
4140

4141
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4142
			chan->srej_save_reqseq = tx_seq;
4143
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4144
		}
4145
	} else if (__is_ctrl_final(chan, rx_control)) {
4146
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
4147
				chan->srej_save_reqseq == tx_seq)
4148
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4149
		else
4150
			l2cap_retransmit_one_frame(chan, tx_seq);
4151
	} else {
4152
		l2cap_retransmit_one_frame(chan, tx_seq);
4153
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4154
			chan->srej_save_reqseq = tx_seq;
4155
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4156
		}
4157 4158 4159
	}
}

4160
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4161
{
4162
	u16 tx_seq = __get_reqseq(chan, rx_control);
4163

4164
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan, tx_seq, rx_control);
4165

4166
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4167 4168
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4169

4170
	if (__is_ctrl_poll(chan, rx_control))
4171
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4172

4173
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4174
		__clear_retrans_timer(chan);
4175
		if (__is_ctrl_poll(chan, rx_control))
4176
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4177
		return;
4178
	}
4179

4180
	if (__is_ctrl_poll(chan, rx_control)) {
4181
		l2cap_send_srejtail(chan);
4182 4183 4184 4185
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
4186 4187
}

4188
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4189
{
4190
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4191

4192
	if (__is_ctrl_final(chan, rx_control) &&
4193
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4194
		__clear_monitor_timer(chan);
4195
		if (chan->unacked_frames > 0)
4196
			__set_retrans_timer(chan);
4197
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4198 4199
	}

4200 4201
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
4202
		l2cap_data_channel_rrframe(chan, rx_control);
4203 4204
		break;

4205
	case L2CAP_SUPER_REJ:
4206
		l2cap_data_channel_rejframe(chan, rx_control);
4207
		break;
4208

4209
	case L2CAP_SUPER_SREJ:
4210
		l2cap_data_channel_srejframe(chan, rx_control);
4211 4212
		break;

4213
	case L2CAP_SUPER_RNR:
4214
		l2cap_data_channel_rnrframe(chan, rx_control);
4215 4216 4217
		break;
	}

4218
	kfree_skb(skb);
4219 4220 4221
	return 0;
}

4222
static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4223
{
4224
	u32 control;
4225
	u16 req_seq;
4226 4227
	int len, next_tx_seq_offset, req_seq_offset;

4228 4229
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
4230 4231 4232 4233 4234 4235 4236
	len = skb->len;

	/*
	 * We can just drop the corrupted I-frame here.
	 * Receiver will miss it and start proper recovery
	 * procedures and ask retransmission.
	 */
4237
	if (l2cap_check_fcs(chan, skb))
4238 4239
		goto drop;

4240
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4241
		len -= L2CAP_SDULEN_SIZE;
4242

4243
	if (chan->fcs == L2CAP_FCS_CRC16)
4244
		len -= L2CAP_FCS_SIZE;
4245

4246
	if (len > chan->mps) {
4247
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4248 4249 4250
		goto drop;
	}

4251
	req_seq = __get_reqseq(chan, control);
4252

4253 4254 4255 4256
	req_seq_offset = __seq_offset(chan, req_seq, chan->expected_ack_seq);

	next_tx_seq_offset = __seq_offset(chan, chan->next_tx_seq,
						chan->expected_ack_seq);
4257 4258 4259

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
4260
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4261 4262 4263
		goto drop;
	}

4264
	if (!__is_sframe(chan, control)) {
4265
		if (len < 0) {
4266
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4267 4268 4269
			goto drop;
		}

4270
		l2cap_data_channel_iframe(chan, control, skb);
4271 4272 4273
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
4274
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4275 4276 4277
			goto drop;
		}

4278
		l2cap_data_channel_sframe(chan, control, skb);
4279 4280 4281 4282 4283 4284 4285 4286 4287
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
4288 4289
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
4290
	struct l2cap_chan *chan;
4291
	u32 control;
4292
	u16 tx_seq;
4293
	int len;
L
Linus Torvalds 已提交
4294

4295
	chan = l2cap_get_chan_by_scid(conn, cid);
4296
	if (!chan) {
L
Linus Torvalds 已提交
4297
		BT_DBG("unknown cid 0x%4.4x", cid);
4298
		/* Drop packet and return */
4299
		kfree_skb(skb);
4300
		return 0;
L
Linus Torvalds 已提交
4301 4302
	}

4303
	l2cap_chan_lock(chan);
4304

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

4307
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4308 4309
		goto drop;

4310
	switch (chan->mode) {
4311 4312 4313 4314 4315
	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 已提交
4316

4317
		if (chan->imtu < skb->len)
4318
			goto drop;
L
Linus Torvalds 已提交
4319

4320
		if (!chan->ops->recv(chan->data, skb))
4321 4322 4323 4324
			goto done;
		break;

	case L2CAP_MODE_ERTM:
4325
		l2cap_ertm_data_rcv(chan, skb);
4326

4327
		goto done;
4328

4329
	case L2CAP_MODE_STREAMING:
4330 4331
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
4332 4333
		len = skb->len;

4334
		if (l2cap_check_fcs(chan, skb))
4335 4336
			goto drop;

4337
		if (__is_sar_start(chan, control))
4338
			len -= L2CAP_SDULEN_SIZE;
4339

4340
		if (chan->fcs == L2CAP_FCS_CRC16)
4341
			len -= L2CAP_FCS_SIZE;
4342

4343
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4344 4345
			goto drop;

4346
		tx_seq = __get_txseq(chan, control);
4347

4348 4349 4350 4351 4352 4353
		if (chan->expected_tx_seq != tx_seq) {
			/* Frame(s) missing - must discard partial SDU */
			kfree_skb(chan->sdu);
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
4354

4355 4356 4357
			/* TODO: Notify userland of missing data */
		}

4358
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
4359 4360 4361

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4362 4363 4364

		goto done;

4365
	default:
4366
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4367 4368
		break;
	}
L
Linus Torvalds 已提交
4369 4370 4371 4372 4373

drop:
	kfree_skb(skb);

done:
4374
	l2cap_chan_unlock(chan);
4375

L
Linus Torvalds 已提交
4376 4377 4378
	return 0;
}

4379
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
4380
{
4381
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4382

4383 4384
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
4385 4386
		goto drop;

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

4389
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4390 4391
		goto drop;

4392
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
4393 4394
		goto drop;

4395
	if (!chan->ops->recv(chan->data, skb))
4396
		return 0;
L
Linus Torvalds 已提交
4397 4398 4399 4400 4401 4402 4403

drop:
	kfree_skb(skb);

	return 0;
}

4404 4405
static inline int l2cap_att_channel(struct l2cap_conn *conn, u16 cid,
				    struct sk_buff *skb)
4406
{
4407
	struct l2cap_chan *chan;
4408

4409 4410
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
4411 4412
		goto drop;

4413
	BT_DBG("chan %p, len %d", chan, skb->len);
4414

4415
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4416 4417
		goto drop;

4418
	if (chan->imtu < skb->len)
4419 4420
		goto drop;

4421
	if (!chan->ops->recv(chan->data, skb))
4422
		return 0;
4423 4424 4425 4426 4427 4428 4429

drop:
	kfree_skb(skb);

	return 0;
}

L
Linus Torvalds 已提交
4430 4431 4432
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4433 4434
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4435 4436 4437 4438 4439

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

4440 4441 4442 4443 4444
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4445 4446 4447
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4448
	case L2CAP_CID_LE_SIGNALING:
4449
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4450 4451 4452
		l2cap_sig_channel(conn, skb);
		break;

4453
	case L2CAP_CID_CONN_LESS:
4454
		psm = get_unaligned((__le16 *) skb->data);
L
Linus Torvalds 已提交
4455 4456 4457 4458
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4459 4460 4461 4462
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4463 4464 4465 4466 4467
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4468 4469 4470 4471 4472 4473 4474 4475
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

4476
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
L
Linus Torvalds 已提交
4477 4478
{
	int exact = 0, lm1 = 0, lm2 = 0;
4479
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4480 4481 4482 4483

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

	/* Find listening sockets and check their link_mode */
4484 4485 4486
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4487

4488
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4489 4490 4491
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4492
			lm1 |= HCI_LM_ACCEPT;
4493
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4494
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4495
			exact++;
4496 4497
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4498
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4499 4500
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4501
	}
4502
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4503 4504 4505 4506

	return exact ? lm1 : lm2;
}

4507
int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
L
Linus Torvalds 已提交
4508
{
4509 4510
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4511 4512 4513 4514 4515 4516
	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
4517
	} else
4518
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4519 4520 4521 4522

	return 0;
}

4523
int l2cap_disconn_ind(struct hci_conn *hcon)
4524 4525 4526 4527 4528
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4529
	if (!conn)
4530
		return HCI_ERROR_REMOTE_USER_TERM;
4531 4532 4533
	return conn->disc_reason;
}

4534
int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4535 4536 4537
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4538
	l2cap_conn_del(hcon, bt_to_errno(reason));
L
Linus Torvalds 已提交
4539 4540 4541
	return 0;
}

4542
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4543
{
4544
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4545 4546
		return;

4547
	if (encrypt == 0x00) {
4548
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4549
			__set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
4550
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4551
			l2cap_chan_close(chan, ECONNREFUSED);
4552
	} else {
4553
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4554
			__clear_chan_timer(chan);
4555 4556 4557
	}
}

4558
int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4559
{
4560
	struct l2cap_conn *conn = hcon->l2cap_data;
4561
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4562

4563
	if (!conn)
L
Linus Torvalds 已提交
4564
		return 0;
4565

L
Linus Torvalds 已提交
4566 4567
	BT_DBG("conn %p", conn);

4568 4569
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
4570
		cancel_delayed_work(&conn->security_timer);
4571 4572
	}

4573
	mutex_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4574

4575
	list_for_each_entry(chan, &conn->chan_l, list) {
4576
		l2cap_chan_lock(chan);
L
Linus Torvalds 已提交
4577

4578 4579 4580 4581 4582
		BT_DBG("chan->scid %d", chan->scid);

		if (chan->scid == L2CAP_CID_LE_DATA) {
			if (!status && encrypt) {
				chan->sec_level = hcon->sec_level;
4583
				l2cap_chan_ready(chan);
4584 4585
			}

4586
			l2cap_chan_unlock(chan);
4587 4588 4589
			continue;
		}

4590
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4591
			l2cap_chan_unlock(chan);
4592 4593 4594
			continue;
		}

4595 4596
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4597
			l2cap_check_encryption(chan, encrypt);
4598
			l2cap_chan_unlock(chan);
4599 4600 4601
			continue;
		}

4602
		if (chan->state == BT_CONNECT) {
4603
			if (!status) {
4604
				l2cap_send_conn_req(chan);
4605
			} else {
4606
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4607
			}
4608
		} else if (chan->state == BT_CONNECT2) {
4609
			struct sock *sk = chan->sk;
4610
			struct l2cap_conn_rsp rsp;
4611
			__u16 res, stat;
L
Linus Torvalds 已提交
4612

4613 4614
			lock_sock(sk);

4615
			if (!status) {
4616 4617 4618 4619
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4620 4621
					if (parent)
						parent->sk_data_ready(parent, 0);
4622
				} else {
4623
					__l2cap_state_change(chan, BT_CONFIG);
4624 4625 4626
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4627
			} else {
4628
				__l2cap_state_change(chan, BT_DISCONN);
4629
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4630 4631
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4632 4633
			}

4634 4635
			release_sock(sk);

4636 4637
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4638 4639
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4640 4641
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4642
		}
L
Linus Torvalds 已提交
4643

4644
		l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
4645 4646
	}

4647
	mutex_unlock(&conn->chan_lock);
4648

L
Linus Torvalds 已提交
4649 4650 4651
	return 0;
}

4652
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
L
Linus Torvalds 已提交
4653 4654 4655
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4656 4657 4658 4659
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4660 4661 4662 4663
		goto drop;

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

4664
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4665
		struct l2cap_hdr *hdr;
4666
		struct l2cap_chan *chan;
4667
		u16 cid;
L
Linus Torvalds 已提交
4668 4669 4670 4671 4672 4673 4674 4675 4676 4677
		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);
		}

4678 4679
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4680 4681 4682 4683 4684 4685 4686
			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;
4687
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703

		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;
		}

4704
		chan = l2cap_get_chan_by_scid(conn, cid);
4705

4706 4707
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4708
			lock_sock(sk);
4709

4710
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4711 4712
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4713
							chan->imtu);
4714
				release_sock(sk);
4715 4716 4717
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4718
			release_sock(sk);
4719
		}
4720

L
Linus Torvalds 已提交
4721
		/* Allocate skb for the complete frame (with header) */
4722 4723
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4724 4725
			goto drop;

4726
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4727
								skb->len);
L
Linus Torvalds 已提交
4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747
		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;
		}

4748
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4749
								skb->len);
L
Linus Torvalds 已提交
4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763
		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;
}

4764
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4765
{
4766
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4767

4768
	read_lock(&chan_list_lock);
L
Linus Torvalds 已提交
4769

4770 4771
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4772

4773
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4774 4775
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4776
					c->state, __le16_to_cpu(c->psm),
4777 4778
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4779
	}
L
Linus Torvalds 已提交
4780

4781
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4782

4783
	return 0;
L
Linus Torvalds 已提交
4784 4785
}

4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798
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 已提交
4799

4800
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4801 4802
{
	int err;
4803

4804
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4805 4806 4807
	if (err < 0)
		return err;

4808 4809 4810 4811 4812 4813
	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 已提交
4814 4815 4816 4817

	return 0;
}

4818
void l2cap_exit(void)
L
Linus Torvalds 已提交
4819
{
4820
	debugfs_remove(l2cap_debugfs);
4821
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4822 4823
}

4824 4825
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");