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 1566
	struct sk_buff **frag;
	int err, 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 1581
					     msg->msg_flags & MSG_DONTWAIT,
					     &err);
1582

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

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

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

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

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

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

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

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

	skb = chan->ops->alloc_skb(chan, count + hlen,
1613
				   msg->msg_flags & MSG_DONTWAIT, &err);
1614

1615
	if (!skb)
1616
		return ERR_PTR(err);
1617

1618 1619
	skb->priority = priority;

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

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

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

1643
	BT_DBG("chan %p len %d", chan, (int)len);
1644 1645

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1646 1647

	skb = chan->ops->alloc_skb(chan, count + hlen,
1648
				   msg->msg_flags & MSG_DONTWAIT, &err);
1649

1650
	if (!skb)
1651
		return ERR_PTR(err);
1652

1653 1654
	skb->priority = priority;

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

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

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

1677
	BT_DBG("chan %p len %d", chan, (int)len);
1678

1679 1680 1681
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1682 1683 1684 1685 1686
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1687
	if (sdulen)
1688
		hlen += L2CAP_SDULEN_SIZE;
1689

1690
	if (chan->fcs == L2CAP_FCS_CRC16)
1691
		hlen += L2CAP_FCS_SIZE;
1692

1693
	count = min_t(unsigned int, (conn->mtu - hlen), len);
1694 1695 1696 1697

	skb = chan->ops->alloc_skb(chan, count + hlen,
					msg->msg_flags & MSG_DONTWAIT, &err);

1698
	if (!skb)
1699
		return ERR_PTR(err);
1700 1701 1702

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1703
	lh->cid = cpu_to_le16(chan->dcid);
1704
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1705 1706 1707

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

1708
	if (sdulen)
1709
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1710

1711
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1712 1713 1714 1715
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1716

1717
	if (chan->fcs == L2CAP_FCS_CRC16)
1718
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1719

1720
	bt_cb(skb)->retries = 0;
1721
	return skb;
L
Linus Torvalds 已提交
1722 1723
}

1724
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1725 1726 1727
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1728
	u32 control;
1729 1730
	size_t size = 0;

1731
	skb_queue_head_init(&sar_queue);
1732
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1733
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1734 1735 1736 1737
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1738 1739
	len -= chan->remote_mps;
	size += chan->remote_mps;
1740 1741 1742 1743

	while (len > 0) {
		size_t buflen;

1744
		if (len > chan->remote_mps) {
1745
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1746
			buflen = chan->remote_mps;
1747
		} else {
1748
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
1749 1750 1751
			buflen = len;
		}

1752
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1753 1754 1755 1756 1757 1758 1759 1760 1761
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1762 1763 1764
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1765 1766 1767 1768

	return size;
}

1769 1770
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
								u32 priority)
1771 1772
{
	struct sk_buff *skb;
1773
	u32 control;
1774 1775 1776
	int err;

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

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

	BT_DBG("conn %p", conn);

1857
	mutex_lock(&conn->chan_lock);
1858

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

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

1871
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
1872 1873
			kfree_skb(nskb);
	}
1874

1875
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886
}

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

1887 1888
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1889 1890 1891 1892 1893 1894 1895 1896 1897

	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);
1898
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1899 1900 1901 1902 1903

	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 已提交
1904 1905 1906 1907

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1908
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
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 1955 1956 1957 1958

	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:
1959
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1960 1961 1962
		break;

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

	case 4:
1994
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

2005 2006 2007 2008
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

2009
	switch (chan->mode) {
2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035
	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);
}

2036
static void l2cap_ack_timeout(struct work_struct *work)
2037
{
2038 2039
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							ack_timer.work);
2040

2041 2042
	BT_DBG("chan %p", chan);

2043 2044
	l2cap_chan_lock(chan);

2045
	__l2cap_send_ack(chan);
2046 2047

	l2cap_chan_unlock(chan);
2048 2049

	l2cap_chan_put(chan);
2050 2051
}

2052
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
2053
{
2054
	chan->expected_ack_seq = 0;
2055
	chan->unacked_frames = 0;
2056
	chan->buffer_seq = 0;
2057 2058
	chan->num_acked = 0;
	chan->frames_sent = 0;
2059

2060 2061 2062
	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);
2063

2064
	skb_queue_head_init(&chan->srej_q);
2065

2066
	INIT_LIST_HEAD(&chan->srej_l);
2067 2068
}

2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081
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;
	}
}

2082 2083 2084 2085 2086
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

2087 2088 2089 2090 2091
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

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

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

2113
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2114

2115
	if (chan->num_conf_req || chan->num_conf_rsp)
2116 2117
		goto done;

2118
	switch (chan->mode) {
2119 2120
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2121
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2122 2123
			break;

2124 2125 2126
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2127
		/* fall through */
2128
	default:
2129
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2130 2131 2132 2133
		break;
	}

done:
2134 2135
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2136

2137
	switch (chan->mode) {
2138
	case L2CAP_MODE_BASIC:
2139 2140
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2141 2142
			break;

2143 2144 2145 2146 2147 2148 2149
		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;

2150 2151
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
2152 2153 2154 2155
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2156
		rfc.max_transmit    = chan->max_tx;
2157 2158
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2159 2160 2161 2162 2163 2164

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

2166 2167 2168 2169
		l2cap_txwin_setup(chan);

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

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

2174 2175 2176
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2177
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2178 2179
			break;

2180
		if (chan->fcs == L2CAP_FCS_NONE ||
2181
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2182 2183
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2184
		}
2185 2186 2187 2188

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

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

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

2207 2208 2209
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2210
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2211 2212
			break;

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

2221
	req->dcid  = cpu_to_le16(chan->dcid);
2222
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2223 2224 2225 2226

	return ptr - data;
}

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

2242
	BT_DBG("chan %p", chan);
2243

2244 2245
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2246

2247
		hint  = type & L2CAP_CONF_HINT;
2248
		type &= L2CAP_CONF_MASK;
2249 2250 2251

		switch (type) {
		case L2CAP_CONF_MTU:
2252
			mtu = val;
2253 2254 2255
			break;

		case L2CAP_CONF_FLUSH_TO:
2256
			chan->flush_to = val;
2257 2258 2259 2260 2261
			break;

		case L2CAP_CONF_QOS:
			break;

2262 2263 2264 2265 2266
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2267 2268
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2269
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2270
			break;
2271

2272 2273 2274 2275
		case L2CAP_CONF_EFS:
			remote_efs = 1;
			if (olen == sizeof(efs))
				memcpy(&efs, (void *) val, olen);
2276 2277
			break;

2278 2279 2280
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;
2281

2282 2283
			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2284
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2285
			chan->remote_tx_win = val;
2286 2287
			break;

2288 2289 2290 2291 2292 2293 2294 2295 2296 2297
		default:
			if (hint)
				break;

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

2298
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2299 2300
		goto done;

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

2310 2311 2312 2313 2314 2315 2316
		if (remote_efs) {
			if (__l2cap_efs_supported(chan))
				set_bit(FLAG_EFS_ENABLE, &chan->flags);
			else
				return -ECONNREFUSED;
		}

2317
		if (chan->mode != rfc.mode)
2318
			return -ECONNREFUSED;
2319

2320 2321 2322 2323
		break;
	}

done:
2324
	if (chan->mode != rfc.mode) {
2325
		result = L2CAP_CONF_UNACCEPT;
2326
		rfc.mode = chan->mode;
2327

2328
		if (chan->num_conf_rsp == 1)
2329 2330 2331 2332 2333 2334
			return -ECONNREFUSED;

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

2335 2336 2337 2338
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2339 2340 2341
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2342
			chan->omtu = mtu;
2343
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2344
		}
2345
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2346

2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357
		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,
2358
							sizeof(efs),
2359
							(unsigned long) &efs);
2360
			} else {
2361
				/* Send PENDING Conf Rsp */
2362 2363
				result = L2CAP_CONF_PENDING;
				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2364 2365 2366
			}
		}

2367 2368
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2369
			chan->fcs = L2CAP_FCS_NONE;
2370
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2371 2372 2373
			break;

		case L2CAP_MODE_ERTM:
2374 2375 2376 2377
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2378

2379
			chan->remote_max_tx = rfc.max_transmit;
2380

2381 2382 2383 2384 2385 2386 2387
			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;
2388

2389
			rfc.retrans_timeout =
2390
				__constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2391
			rfc.monitor_timeout =
2392
				__constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2393

2394
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2395 2396 2397 2398

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

2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411
			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);
			}
2412 2413 2414
			break;

		case L2CAP_MODE_STREAMING:
2415 2416 2417 2418 2419 2420 2421
			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;
2422

2423
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2424 2425 2426 2427

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

2428 2429 2430
			break;

		default:
2431 2432
			result = L2CAP_CONF_UNACCEPT;

2433
			memset(&rfc, 0, sizeof(rfc));
2434
			rfc.mode = chan->mode;
2435
		}
2436

2437
		if (result == L2CAP_CONF_SUCCESS)
2438
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2439
	}
2440
	rsp->scid   = cpu_to_le16(chan->dcid);
2441 2442 2443 2444
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2445 2446
}

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

2456
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2457 2458 2459 2460 2461 2462 2463 2464

	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;
2465
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2466
			} else
2467 2468
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2469 2470 2471
			break;

		case L2CAP_CONF_FLUSH_TO:
2472
			chan->flush_to = val;
2473
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2474
							2, chan->flush_to);
2475 2476 2477 2478 2479 2480
			break;

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

2481
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2482
							rfc.mode != chan->mode)
2483 2484
				return -ECONNREFUSED;

2485
			chan->fcs = 0;
2486 2487 2488 2489

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2490 2491 2492 2493

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

		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;
2510 2511 2512
		}
	}

2513
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2514 2515
		return -ECONNREFUSED;

2516
	chan->mode = rfc.mode;
2517

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

			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);
			}
2533
			break;
2534

2535
		case L2CAP_MODE_STREAMING:
2536
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2537 2538 2539
		}
	}

2540
	req->dcid   = cpu_to_le16(chan->dcid);
2541 2542 2543 2544 2545
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2546
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2547 2548 2549 2550
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2551
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2552

2553
	rsp->scid   = cpu_to_le16(chan->dcid);
2554
	rsp->result = cpu_to_le16(result);
2555
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2556 2557 2558 2559

	return ptr - data;
}

2560
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2561 2562
{
	struct l2cap_conn_rsp rsp;
2563
	struct l2cap_conn *conn = chan->conn;
2564 2565
	u8 buf[128];

2566 2567
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2568 2569 2570 2571 2572
	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);

2573
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2574 2575 2576 2577 2578 2579 2580
		return;

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

2581
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2582 2583 2584 2585 2586
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2587
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2588

2589
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602
		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;
		}
	}

2603 2604 2605 2606 2607 2608 2609 2610 2611 2612
	/* 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");

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

2625 2626
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2627
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2628

2629
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2630 2631 2632 2633
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
2634
		cancel_delayed_work(&conn->info_timer);
2635 2636

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2637
		conn->info_ident = 0;
2638

2639 2640 2641 2642 2643 2644
		l2cap_conn_start(conn);
	}

	return 0;
}

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

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

2656
	BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
L
Linus Torvalds 已提交
2657 2658

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

2665 2666
	parent = pchan->sk;

2667
	mutex_lock(&conn->chan_lock);
2668
	lock_sock(parent);
2669

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

L
Linus Torvalds 已提交
2678 2679 2680 2681
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2682
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2683 2684 2685
		goto response;
	}

2686 2687
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2688 2689
		goto response;

2690 2691
	sk = chan->sk;

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

	hci_conn_hold(conn->hcon);

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

2706 2707
	bt_accept_enqueue(parent, sk);

2708
	__l2cap_chan_add(conn, chan);
2709

2710
	dcid = chan->scid;
L
Linus Torvalds 已提交
2711

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

2714
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2715

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

response:
2740
	release_sock(parent);
2741
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
2742 2743

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

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

2757
		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
2758 2759 2760 2761 2762

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

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

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

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

2788 2789
	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 已提交
2790

2791 2792
	mutex_lock(&conn->chan_lock);

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

2807 2808
	err = 0;

2809
	l2cap_chan_lock(chan);
2810

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

2818
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2819 2820
			break;

L
Linus Torvalds 已提交
2821
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2822 2823
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2824 2825 2826
		break;

	case L2CAP_CR_PEND:
2827
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2828 2829 2830
		break;

	default:
2831
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2832 2833 2834
		break;
	}

2835
	l2cap_chan_unlock(chan);
2836 2837 2838 2839 2840

unlock:
	mutex_unlock(&conn->chan_lock);

	return err;
L
Linus Torvalds 已提交
2841 2842
}

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

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

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

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

2867
	chan = l2cap_get_chan_by_scid(conn, dcid);
2868
	if (!chan)
L
Linus Torvalds 已提交
2869 2870
		return -ENOENT;

2871
	l2cap_chan_lock(chan);
2872

2873
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2874 2875 2876 2877 2878
		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);
2879 2880 2881

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2882
		goto unlock;
2883
	}
2884

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

	/* Store config. */
2895 2896
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2897 2898 2899 2900

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

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

2913
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2914
	chan->num_conf_rsp++;
2915 2916

	/* Reset config buffer. */
2917
	chan->conf_len = 0;
2918

2919
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2920 2921
		goto unlock;

2922
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2923
		set_default_fcs(chan);
2924

2925
		l2cap_state_change(chan, BT_CONNECTED);
2926

2927 2928
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2929
		skb_queue_head_init(&chan->tx_q);
2930
		if (chan->mode == L2CAP_MODE_ERTM)
2931
			l2cap_ertm_init(chan);
2932

2933
		l2cap_chan_ready(chan);
2934 2935 2936
		goto unlock;
	}

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

2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954
	/* 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,
2955
					l2cap_build_conf_rsp(chan, rsp,
2956 2957 2958
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

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

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

2975 2976
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
	       result, len);
L
Linus Torvalds 已提交
2977

2978
	chan = l2cap_get_chan_by_scid(conn, scid);
2979
	if (!chan)
L
Linus Torvalds 已提交
2980 2981
		return 0;

2982
	l2cap_chan_lock(chan);
2983

L
Linus Torvalds 已提交
2984 2985
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2986
		l2cap_conf_rfc_get(chan, rsp->data, len);
2987
		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2988 2989
		break;

2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008
	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,
3009
						l2cap_build_conf_rsp(chan, buf,
3010 3011 3012 3013
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

L
Linus Torvalds 已提交
3014
	case L2CAP_CONF_UNACCEPT:
3015
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
3016 3017
			char req[64];

3018
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3019
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
3020 3021 3022
				goto done;
			}

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

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

3040
	default:
3041
		l2cap_chan_set_err(chan, ECONNRESET);
3042

3043
		__set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
3044
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
3045 3046 3047 3048 3049 3050
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

3053
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
3054
		set_default_fcs(chan);
3055

3056
		l2cap_state_change(chan, BT_CONNECTED);
3057 3058
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
3059
		skb_queue_head_init(&chan->tx_q);
3060
		if (chan->mode ==  L2CAP_MODE_ERTM)
3061
			l2cap_ertm_init(chan);
3062

3063
		l2cap_chan_ready(chan);
L
Linus Torvalds 已提交
3064 3065 3066
	}

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

3084 3085 3086 3087 3088
	mutex_lock(&conn->chan_lock);

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

3092 3093
	l2cap_chan_lock(chan);

3094 3095
	sk = chan->sk;

3096 3097
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
3098 3099
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

3100
	lock_sock(sk);
L
Linus Torvalds 已提交
3101
	sk->sk_shutdown = SHUTDOWN_MASK;
3102
	release_sock(sk);
L
Linus Torvalds 已提交
3103

3104
	l2cap_chan_del(chan, ECONNRESET);
3105 3106

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

3108
	chan->ops->close(chan->data);
3109 3110 3111

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3112 3113 3114 3115 3116 3117 3118
	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;
3119
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3120 3121 3122 3123 3124 3125

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

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

3126 3127 3128 3129 3130
	mutex_lock(&conn->chan_lock);

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

3134
	l2cap_chan_lock(chan);
3135 3136

	l2cap_chan_del(chan, 0);
3137 3138

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

3140
	chan->ops->close(chan->data);
3141 3142 3143

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155
	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);

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

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

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

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

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

3207 3208 3209 3210 3211
	/* 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;

3212
	cancel_delayed_work(&conn->info_timer);
3213

3214 3215 3216 3217 3218 3219 3220 3221 3222
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

3223 3224
	switch (type) {
	case L2CAP_IT_FEAT_MASK:
3225
		conn->feat_mask = get_unaligned_le32(rsp->data);
3226

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

	case L2CAP_IT_FIXED_CHAN:
		conn->fixed_chan_mask = rsp->data[0];
3245
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3246
		conn->info_ident = 0;
3247 3248

		l2cap_conn_start(conn);
3249
		break;
3250
	}
3251

L
Linus Torvalds 已提交
3252 3253 3254
	return 0;
}

3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276
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);
3277 3278
	rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
	rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293

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

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 3410 3411 3412 3413
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;
}

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

	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;
3452 3453
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3454 3455 3456 3457 3458 3459 3460
	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));
3461 3462 3463

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3464 3465 3466 3467 3468 3469 3470
		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);

3471 3472 3473
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3474 3475 3476
	return 0;
}

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 3522 3523 3524 3525
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;

3526 3527 3528 3529 3530 3531 3532 3533
	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;

3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549
	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;

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

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

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3589
		u16 cmd_len;
L
Linus Torvalds 已提交
3590 3591 3592 3593
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3594
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3595

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

3598
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3599 3600 3601 3602
			BT_DBG("corrupted command");
			break;
		}

3603 3604 3605 3606
		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 已提交
3607 3608

		if (err) {
3609
			struct l2cap_cmd_rej_unk rej;
3610 3611

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

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

3618 3619
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3620 3621 3622 3623 3624
	}

	kfree_skb(skb);
}

3625
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3626 3627
{
	u16 our_fcs, rcv_fcs;
3628 3629 3630 3631 3632 3633
	int hdr_size;

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

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

3646
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3647
{
3648
	u32 control = 0;
3649

3650
	chan->frames_sent = 0;
3651

3652
	control |= __set_reqseq(chan, chan->buffer_seq);
3653

3654
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3655
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3656
		l2cap_send_sframe(chan, control);
3657
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3658 3659
	}

3660
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3661
		l2cap_retransmit_frames(chan);
3662

3663
	l2cap_ertm_send(chan);
3664

3665
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3666
			chan->frames_sent == 0) {
3667
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3668
		l2cap_send_sframe(chan, control);
3669 3670 3671
	}
}

3672
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3673 3674
{
	struct sk_buff *next_skb;
3675
	int tx_seq_offset, next_tx_seq_offset;
3676 3677 3678 3679

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

3680
	next_skb = skb_peek(&chan->srej_q);
3681

3682
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3683

3684
	while (next_skb) {
3685 3686 3687
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3688 3689
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3690 3691

		if (next_tx_seq_offset > tx_seq_offset) {
3692
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3693
			return 0;
3694 3695
		}

3696
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3697 3698 3699 3700
			next_skb = NULL;
		else
			next_skb = skb_queue_next(&chan->srej_q, next_skb);
	}
3701

3702
	__skb_queue_tail(&chan->srej_q, skb);
3703 3704

	return 0;
3705 3706
}

3707 3708
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3709
{
3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725
	/* 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;
}

3726
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3727 3728
{
	int err = -EINVAL;
3729

3730 3731
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3732 3733
		if (chan->sdu)
			break;
3734

3735 3736
		err = chan->ops->recv(chan->data, skb);
		break;
3737

3738
	case L2CAP_SAR_START:
3739 3740
		if (chan->sdu)
			break;
3741

3742
		chan->sdu_len = get_unaligned_le16(skb->data);
3743
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3744

3745 3746 3747 3748
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3749

3750 3751
		if (skb->len >= chan->sdu_len)
			break;
3752

3753 3754
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3755

3756 3757
		skb = NULL;
		err = 0;
3758 3759
		break;

3760
	case L2CAP_SAR_CONTINUE:
3761
		if (!chan->sdu)
3762
			break;
3763

3764 3765 3766
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3767

3768 3769
		if (chan->sdu->len >= chan->sdu_len)
			break;
3770

3771
		err = 0;
3772 3773
		break;

3774
	case L2CAP_SAR_END:
3775
		if (!chan->sdu)
3776
			break;
3777

3778 3779 3780
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3781

3782 3783
		if (chan->sdu->len != chan->sdu_len)
			break;
3784

3785
		err = chan->ops->recv(chan->data, chan->sdu);
3786

3787 3788 3789 3790 3791
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3792
		}
3793 3794 3795
		break;
	}

3796 3797 3798 3799 3800 3801 3802
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3803

3804
	return err;
3805 3806
}

3807
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3808
{
3809
	BT_DBG("chan %p, Enter local busy", chan);
3810

3811 3812
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3813
	__set_ack_timer(chan);
3814 3815 3816 3817
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
3818
	u32 control;
3819

3820
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3821 3822
		goto done;

3823
	control = __set_reqseq(chan, chan->buffer_seq);
3824
	control |= __set_ctrl_poll(chan);
3825
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3826
	l2cap_send_sframe(chan, control);
3827
	chan->retry_count = 1;
3828

3829 3830
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3831

3832
	set_bit(CONN_WAIT_F, &chan->conn_state);
3833 3834

done:
3835 3836
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3837

3838
	BT_DBG("chan %p, Exit local busy", chan);
3839 3840
}

3841
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3842
{
3843 3844 3845 3846 3847
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3848 3849 3850
	}
}

3851
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3852 3853
{
	struct sk_buff *skb;
3854
	u32 control;
3855

3856 3857 3858 3859
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3860 3861 3862
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3863
		skb = skb_dequeue(&chan->srej_q);
3864
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3865
		err = l2cap_reassemble_sdu(chan, skb, control);
3866 3867 3868 3869 3870 3871

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

3872 3873
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3874 3875 3876
	}
}

3877
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3878 3879
{
	struct srej_list *l, *tmp;
3880
	u32 control;
3881

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

3896
static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3897 3898
{
	struct srej_list *new;
3899
	u32 control;
3900

3901
	while (tx_seq != chan->expected_tx_seq) {
3902
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3903
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3904
		l2cap_send_sframe(chan, control);
3905 3906

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3907 3908 3909
		if (!new)
			return -ENOMEM;

3910
		new->tx_seq = chan->expected_tx_seq;
3911 3912 3913

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

3914
		list_add_tail(&new->list, &chan->srej_l);
3915
	}
3916 3917

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

	return 0;
3920 3921
}

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

3931
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3932
							tx_seq, rx_control);
3933

3934
	if (__is_ctrl_final(chan, rx_control) &&
3935
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3936
		__clear_monitor_timer(chan);
3937
		if (chan->unacked_frames > 0)
3938
			__set_retrans_timer(chan);
3939
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3940 3941
	}

3942 3943
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3944

3945
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3946 3947

	/* invalid tx_seq */
3948
	if (tx_seq_offset >= chan->tx_win) {
3949
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3950 3951 3952
		goto drop;
	}

3953 3954 3955
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
			l2cap_send_ack(chan);
3956
		goto drop;
3957
	}
3958

3959 3960 3961
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

3962
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3963
		struct srej_list *first;
3964

3965
		first = list_first_entry(&chan->srej_l,
3966 3967
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3968
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3969
			l2cap_check_srej_gap(chan, tx_seq);
3970 3971 3972 3973

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

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

			/* duplicated tx_seq */
3984
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3985
				goto drop;
3986

3987
			list_for_each_entry(l, &chan->srej_l, list) {
3988
				if (l->tx_seq == tx_seq) {
3989
					l2cap_resend_srejframe(chan, tx_seq);
3990 3991 3992
					return 0;
				}
			}
3993 3994 3995 3996 3997 3998

			err = l2cap_send_srejframe(chan, tx_seq);
			if (err < 0) {
				l2cap_send_disconn_req(chan->conn, chan, -err);
				return err;
			}
3999 4000
		}
	} else {
4001 4002
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
4003 4004 4005 4006 4007

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

4008
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
4009

4010
		BT_DBG("chan %p, Enter SREJ", chan);
4011

4012
		INIT_LIST_HEAD(&chan->srej_l);
4013
		chan->buffer_seq_srej = chan->buffer_seq;
4014

4015
		__skb_queue_head_init(&chan->srej_q);
4016
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4017

4018 4019 4020
		/* 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);
4021

4022 4023 4024 4025 4026
		err = l2cap_send_srejframe(chan, tx_seq);
		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, -err);
			return err;
		}
4027
	}
4028 4029
	return 0;

4030
expected:
4031
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4032

4033
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4034 4035
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
4036
		__skb_queue_tail(&chan->srej_q, skb);
4037 4038 4039
		return 0;
	}

4040
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
4041 4042
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

4043 4044 4045 4046
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
4047

4048
	if (__is_ctrl_final(chan, rx_control)) {
4049
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4050
			l2cap_retransmit_frames(chan);
4051 4052
	}

4053

4054 4055
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
4056
		l2cap_send_ack(chan);
4057 4058
	else
		__set_ack_timer(chan);
4059

4060
	return 0;
4061 4062 4063 4064

drop:
	kfree_skb(skb);
	return 0;
4065 4066
}

4067
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
4068
{
4069
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
4070
				__get_reqseq(chan, rx_control), rx_control);
4071

4072
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
4073
	l2cap_drop_acked_frames(chan);
4074

4075
	if (__is_ctrl_poll(chan, rx_control)) {
4076 4077 4078
		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) &&
4079
					(chan->unacked_frames > 0))
4080
				__set_retrans_timer(chan);
4081

4082
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4083
			l2cap_send_srejtail(chan);
4084
		} else {
4085
			l2cap_send_i_or_rr_or_rnr(chan);
4086
		}
4087

4088
	} else if (__is_ctrl_final(chan, rx_control)) {
4089
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4090

4091
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4092
			l2cap_retransmit_frames(chan);
4093

4094
	} else {
4095
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4096
				(chan->unacked_frames > 0))
4097
			__set_retrans_timer(chan);
4098

4099 4100
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4101
			l2cap_send_ack(chan);
4102
		else
4103
			l2cap_ertm_send(chan);
4104 4105
	}
}
4106

4107
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4108
{
4109
	u16 tx_seq = __get_reqseq(chan, rx_control);
4110

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

4113
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4114

4115 4116
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4117

4118
	if (__is_ctrl_final(chan, rx_control)) {
4119
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4120
			l2cap_retransmit_frames(chan);
4121
	} else {
4122
		l2cap_retransmit_frames(chan);
4123

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

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

4134
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4135

4136
	if (__is_ctrl_poll(chan, rx_control)) {
4137 4138
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
4139

4140
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4141
		l2cap_retransmit_one_frame(chan, tx_seq);
4142

4143
		l2cap_ertm_send(chan);
4144

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

4164
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4165
{
4166
	u16 tx_seq = __get_reqseq(chan, rx_control);
4167

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

4170
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4171 4172
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4173

4174
	if (__is_ctrl_poll(chan, rx_control))
4175
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4176

4177
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4178
		__clear_retrans_timer(chan);
4179
		if (__is_ctrl_poll(chan, rx_control))
4180
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4181
		return;
4182
	}
4183

4184
	if (__is_ctrl_poll(chan, rx_control)) {
4185
		l2cap_send_srejtail(chan);
4186 4187 4188 4189
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
4190 4191
}

4192
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4193
{
4194
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4195

4196
	if (__is_ctrl_final(chan, rx_control) &&
4197
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4198
		__clear_monitor_timer(chan);
4199
		if (chan->unacked_frames > 0)
4200
			__set_retrans_timer(chan);
4201
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4202 4203
	}

4204 4205
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
4206
		l2cap_data_channel_rrframe(chan, rx_control);
4207 4208
		break;

4209
	case L2CAP_SUPER_REJ:
4210
		l2cap_data_channel_rejframe(chan, rx_control);
4211
		break;
4212

4213
	case L2CAP_SUPER_SREJ:
4214
		l2cap_data_channel_srejframe(chan, rx_control);
4215 4216
		break;

4217
	case L2CAP_SUPER_RNR:
4218
		l2cap_data_channel_rnrframe(chan, rx_control);
4219 4220 4221
		break;
	}

4222
	kfree_skb(skb);
4223 4224 4225
	return 0;
}

4226
static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4227
{
4228
	u32 control;
4229
	u16 req_seq;
4230 4231
	int len, next_tx_seq_offset, req_seq_offset;

4232 4233
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
4234 4235 4236 4237 4238 4239 4240
	len = skb->len;

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

4244
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4245
		len -= L2CAP_SDULEN_SIZE;
4246

4247
	if (chan->fcs == L2CAP_FCS_CRC16)
4248
		len -= L2CAP_FCS_SIZE;
4249

4250
	if (len > chan->mps) {
4251
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4252 4253 4254
		goto drop;
	}

4255
	req_seq = __get_reqseq(chan, control);
4256

4257 4258 4259 4260
	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);
4261 4262 4263

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
4264
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4265 4266 4267
		goto drop;
	}

4268
	if (!__is_sframe(chan, control)) {
4269
		if (len < 0) {
4270
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4271 4272 4273
			goto drop;
		}

4274
		l2cap_data_channel_iframe(chan, control, skb);
4275 4276 4277
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
4278
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4279 4280 4281
			goto drop;
		}

4282
		l2cap_data_channel_sframe(chan, control, skb);
4283 4284 4285 4286 4287 4288 4289 4290 4291
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

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

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

4307
	l2cap_chan_lock(chan);
4308

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

4311
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4312 4313
		goto drop;

4314
	switch (chan->mode) {
4315 4316 4317 4318 4319
	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 已提交
4320

4321
		if (chan->imtu < skb->len)
4322
			goto drop;
L
Linus Torvalds 已提交
4323

4324
		if (!chan->ops->recv(chan->data, skb))
4325 4326 4327 4328
			goto done;
		break;

	case L2CAP_MODE_ERTM:
4329
		l2cap_ertm_data_rcv(chan, skb);
4330

4331
		goto done;
4332

4333
	case L2CAP_MODE_STREAMING:
4334 4335
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
4336 4337
		len = skb->len;

4338
		if (l2cap_check_fcs(chan, skb))
4339 4340
			goto drop;

4341
		if (__is_sar_start(chan, control))
4342
			len -= L2CAP_SDULEN_SIZE;
4343

4344
		if (chan->fcs == L2CAP_FCS_CRC16)
4345
			len -= L2CAP_FCS_SIZE;
4346

4347
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4348 4349
			goto drop;

4350
		tx_seq = __get_txseq(chan, control);
4351

4352 4353 4354 4355 4356 4357
		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;
4358

4359 4360 4361
			/* TODO: Notify userland of missing data */
		}

4362
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
4363 4364 4365

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4366 4367 4368

		goto done;

4369
	default:
4370
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4371 4372
		break;
	}
L
Linus Torvalds 已提交
4373 4374 4375 4376 4377

drop:
	kfree_skb(skb);

done:
4378
	l2cap_chan_unlock(chan);
4379

L
Linus Torvalds 已提交
4380 4381 4382
	return 0;
}

4383
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
4384
{
4385
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4386

4387 4388
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
4389 4390
		goto drop;

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

4393
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4394 4395
		goto drop;

4396
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
4397 4398
		goto drop;

4399
	if (!chan->ops->recv(chan->data, skb))
4400
		return 0;
L
Linus Torvalds 已提交
4401 4402 4403 4404 4405 4406 4407

drop:
	kfree_skb(skb);

	return 0;
}

4408 4409
static inline int l2cap_att_channel(struct l2cap_conn *conn, u16 cid,
				    struct sk_buff *skb)
4410
{
4411
	struct l2cap_chan *chan;
4412

4413 4414
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
4415 4416
		goto drop;

4417
	BT_DBG("chan %p, len %d", chan, skb->len);
4418

4419
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4420 4421
		goto drop;

4422
	if (chan->imtu < skb->len)
4423 4424
		goto drop;

4425
	if (!chan->ops->recv(chan->data, skb))
4426
		return 0;
4427 4428 4429 4430 4431 4432 4433

drop:
	kfree_skb(skb);

	return 0;
}

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

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

4444 4445 4446 4447 4448
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4449 4450 4451
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4452
	case L2CAP_CID_LE_SIGNALING:
4453
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4454 4455 4456
		l2cap_sig_channel(conn, skb);
		break;

4457
	case L2CAP_CID_CONN_LESS:
4458
		psm = get_unaligned((__le16 *) skb->data);
L
Linus Torvalds 已提交
4459 4460 4461 4462
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4463 4464 4465 4466
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4467 4468 4469 4470 4471
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4472 4473 4474 4475 4476 4477 4478 4479
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

4480
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
L
Linus Torvalds 已提交
4481 4482
{
	int exact = 0, lm1 = 0, lm2 = 0;
4483
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4484 4485 4486 4487

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

	/* Find listening sockets and check their link_mode */
4488 4489 4490
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4491

4492
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4493 4494 4495
			continue;

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

	return exact ? lm1 : lm2;
}

4511
int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
L
Linus Torvalds 已提交
4512
{
4513 4514
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4515 4516 4517 4518 4519 4520
	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);
4521
	} else
4522
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4523 4524 4525 4526

	return 0;
}

4527
int l2cap_disconn_ind(struct hci_conn *hcon)
4528 4529 4530 4531 4532
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4533
	if (!conn)
4534
		return HCI_ERROR_REMOTE_USER_TERM;
4535 4536 4537
	return conn->disc_reason;
}

4538
int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4539 4540 4541
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4542
	l2cap_conn_del(hcon, bt_to_errno(reason));
L
Linus Torvalds 已提交
4543 4544 4545
	return 0;
}

4546
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4547
{
4548
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4549 4550
		return;

4551
	if (encrypt == 0x00) {
4552
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4553
			__set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
4554
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4555
			l2cap_chan_close(chan, ECONNREFUSED);
4556
	} else {
4557
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4558
			__clear_chan_timer(chan);
4559 4560 4561
	}
}

4562
int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4563
{
4564
	struct l2cap_conn *conn = hcon->l2cap_data;
4565
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4566

4567
	if (!conn)
L
Linus Torvalds 已提交
4568
		return 0;
4569

L
Linus Torvalds 已提交
4570 4571
	BT_DBG("conn %p", conn);

4572 4573
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
4574
		cancel_delayed_work(&conn->security_timer);
4575 4576
	}

4577
	mutex_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4578

4579
	list_for_each_entry(chan, &conn->chan_l, list) {
4580
		l2cap_chan_lock(chan);
L
Linus Torvalds 已提交
4581

4582 4583 4584 4585 4586
		BT_DBG("chan->scid %d", chan->scid);

		if (chan->scid == L2CAP_CID_LE_DATA) {
			if (!status && encrypt) {
				chan->sec_level = hcon->sec_level;
4587
				l2cap_chan_ready(chan);
4588 4589
			}

4590
			l2cap_chan_unlock(chan);
4591 4592 4593
			continue;
		}

4594
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4595
			l2cap_chan_unlock(chan);
4596 4597 4598
			continue;
		}

4599 4600
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4601
			l2cap_check_encryption(chan, encrypt);
4602
			l2cap_chan_unlock(chan);
4603 4604 4605
			continue;
		}

4606
		if (chan->state == BT_CONNECT) {
4607
			if (!status) {
4608
				l2cap_send_conn_req(chan);
4609
			} else {
4610
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4611
			}
4612
		} else if (chan->state == BT_CONNECT2) {
4613
			struct sock *sk = chan->sk;
4614
			struct l2cap_conn_rsp rsp;
4615
			__u16 res, stat;
L
Linus Torvalds 已提交
4616

4617 4618
			lock_sock(sk);

4619
			if (!status) {
4620 4621 4622 4623
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4624 4625
					if (parent)
						parent->sk_data_ready(parent, 0);
4626
				} else {
4627
					__l2cap_state_change(chan, BT_CONFIG);
4628 4629 4630
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4631
			} else {
4632
				__l2cap_state_change(chan, BT_DISCONN);
4633
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4634 4635
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4636 4637
			}

4638 4639
			release_sock(sk);

4640 4641
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4642 4643
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4644 4645
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4646
		}
L
Linus Torvalds 已提交
4647

4648
		l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
4649 4650
	}

4651
	mutex_unlock(&conn->chan_lock);
4652

L
Linus Torvalds 已提交
4653 4654 4655
	return 0;
}

4656
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
L
Linus Torvalds 已提交
4657 4658 4659
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4660 4661 4662 4663
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4664 4665 4666 4667
		goto drop;

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

4668
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4669
		struct l2cap_hdr *hdr;
4670
		struct l2cap_chan *chan;
4671
		u16 cid;
L
Linus Torvalds 已提交
4672 4673 4674 4675 4676 4677 4678 4679 4680 4681
		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);
		}

4682 4683
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4684 4685 4686 4687 4688 4689 4690
			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;
4691
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707

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

4708
		chan = l2cap_get_chan_by_scid(conn, cid);
4709

4710 4711
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4712
			lock_sock(sk);
4713

4714
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4715 4716
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4717
							chan->imtu);
4718
				release_sock(sk);
4719 4720 4721
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4722
			release_sock(sk);
4723
		}
4724

L
Linus Torvalds 已提交
4725
		/* Allocate skb for the complete frame (with header) */
4726 4727
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4728 4729
			goto drop;

4730
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4731
								skb->len);
L
Linus Torvalds 已提交
4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751
		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;
		}

4752
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4753
								skb->len);
L
Linus Torvalds 已提交
4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767
		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;
}

4768
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4769
{
4770
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4771

4772
	read_lock(&chan_list_lock);
L
Linus Torvalds 已提交
4773

4774 4775
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4776

4777
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4778 4779
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4780
					c->state, __le16_to_cpu(c->psm),
4781 4782
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4783
	}
L
Linus Torvalds 已提交
4784

4785
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4786

4787
	return 0;
L
Linus Torvalds 已提交
4788 4789
}

4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802
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 已提交
4803

4804
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4805 4806
{
	int err;
4807

4808
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4809 4810 4811
	if (err < 0)
		return err;

4812 4813 4814 4815 4816 4817
	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 已提交
4818 4819 4820 4821

	return 0;
}

4822
void l2cap_exit(void)
L
Linus Torvalds 已提交
4823
{
4824
	debugfs_remove(l2cap_debugfs);
4825
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4826 4827
}

4828 4829
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");