l2cap_core.c 107.2 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 57
#include <net/sock.h>

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

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

60
bool disable_ertm;
61

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

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

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

76
/* ---- L2CAP channels ---- */
77

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

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

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

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

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

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

110
	return c;
111 112
}

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

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

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

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

132
	return c;
133 134
}

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

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

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

150
	write_lock(&chan_list_lock);
151

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

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

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

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

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

	chan->scid = scid;

185
	write_unlock(&chan_list_lock);
186 187 188 189

	return 0;
}

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

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

	return 0;
}

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

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

211
static void l2cap_chan_timeout(struct work_struct *work)
212
{
213 214
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							chan_timer.work);
215
	struct l2cap_conn *conn = chan->conn;
216 217 218
	struct sock *sk = chan->sk;
	int reason;

219
	BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
220

221
	mutex_lock(&conn->chan_lock);
222
	lock_sock(sk);
223

224
	if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
225
		reason = ECONNREFUSED;
226
	else if (chan->state == BT_CONNECT &&
227 228 229 230 231
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

232
	l2cap_chan_close(chan, reason);
233

234
	release_sock(sk);
235

236
	chan->ops->close(chan->data);
237 238
	mutex_unlock(&conn->chan_lock);

239
	l2cap_chan_put(chan);
240 241
}

242
struct l2cap_chan *l2cap_chan_create(struct sock *sk)
243 244 245 246 247 248 249 250 251
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

252
	write_lock(&chan_list_lock);
253
	list_add(&chan->global_l, &chan_list);
254
	write_unlock(&chan_list_lock);
255

256
	INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
257

258 259
	chan->state = BT_OPEN;

260 261
	atomic_set(&chan->refcnt, 1);

262 263
	BT_DBG("sk %p chan %p", sk, chan);

264 265 266
	return chan;
}

267
void l2cap_chan_destroy(struct l2cap_chan *chan)
268
{
269
	write_lock(&chan_list_lock);
270
	list_del(&chan->global_l);
271
	write_unlock(&chan_list_lock);
272

273
	l2cap_chan_put(chan);
274 275
}

276
static void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
277
{
278
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
279
			chan->psm, chan->dcid);
280

281
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
282

283
	chan->conn = conn;
284

285 286
	switch (chan->chan_type) {
	case L2CAP_CHAN_CONN_ORIENTED:
287 288
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
289
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
290 291
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
292 293
		} else {
			/* Alloc CID for connection-oriented socket */
294
			chan->scid = l2cap_alloc_cid(conn);
295
			chan->omtu = L2CAP_DEFAULT_MTU;
296
		}
297 298 299
		break;

	case L2CAP_CHAN_CONN_LESS:
300
		/* Connectionless socket */
301 302
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
303
		chan->omtu = L2CAP_DEFAULT_MTU;
304 305 306
		break;

	default:
307
		/* Raw socket can send/recv signalling messages only */
308 309
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
310
		chan->omtu = L2CAP_DEFAULT_MTU;
311 312
	}

313 314 315 316 317 318 319
	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;

320
	l2cap_chan_hold(chan);
321

322 323 324
	mutex_lock(&conn->chan_lock);
	list_add(&chan->list, &conn->chan_l);
	mutex_unlock(&conn->chan_lock);
325 326
}

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

335
	__clear_chan_timer(chan);
336

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

339
	if (conn) {
340
		/* Delete from channel list */
341
		list_del(&chan->list);
342

343
		l2cap_chan_put(chan);
344

345
		chan->conn = NULL;
346 347 348
		hci_conn_put(conn->hcon);
	}

349
	l2cap_state_change(chan, BT_CLOSED);
350 351 352 353 354 355 356 357 358 359
	sock_set_flag(sk, SOCK_ZAPPED);

	if (err)
		sk->sk_err = err;

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

361 362
	if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
			test_bit(CONF_INPUT_DONE, &chan->conf_state)))
363
		return;
364

365
	skb_queue_purge(&chan->tx_q);
366

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

370 371 372
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
373

374
		skb_queue_purge(&chan->srej_q);
375

376
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
377 378 379 380
			list_del(&l->list);
			kfree(l);
		}
	}
381 382
}

383 384 385 386 387 388 389
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

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

393
		__clear_chan_timer(chan);
394
		lock_sock(sk);
395
		l2cap_chan_close(chan, ECONNRESET);
396
		release_sock(sk);
397

398
		chan->ops->close(chan->data);
399
	}
400 401
}

402
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
403 404 405 406
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

407 408
	BT_DBG("chan %p state %s sk %p", chan,
					state_to_string(chan->state), sk);
409

410
	switch (chan->state) {
411 412
	case BT_LISTEN:
		l2cap_chan_cleanup_listen(sk);
413 414 415

		l2cap_state_change(chan, BT_CLOSED);
		sock_set_flag(sk, SOCK_ZAPPED);
416 417 418 419
		break;

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

	case BT_CONNECT2:
430
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
431 432 433 434 435 436 437 438
					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;
439
			l2cap_state_change(chan, BT_DISCONN);
440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462

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

		l2cap_chan_del(chan, reason);
		break;

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

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

463
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
464
{
465
	if (chan->chan_type == L2CAP_CHAN_RAW) {
466
		switch (chan->sec_level) {
467 468 469 470 471 472 473
		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;
		}
474
	} else if (chan->psm == cpu_to_le16(0x0001)) {
475 476
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
477

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

/* Service level security */
495
int l2cap_chan_check_security(struct l2cap_chan *chan)
496
{
497
	struct l2cap_conn *conn = chan->conn;
498 499
	__u8 auth_type;

500
	auth_type = l2cap_get_auth_type(chan);
501

502
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
503 504
}

505
static u8 l2cap_get_ident(struct l2cap_conn *conn)
506 507 508 509 510 511 512 513 514
{
	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.
	 */

515
	spin_lock(&conn->lock);
516 517 518 519 520 521

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

	id = conn->tx_ident;

522
	spin_unlock(&conn->lock);
523 524 525 526

	return id;
}

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

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

	if (!skb)
535
		return;
536

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

542
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
543
	skb->priority = HCI_PRIO_MAX;
544

545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
	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;
561

562 563
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
	hci_send_acl(chan->conn->hchan, skb, flags);
564 565
}

566
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
567 568 569
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
570
	struct l2cap_conn *conn = chan->conn;
571
	int count, hlen;
572

573
	if (chan->state != BT_CONNECTED)
574 575
		return;

576 577 578 579 580
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

581
	if (chan->fcs == L2CAP_FCS_CRC16)
582
		hlen += L2CAP_FCS_SIZE;
583

584
	BT_DBG("chan %p, control 0x%8.8x", chan, control);
585

586
	count = min_t(unsigned int, conn->mtu, hlen);
587 588

	control |= __set_sframe(chan);
589

590
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
591
		control |= __set_ctrl_final(chan);
592

593
	if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
594
		control |= __set_ctrl_poll(chan);
595

596 597
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
598
		return;
599 600

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
601
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
602
	lh->cid = cpu_to_le16(chan->dcid);
603 604

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

606
	if (chan->fcs == L2CAP_FCS_CRC16) {
607 608
		u16 fcs = crc16(0, (u8 *)lh, count - L2CAP_FCS_SIZE);
		put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
609 610
	}

611 612
	skb->priority = HCI_PRIO_MAX;
	l2cap_do_send(chan, skb);
613 614
}

615
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u32 control)
616
{
617
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
618
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
619
		set_bit(CONN_RNR_SENT, &chan->conn_state);
620
	} else
621
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
622

623
	control |= __set_reqseq(chan, chan->buffer_seq);
624

625
	l2cap_send_sframe(chan, control);
626 627
}

628
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
629
{
630
	return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
631 632
}

633
static void l2cap_do_start(struct l2cap_chan *chan)
634
{
635
	struct l2cap_conn *conn = chan->conn;
636 637

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
638 639 640
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

641
		if (l2cap_chan_check_security(chan) &&
642
				__l2cap_no_conn_pending(chan)) {
643
			struct l2cap_conn_req req;
644 645
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
646

647
			chan->ident = l2cap_get_ident(conn);
648
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
649

650 651
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
652
		}
653 654 655 656 657 658 659
	} 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);

660
		schedule_delayed_work(&conn->info_timer,
661 662 663 664 665 666 667
					msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

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

668 669 670
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
671
	if (!disable_ertm)
672 673 674 675 676 677 678 679 680 681 682 683
		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;
	}
}

684
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
685
{
686
	struct sock *sk;
687 688
	struct l2cap_disconn_req req;

689 690 691
	if (!conn)
		return;

692 693
	sk = chan->sk;

694
	if (chan->mode == L2CAP_MODE_ERTM) {
695 696 697
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
698 699
	}

700 701
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
702 703
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
704

705
	l2cap_state_change(chan, BT_DISCONN);
706
	sk->sk_err = err;
707 708
}

L
Linus Torvalds 已提交
709
/* ---- L2CAP connections ---- */
710 711
static void l2cap_conn_start(struct l2cap_conn *conn)
{
712
	struct l2cap_chan *chan, *tmp;
713 714 715

	BT_DBG("conn %p", conn);

716
	mutex_lock(&conn->chan_lock);
717

718
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
719
		struct sock *sk = chan->sk;
720

721 722
		bh_lock_sock(sk);

723
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
724 725 726 727
			bh_unlock_sock(sk);
			continue;
		}

728
		if (chan->state == BT_CONNECT) {
729
			struct l2cap_conn_req req;
730

731
			if (!l2cap_chan_check_security(chan) ||
732
					!__l2cap_no_conn_pending(chan)) {
733 734 735
				bh_unlock_sock(sk);
				continue;
			}
736

737 738 739
			if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
					&& test_bit(CONF_STATE2_DEVICE,
					&chan->conf_state)) {
740
				/* l2cap_chan_close() calls list_del(chan)
741
				 * so release the lock */
742
				l2cap_chan_close(chan, ECONNRESET);
743 744
				bh_unlock_sock(sk);
				continue;
745
			}
746

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

750
			chan->ident = l2cap_get_ident(conn);
751
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
752

753 754
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
755

756
		} else if (chan->state == BT_CONNECT2) {
757
			struct l2cap_conn_rsp rsp;
758
			char buf[128];
759 760
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
761

762
			if (l2cap_chan_check_security(chan)) {
763 764 765 766
				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);
767 768
					if (parent)
						parent->sk_data_ready(parent, 0);
769 770

				} else {
771
					l2cap_state_change(chan, BT_CONFIG);
772 773 774
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
775 776 777 778 779
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

780 781
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
782

783
			if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
784 785 786 787 788
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

789
			set_bit(CONF_REQ_SENT, &chan->conf_state);
790
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
791 792
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
793 794 795 796 797
		}

		bh_unlock_sock(sk);
	}

798
	mutex_unlock(&conn->chan_lock);
799 800
}

801 802 803
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
804
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
805
{
806
	struct l2cap_chan *c, *c1 = NULL;
807

808
	read_lock(&chan_list_lock);
809

810 811
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
812

813
		if (state && c->state != state)
814 815
			continue;

816
		if (c->scid == cid) {
817
			/* Exact match. */
818 819 820 821
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
822 823 824

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
825
				c1 = c;
826 827
		}
	}
828

829
	read_unlock(&chan_list_lock);
830

831
	return c1;
832 833 834 835
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
836
	struct sock *parent, *sk;
837
	struct l2cap_chan *chan, *pchan;
838 839 840 841

	BT_DBG("");

	/* Check if we have socket listening on cid */
842
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
843
							conn->src);
844
	if (!pchan)
845 846
		return;

847 848
	parent = pchan->sk;

849
	lock_sock(parent);
850

851 852 853 854 855 856
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

857 858
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
859 860
		goto clean;

861
	sk = chan->sk;
862

863 864 865 866 867
	hci_conn_hold(conn->hcon);

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

868 869
	bt_accept_enqueue(parent, sk);

870
	l2cap_chan_add(conn, chan);
871

872
	__set_chan_timer(chan, sk->sk_sndtimeo);
873

874
	l2cap_state_change(chan, BT_CONNECTED);
875 876 877
	parent->sk_data_ready(parent, 0);

clean:
878
	release_sock(parent);
879 880
}

881
static void l2cap_chan_ready(struct l2cap_chan *chan)
882
{
883
	struct sock *sk = chan->sk;
884 885 886 887 888 889 890
	struct sock *parent = bt_sk(sk)->parent;

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

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

891
	l2cap_state_change(chan, BT_CONNECTED);
892 893 894 895 896 897
	sk->sk_state_change(sk);

	if (parent)
		parent->sk_data_ready(parent, 0);
}

898 899
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
900
	struct l2cap_chan *chan;
901

902
	BT_DBG("conn %p", conn);
903

904 905 906
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

907 908 909
	if (conn->hcon->out && conn->hcon->type == LE_LINK)
		smp_conn_security(conn, conn->hcon->pending_sec_level);

910
	mutex_lock(&conn->chan_lock);
911

912
	list_for_each_entry(chan, &conn->chan_l, list) {
913
		struct sock *sk = chan->sk;
914

915
		bh_lock_sock(sk);
916

917
		if (conn->hcon->type == LE_LINK) {
918
			if (smp_conn_security(conn, chan->sec_level))
919
				l2cap_chan_ready(chan);
920

921
		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
922
			__clear_chan_timer(chan);
923
			l2cap_state_change(chan, BT_CONNECTED);
924
			sk->sk_state_change(sk);
925

926
		} else if (chan->state == BT_CONNECT)
927
			l2cap_do_start(chan);
928

929
		bh_unlock_sock(sk);
930
	}
931

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

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
938
	struct l2cap_chan *chan;
939 940 941

	BT_DBG("conn %p", conn);

942
	mutex_lock(&conn->chan_lock);
943

944
	list_for_each_entry(chan, &conn->chan_l, list) {
945
		struct sock *sk = chan->sk;
946

947
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
948 949 950
			sk->sk_err = err;
	}

951
	mutex_unlock(&conn->chan_lock);
952 953
}

954
static void l2cap_info_timeout(struct work_struct *work)
955
{
956
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
957
							info_timer.work);
958

959
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
960
	conn->info_ident = 0;
961

962 963 964
	l2cap_conn_start(conn);
}

965 966 967 968 969 970 971 972 973 974 975 976 977
static void l2cap_conn_del(struct hci_conn *hcon, int err)
{
	struct l2cap_conn *conn = hcon->l2cap_data;
	struct l2cap_chan *chan, *l;
	struct sock *sk;

	if (!conn)
		return;

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

	kfree_skb(conn->rx_skb);

978 979
	mutex_lock(&conn->chan_lock);

980 981 982
	/* Kill channels */
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
		sk = chan->sk;
983
		lock_sock(sk);
984
		l2cap_chan_del(chan, err);
985
		release_sock(sk);
986 987 988
		chan->ops->close(chan->data);
	}

989 990
	mutex_unlock(&conn->chan_lock);

991 992
	hci_chan_del(conn->hchan);

993
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
994
		cancel_delayed_work_sync(&conn->info_timer);
995

996
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
997
		cancel_delayed_work_sync(&conn->security_timer);
998
		smp_chan_destroy(conn);
999
	}
1000 1001 1002 1003 1004

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

1005
static void security_timeout(struct work_struct *work)
1006
{
1007 1008
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
						security_timer.work);
1009 1010 1011 1012

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

L
Linus Torvalds 已提交
1013 1014
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
1015
	struct l2cap_conn *conn = hcon->l2cap_data;
1016
	struct hci_chan *hchan;
L
Linus Torvalds 已提交
1017

1018
	if (conn || status)
L
Linus Torvalds 已提交
1019 1020
		return conn;

1021 1022 1023 1024
	hchan = hci_chan_create(hcon);
	if (!hchan)
		return NULL;

1025
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1026 1027
	if (!conn) {
		hci_chan_del(hchan);
L
Linus Torvalds 已提交
1028
		return NULL;
1029
	}
L
Linus Torvalds 已提交
1030 1031 1032

	hcon->l2cap_data = conn;
	conn->hcon = hcon;
1033
	conn->hchan = hchan;
L
Linus Torvalds 已提交
1034

1035
	BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1036

1037 1038 1039 1040 1041
	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 已提交
1042 1043 1044
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

1045 1046
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
1047
	spin_lock_init(&conn->lock);
1048
	mutex_init(&conn->chan_lock);
1049 1050

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

1052
	if (hcon->type == LE_LINK)
1053
		INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1054
	else
1055
		INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
D
Dave Young 已提交
1056

1057
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1058

L
Linus Torvalds 已提交
1059 1060 1061 1062 1063 1064 1065 1066
	return conn;
}

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

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

1071
	read_lock(&chan_list_lock);
1072

1073 1074
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1075

1076
		if (state && c->state != state)
L
Linus Torvalds 已提交
1077 1078
			continue;

1079
		if (c->psm == psm) {
L
Linus Torvalds 已提交
1080
			/* Exact match. */
1081
			if (!bacmp(&bt_sk(sk)->src, src)) {
1082
				read_unlock(&chan_list_lock);
1083 1084
				return c;
			}
L
Linus Torvalds 已提交
1085 1086 1087

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1088
				c1 = c;
L
Linus Torvalds 已提交
1089 1090 1091
		}
	}

1092
	read_unlock(&chan_list_lock);
1093

1094
	return c1;
L
Linus Torvalds 已提交
1095 1096
}

1097
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid, bdaddr_t *dst)
L
Linus Torvalds 已提交
1098
{
1099
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1100 1101 1102 1103
	bdaddr_t *src = &bt_sk(sk)->src;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1104
	__u8 auth_type;
1105
	int err;
L
Linus Torvalds 已提交
1106

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

1110 1111
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1112 1113
		return -EHOSTUNREACH;

1114
	hci_dev_lock(hdev);
L
Linus Torvalds 已提交
1115

1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166
	lock_sock(sk);

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

	switch (sk->sk_state) {
	case BT_CONNECT:
	case BT_CONNECT2:
	case BT_CONFIG:
		/* Already connecting */
		err = 0;
		goto done;

	case BT_CONNECTED:
		/* Already connected */
		err = -EISCONN;
		goto done;

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

	default:
		err = -EBADFD;
		goto done;
	}

	/* Set destination address and psm */
1167
	bacpy(&bt_sk(sk)->dst, dst);
1168 1169
	chan->psm = psm;
	chan->dcid = cid;
L
Linus Torvalds 已提交
1170

1171
	auth_type = l2cap_get_auth_type(chan);
1172

1173
	if (chan->dcid == L2CAP_CID_LE_DATA)
1174
		hcon = hci_connect(hdev, LE_LINK, dst,
1175
					chan->sec_level, auth_type);
1176 1177
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1178
					chan->sec_level, auth_type);
1179

1180 1181
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1182
		goto done;
1183
	}
L
Linus Torvalds 已提交
1184 1185 1186 1187

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1188
		err = -ENOMEM;
L
Linus Torvalds 已提交
1189 1190 1191 1192 1193 1194
		goto done;
	}

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

1195 1196
	l2cap_chan_add(conn, chan);

1197
	l2cap_state_change(chan, BT_CONNECT);
1198
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1199 1200

	if (hcon->state == BT_CONNECTED) {
1201
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1202
			__clear_chan_timer(chan);
1203
			if (l2cap_chan_check_security(chan))
1204
				l2cap_state_change(chan, BT_CONNECTED);
1205
		} else
1206
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1207 1208
	}

1209 1210
	err = 0;

L
Linus Torvalds 已提交
1211
done:
1212
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1213 1214 1215 1216
	hci_dev_put(hdev);
	return err;
}

1217
int __l2cap_wait_ack(struct sock *sk)
1218
{
1219
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1220 1221 1222 1223
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1224
	add_wait_queue(sk_sleep(sk), &wait);
1225 1226
	set_current_state(TASK_INTERRUPTIBLE);
	while (chan->unacked_frames > 0 && chan->conn) {
1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237
		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);
1238
		set_current_state(TASK_INTERRUPTIBLE);
1239 1240 1241 1242 1243 1244

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1245
	remove_wait_queue(sk_sleep(sk), &wait);
1246 1247 1248
	return err;
}

1249
static void l2cap_monitor_timeout(struct work_struct *work)
1250
{
1251 1252
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							monitor_timer.work);
1253
	struct sock *sk = chan->sk;
1254

1255
	BT_DBG("chan %p", chan);
1256

1257
	lock_sock(sk);
1258
	if (chan->retry_count >= chan->remote_max_tx) {
1259
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1260
		release_sock(sk);
1261 1262 1263
		return;
	}

1264
	chan->retry_count++;
1265
	__set_monitor_timer(chan);
1266

1267
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1268
	release_sock(sk);
1269 1270
}

1271
static void l2cap_retrans_timeout(struct work_struct *work)
1272
{
1273 1274
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							retrans_timer.work);
1275
	struct sock *sk = chan->sk;
1276

1277
	BT_DBG("chan %p", chan);
1278

1279
	lock_sock(sk);
1280
	chan->retry_count = 1;
1281
	__set_monitor_timer(chan);
1282

1283
	set_bit(CONN_WAIT_F, &chan->conn_state);
1284

1285
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1286
	release_sock(sk);
1287 1288
}

1289
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1290
{
1291
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1292

1293
	while ((skb = skb_peek(&chan->tx_q)) &&
1294
			chan->unacked_frames) {
1295
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1296
			break;
L
Linus Torvalds 已提交
1297

1298
		skb = skb_dequeue(&chan->tx_q);
1299
		kfree_skb(skb);
L
Linus Torvalds 已提交
1300

1301
		chan->unacked_frames--;
1302
	}
L
Linus Torvalds 已提交
1303

1304
	if (!chan->unacked_frames)
1305
		__clear_retrans_timer(chan);
1306
}
L
Linus Torvalds 已提交
1307

1308
static void l2cap_streaming_send(struct l2cap_chan *chan)
1309
{
1310
	struct sk_buff *skb;
1311 1312
	u32 control;
	u16 fcs;
1313

1314
	while ((skb = skb_dequeue(&chan->tx_q))) {
1315
		control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1316
		control |= __set_txseq(chan, chan->next_tx_seq);
1317
		__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1318

1319
		if (chan->fcs == L2CAP_FCS_CRC16) {
1320 1321 1322 1323
			fcs = crc16(0, (u8 *)skb->data,
						skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs,
					skb->data + skb->len - L2CAP_FCS_SIZE);
1324 1325
		}

1326
		l2cap_do_send(chan, skb);
1327

1328
		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1329 1330 1331
	}
}

1332
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1333 1334
{
	struct sk_buff *skb, *tx_skb;
1335 1336
	u16 fcs;
	u32 control;
1337

1338
	skb = skb_peek(&chan->tx_q);
1339 1340
	if (!skb)
		return;
1341

1342
	while (bt_cb(skb)->tx_seq != tx_seq) {
1343
		if (skb_queue_is_last(&chan->tx_q, skb))
1344
			return;
1345

1346 1347
		skb = skb_queue_next(&chan->tx_q, skb);
	}
1348

1349 1350
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1351
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1352 1353 1354 1355 1356
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
1357 1358

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

1361
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1362
		control |= __set_ctrl_final(chan);
1363

1364
	control |= __set_reqseq(chan, chan->buffer_seq);
1365
	control |= __set_txseq(chan, tx_seq);
1366

1367
	__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1368

1369
	if (chan->fcs == L2CAP_FCS_CRC16) {
1370 1371 1372 1373
		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);
1374 1375
	}

1376
	l2cap_do_send(chan, tx_skb);
1377 1378
}

1379
static int l2cap_ertm_send(struct l2cap_chan *chan)
1380 1381
{
	struct sk_buff *skb, *tx_skb;
1382 1383
	u16 fcs;
	u32 control;
1384
	int nsent = 0;
1385

1386
	if (chan->state != BT_CONNECTED)
1387
		return -ENOTCONN;
1388

1389
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1390

1391 1392
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1393
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1394 1395 1396
			break;
		}

1397 1398
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1399 1400
		bt_cb(skb)->retries++;

1401
		control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1402
		control &= __get_sar_mask(chan);
1403

1404
		if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1405
			control |= __set_ctrl_final(chan);
1406

1407
		control |= __set_reqseq(chan, chan->buffer_seq);
1408
		control |= __set_txseq(chan, chan->next_tx_seq);
1409

1410
		__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1411

1412
		if (chan->fcs == L2CAP_FCS_CRC16) {
1413 1414 1415 1416
			fcs = crc16(0, (u8 *)skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs, skb->data +
						tx_skb->len - L2CAP_FCS_SIZE);
1417 1418
		}

1419
		l2cap_do_send(chan, tx_skb);
1420

1421
		__set_retrans_timer(chan);
1422

1423
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
1424 1425

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

1427
		if (bt_cb(skb)->retries == 1) {
1428
			chan->unacked_frames++;
1429 1430 1431

			if (!nsent++)
				__clear_ack_timer(chan);
1432
		}
1433

1434
		chan->frames_sent++;
1435

1436 1437
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1438
		else
1439
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1440 1441
	}

1442 1443 1444
	return nsent;
}

1445
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1446 1447 1448
{
	int ret;

1449 1450
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1451

1452
	chan->next_tx_seq = chan->expected_ack_seq;
1453
	ret = l2cap_ertm_send(chan);
1454 1455 1456
	return ret;
}

1457
static void __l2cap_send_ack(struct l2cap_chan *chan)
1458
{
1459
	u32 control = 0;
1460

1461
	control |= __set_reqseq(chan, chan->buffer_seq);
1462

1463
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1464
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1465
		set_bit(CONN_RNR_SENT, &chan->conn_state);
1466
		l2cap_send_sframe(chan, control);
1467
		return;
1468
	}
1469

1470
	if (l2cap_ertm_send(chan) > 0)
1471 1472
		return;

1473
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1474
	l2cap_send_sframe(chan, control);
1475 1476
}

1477 1478 1479 1480 1481 1482
static void l2cap_send_ack(struct l2cap_chan *chan)
{
	__clear_ack_timer(chan);
	__l2cap_send_ack(chan);
}

1483
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1484 1485
{
	struct srej_list *tail;
1486
	u32 control;
1487

1488
	control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1489
	control |= __set_ctrl_final(chan);
1490

1491
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1492
	control |= __set_reqseq(chan, tail->tx_seq);
1493

1494
	l2cap_send_sframe(chan, control);
1495 1496
}

1497
static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan, struct msghdr *msg, int len, int count, struct sk_buff *skb)
1498
{
1499
	struct l2cap_conn *conn = chan->conn;
1500 1501
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1502

1503
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1504
		return -EFAULT;
L
Linus Torvalds 已提交
1505 1506 1507 1508 1509 1510 1511 1512 1513

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

1514 1515 1516
		*frag = chan->ops->alloc_skb(chan, count,
					msg->msg_flags & MSG_DONTWAIT, &err);

L
Linus Torvalds 已提交
1517
		if (!*frag)
1518
			return err;
1519 1520
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1521

1522 1523
		(*frag)->priority = skb->priority;

L
Linus Torvalds 已提交
1524 1525 1526 1527 1528 1529 1530
		sent += count;
		len  -= count;

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

	return sent;
1531
}
L
Linus Torvalds 已提交
1532

1533 1534 1535
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1536
{
1537
	struct l2cap_conn *conn = chan->conn;
1538
	struct sk_buff *skb;
1539
	int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1540 1541
	struct l2cap_hdr *lh;

1542
	BT_DBG("chan %p len %d priority %u", chan, (int)len, priority);
1543 1544

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1545 1546 1547 1548

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

1549
	if (!skb)
1550
		return ERR_PTR(err);
1551

1552 1553
	skb->priority = priority;

1554 1555
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1556
	lh->cid = cpu_to_le16(chan->dcid);
1557
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1558
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1559

1560
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1561 1562 1563 1564 1565 1566 1567
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1568 1569 1570
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1571
{
1572
	struct l2cap_conn *conn = chan->conn;
1573 1574 1575 1576
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

1577
	BT_DBG("chan %p len %d", chan, (int)len);
1578 1579

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1580 1581 1582 1583

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

1584
	if (!skb)
1585
		return ERR_PTR(err);
1586

1587 1588
	skb->priority = priority;

1589 1590
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1591
	lh->cid = cpu_to_le16(chan->dcid);
1592 1593
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

1594
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1595 1596 1597 1598 1599 1600 1601
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1602 1603
static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
1604
						u32 control, u16 sdulen)
1605
{
1606
	struct l2cap_conn *conn = chan->conn;
1607
	struct sk_buff *skb;
1608
	int err, count, hlen;
1609 1610
	struct l2cap_hdr *lh;

1611
	BT_DBG("chan %p len %d", chan, (int)len);
1612

1613 1614 1615
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1616 1617 1618 1619 1620
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1621
	if (sdulen)
1622
		hlen += L2CAP_SDULEN_SIZE;
1623

1624
	if (chan->fcs == L2CAP_FCS_CRC16)
1625
		hlen += L2CAP_FCS_SIZE;
1626

1627
	count = min_t(unsigned int, (conn->mtu - hlen), len);
1628 1629 1630 1631

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

1632
	if (!skb)
1633
		return ERR_PTR(err);
1634 1635 1636

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1637
	lh->cid = cpu_to_le16(chan->dcid);
1638
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1639 1640 1641

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

1642
	if (sdulen)
1643
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1644

1645
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1646 1647 1648 1649
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1650

1651
	if (chan->fcs == L2CAP_FCS_CRC16)
1652
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1653

1654
	bt_cb(skb)->retries = 0;
1655
	return skb;
L
Linus Torvalds 已提交
1656 1657
}

1658
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1659 1660 1661
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1662
	u32 control;
1663 1664
	size_t size = 0;

1665
	skb_queue_head_init(&sar_queue);
1666
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1667
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1668 1669 1670 1671
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1672 1673
	len -= chan->remote_mps;
	size += chan->remote_mps;
1674 1675 1676 1677

	while (len > 0) {
		size_t buflen;

1678
		if (len > chan->remote_mps) {
1679
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1680
			buflen = chan->remote_mps;
1681
		} else {
1682
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
1683 1684 1685
			buflen = len;
		}

1686
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1687 1688 1689 1690 1691 1692 1693 1694 1695
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1696 1697 1698
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1699 1700 1701 1702

	return size;
}

1703 1704
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
								u32 priority)
1705 1706
{
	struct sk_buff *skb;
1707
	u32 control;
1708 1709 1710
	int err;

	/* Connectionless channel */
1711
	if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1712
		skb = l2cap_create_connless_pdu(chan, msg, len, priority);
1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726
		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 */
1727
		skb = l2cap_create_basic_pdu(chan, msg, len, priority);
1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738
		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) {
1739
			control = __set_ctrl_sar(chan, L2CAP_SAR_UNSEGMENTED);
1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762
			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;
		}

1763 1764
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
				test_bit(CONN_WAIT_F, &chan->conn_state)) {
1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782
			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 已提交
1783 1784 1785 1786
/* 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;
1787
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1788 1789 1790

	BT_DBG("conn %p", conn);

1791
	mutex_lock(&conn->chan_lock);
1792

1793
	list_for_each_entry(chan, &conn->chan_l, list) {
1794
		struct sock *sk = chan->sk;
1795
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
1796 1797 1798 1799 1800
			continue;

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

1805
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
1806 1807
			kfree_skb(nskb);
	}
1808

1809
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820
}

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

1821 1822
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1823 1824 1825 1826 1827 1828 1829 1830 1831

	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);
1832
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1833 1834 1835 1836 1837

	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 已提交
1838 1839 1840 1841

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1842
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892

	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:
1893
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1894 1895 1896
		break;

	case 4:
1897
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923
		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:
1924
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1925 1926 1927
		break;

	case 4:
1928
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1929 1930 1931 1932 1933 1934 1935 1936 1937 1938
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1939 1940 1941 1942
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

1943
	switch (chan->mode) {
1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
	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);
}

1970
static void l2cap_ack_timeout(struct work_struct *work)
1971
{
1972 1973
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							ack_timer.work);
1974

1975 1976
	BT_DBG("chan %p", chan);

1977
	lock_sock(chan->sk);
1978
	__l2cap_send_ack(chan);
1979
	release_sock(chan->sk);
1980 1981

	l2cap_chan_put(chan);
1982 1983
}

1984
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1985
{
1986
	chan->expected_ack_seq = 0;
1987
	chan->unacked_frames = 0;
1988
	chan->buffer_seq = 0;
1989 1990
	chan->num_acked = 0;
	chan->frames_sent = 0;
1991

1992 1993 1994
	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);
1995

1996
	skb_queue_head_init(&chan->srej_q);
1997

1998
	INIT_LIST_HEAD(&chan->srej_l);
1999 2000
}

2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013
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;
	}
}

2014 2015 2016 2017 2018
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

2019 2020 2021 2022 2023
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

2024 2025 2026
static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
{
	if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
2027
						__l2cap_ews_supported(chan)) {
2028 2029
		/* use extended control field */
		set_bit(FLAG_EXT_CTRL, &chan->flags);
2030 2031
		chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
	} else {
2032 2033
		chan->tx_win = min_t(u16, chan->tx_win,
						L2CAP_DEFAULT_TX_WINDOW);
2034 2035
		chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	}
2036 2037
}

2038
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2039 2040
{
	struct l2cap_conf_req *req = data;
2041
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
2042
	void *ptr = req->data;
2043
	u16 size;
L
Linus Torvalds 已提交
2044

2045
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2046

2047
	if (chan->num_conf_req || chan->num_conf_rsp)
2048 2049
		goto done;

2050
	switch (chan->mode) {
2051 2052
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2053
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2054 2055
			break;

2056 2057 2058
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2059
		/* fall through */
2060
	default:
2061
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2062 2063 2064 2065
		break;
	}

done:
2066 2067
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2068

2069
	switch (chan->mode) {
2070
	case L2CAP_MODE_BASIC:
2071 2072
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2073 2074
			break;

2075 2076 2077 2078 2079 2080 2081
		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;

2082 2083
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
2084 2085 2086 2087
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2088
		rfc.max_transmit    = chan->max_tx;
2089 2090
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2091 2092 2093 2094 2095 2096

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

2098 2099 2100 2101
		l2cap_txwin_setup(chan);

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

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

2106 2107 2108
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2109
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2110 2111
			break;

2112
		if (chan->fcs == L2CAP_FCS_NONE ||
2113
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2114 2115
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2116
		}
2117 2118 2119 2120

		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
								chan->tx_win);
2121 2122 2123 2124 2125 2126 2127 2128
		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;
2129 2130 2131 2132 2133 2134

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

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

2139 2140 2141
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2142
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2143 2144
			break;

2145
		if (chan->fcs == L2CAP_FCS_NONE ||
2146
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2147 2148
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2149
		}
2150 2151
		break;
	}
L
Linus Torvalds 已提交
2152

2153
	req->dcid  = cpu_to_le16(chan->dcid);
2154
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2155 2156 2157 2158

	return ptr - data;
}

2159
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2160
{
2161 2162
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
2163 2164
	void *req = chan->conf_req;
	int len = chan->conf_len;
2165 2166
	int type, hint, olen;
	unsigned long val;
2167
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2168 2169
	struct l2cap_conf_efs efs;
	u8 remote_efs = 0;
2170
	u16 mtu = L2CAP_DEFAULT_MTU;
2171
	u16 result = L2CAP_CONF_SUCCESS;
2172
	u16 size;
L
Linus Torvalds 已提交
2173

2174
	BT_DBG("chan %p", chan);
2175

2176 2177
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2178

2179
		hint  = type & L2CAP_CONF_HINT;
2180
		type &= L2CAP_CONF_MASK;
2181 2182 2183

		switch (type) {
		case L2CAP_CONF_MTU:
2184
			mtu = val;
2185 2186 2187
			break;

		case L2CAP_CONF_FLUSH_TO:
2188
			chan->flush_to = val;
2189 2190 2191 2192 2193
			break;

		case L2CAP_CONF_QOS:
			break;

2194 2195 2196 2197 2198
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2199 2200
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2201
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2202
			break;
2203

2204 2205 2206 2207
		case L2CAP_CONF_EFS:
			remote_efs = 1;
			if (olen == sizeof(efs))
				memcpy(&efs, (void *) val, olen);
2208 2209
			break;

2210 2211 2212
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;
2213

2214 2215
			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2216
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2217
			chan->remote_tx_win = val;
2218 2219
			break;

2220 2221 2222 2223 2224 2225 2226 2227 2228 2229
		default:
			if (hint)
				break;

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

2230
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2231 2232
		goto done;

2233
	switch (chan->mode) {
2234 2235
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2236
		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2237
			chan->mode = l2cap_select_mode(rfc.mode,
2238
					chan->conn->feat_mask);
2239 2240 2241
			break;
		}

2242 2243 2244 2245 2246 2247 2248
		if (remote_efs) {
			if (__l2cap_efs_supported(chan))
				set_bit(FLAG_EFS_ENABLE, &chan->flags);
			else
				return -ECONNREFUSED;
		}

2249
		if (chan->mode != rfc.mode)
2250
			return -ECONNREFUSED;
2251

2252 2253 2254 2255
		break;
	}

done:
2256
	if (chan->mode != rfc.mode) {
2257
		result = L2CAP_CONF_UNACCEPT;
2258
		rfc.mode = chan->mode;
2259

2260
		if (chan->num_conf_rsp == 1)
2261 2262 2263 2264 2265 2266
			return -ECONNREFUSED;

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

2267 2268 2269 2270
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2271 2272 2273
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2274
			chan->omtu = mtu;
2275
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2276
		}
2277
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2278

2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289
		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,
2290
							sizeof(efs),
2291
							(unsigned long) &efs);
2292
			} else {
2293
				/* Send PENDING Conf Rsp */
2294 2295
				result = L2CAP_CONF_PENDING;
				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2296 2297 2298
			}
		}

2299 2300
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2301
			chan->fcs = L2CAP_FCS_NONE;
2302
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2303 2304 2305
			break;

		case L2CAP_MODE_ERTM:
2306 2307 2308 2309
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2310

2311
			chan->remote_max_tx = rfc.max_transmit;
2312

2313 2314 2315 2316 2317 2318 2319
			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;
2320

2321 2322 2323 2324
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2325

2326
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2327 2328 2329 2330

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

2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343
			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);
			}
2344 2345 2346
			break;

		case L2CAP_MODE_STREAMING:
2347 2348 2349 2350 2351 2352 2353
			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;
2354

2355
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2356 2357 2358 2359

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

2360 2361 2362
			break;

		default:
2363 2364
			result = L2CAP_CONF_UNACCEPT;

2365
			memset(&rfc, 0, sizeof(rfc));
2366
			rfc.mode = chan->mode;
2367
		}
2368

2369
		if (result == L2CAP_CONF_SUCCESS)
2370
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2371
	}
2372
	rsp->scid   = cpu_to_le16(chan->dcid);
2373 2374 2375 2376
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2377 2378
}

2379
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2380 2381 2382 2383 2384
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
2385
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2386
	struct l2cap_conf_efs efs;
2387

2388
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2389 2390 2391 2392 2393 2394 2395 2396

	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;
2397
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2398
			} else
2399 2400
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2401 2402 2403
			break;

		case L2CAP_CONF_FLUSH_TO:
2404
			chan->flush_to = val;
2405
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2406
							2, chan->flush_to);
2407 2408 2409 2410 2411 2412
			break;

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

2413
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2414
							rfc.mode != chan->mode)
2415 2416
				return -ECONNREFUSED;

2417
			chan->fcs = 0;
2418 2419 2420 2421

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2422 2423 2424 2425

		case L2CAP_CONF_EWS:
			chan->tx_win = min_t(u16, val,
						L2CAP_DEFAULT_EXT_WINDOW);
2426 2427
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
							chan->tx_win);
2428
			break;
2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441

		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;
2442 2443 2444
		}
	}

2445
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2446 2447
		return -ECONNREFUSED;

2448
	chan->mode = rfc.mode;
2449

2450
	if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
2451 2452
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2453 2454 2455
			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);
2456 2457 2458 2459 2460 2461 2462 2463 2464

			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);
			}
2465
			break;
2466

2467
		case L2CAP_MODE_STREAMING:
2468
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2469 2470 2471
		}
	}

2472
	req->dcid   = cpu_to_le16(chan->dcid);
2473 2474 2475 2476 2477
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2478
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2479 2480 2481 2482
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2483
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2484

2485
	rsp->scid   = cpu_to_le16(chan->dcid);
2486
	rsp->result = cpu_to_le16(result);
2487
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2488 2489 2490 2491

	return ptr - data;
}

2492
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2493 2494
{
	struct l2cap_conn_rsp rsp;
2495
	struct l2cap_conn *conn = chan->conn;
2496 2497
	u8 buf[128];

2498 2499
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2500 2501 2502 2503 2504
	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);

2505
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2506 2507 2508 2509 2510 2511 2512
		return;

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

2513
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2514 2515 2516 2517 2518
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2519
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2520

2521
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534
		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;
		}
	}

2535 2536 2537 2538 2539 2540 2541 2542 2543 2544
	/* 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");

2545 2546 2547
done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2548 2549 2550
		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);
2551 2552
		break;
	case L2CAP_MODE_STREAMING:
2553
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2554 2555 2556
	}
}

2557 2558
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2559
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2560

2561
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2562 2563 2564 2565
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
2566
		cancel_delayed_work(&conn->info_timer);
2567 2568

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2569
		conn->info_ident = 0;
2570

2571 2572 2573 2574 2575 2576
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2577 2578 2579 2580
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;
2581
	struct l2cap_chan *chan = NULL, *pchan;
2582
	struct sock *parent, *sk = NULL;
2583
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2584 2585

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2586
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2587 2588 2589 2590

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

	/* Check if we have socket listening on psm */
2591 2592
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2593 2594 2595 2596
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2597 2598
	parent = pchan->sk;

2599
	mutex_lock(&conn->chan_lock);
2600
	lock_sock(parent);
2601

2602 2603 2604
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2605
		conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
2606 2607 2608 2609
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2610 2611 2612 2613
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2614
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2615 2616 2617
		goto response;
	}

2618 2619
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2620 2621
		goto response;

2622 2623
	sk = chan->sk;

L
Linus Torvalds 已提交
2624
	/* Check if we already have channel with that dcid */
2625
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
L
Linus Torvalds 已提交
2626
		sock_set_flag(sk, SOCK_ZAPPED);
2627
		chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2628 2629 2630 2631 2632 2633 2634
		goto response;
	}

	hci_conn_hold(conn->hcon);

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

2638 2639
	bt_accept_enqueue(parent, sk);

2640
	l2cap_chan_add(conn, chan);
2641

2642
	dcid = chan->scid;
L
Linus Torvalds 已提交
2643

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

2646
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2647

2648
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2649
		if (l2cap_chan_check_security(chan)) {
2650
			if (bt_sk(sk)->defer_setup) {
2651
				l2cap_state_change(chan, BT_CONNECT2);
2652 2653 2654 2655
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
2656
				l2cap_state_change(chan, BT_CONFIG);
2657 2658 2659
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2660
		} else {
2661
			l2cap_state_change(chan, BT_CONNECT2);
2662 2663 2664 2665
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
2666
		l2cap_state_change(chan, BT_CONNECT2);
2667 2668
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2669 2670 2671
	}

response:
2672
	release_sock(parent);
2673
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
2674 2675

sendresp:
2676 2677 2678 2679
	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 已提交
2680
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2681 2682 2683 2684 2685 2686 2687 2688

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

2689
		schedule_delayed_work(&conn->info_timer,
2690 2691 2692 2693 2694 2695
					msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

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

2696
	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2697 2698
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2699
		set_bit(CONF_REQ_SENT, &chan->conf_state);
2700
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2701 2702
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2703 2704
	}

L
Linus Torvalds 已提交
2705 2706 2707 2708 2709 2710 2711
	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;
2712
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2713 2714
	struct sock *sk;
	u8 req[128];
2715
	int err;
L
Linus Torvalds 已提交
2716 2717 2718 2719 2720 2721

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

2722 2723
	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 已提交
2724

2725 2726
	mutex_lock(&conn->chan_lock);

L
Linus Torvalds 已提交
2727
	if (scid) {
2728 2729 2730 2731 2732
		chan = __l2cap_get_chan_by_scid(conn, scid);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
2733
	} else {
2734 2735 2736 2737 2738
		chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
2739 2740
	}

2741 2742
	err = 0;

2743
	sk = chan->sk;
2744
	lock_sock(sk);
2745

L
Linus Torvalds 已提交
2746 2747
	switch (result) {
	case L2CAP_CR_SUCCESS:
2748
		l2cap_state_change(chan, BT_CONFIG);
2749
		chan->ident = 0;
2750
		chan->dcid = dcid;
2751
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2752

2753
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2754 2755
			break;

L
Linus Torvalds 已提交
2756
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2757 2758
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2759 2760 2761
		break;

	case L2CAP_CR_PEND:
2762
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2763 2764 2765
		break;

	default:
2766
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2767 2768 2769
		break;
	}

2770
	release_sock(sk);
2771 2772 2773 2774 2775

unlock:
	mutex_unlock(&conn->chan_lock);

	return err;
L
Linus Torvalds 已提交
2776 2777
}

2778
static inline void set_default_fcs(struct l2cap_chan *chan)
2779 2780 2781 2782
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2783
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2784
		chan->fcs = L2CAP_FCS_NONE;
2785
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2786
		chan->fcs = L2CAP_FCS_CRC16;
2787 2788
}

2789
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2790 2791 2792 2793
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2794
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2795
	struct sock *sk;
2796
	int len;
L
Linus Torvalds 已提交
2797 2798 2799 2800 2801 2802

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

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

2803
	chan = l2cap_get_chan_by_scid(conn, dcid);
2804
	if (!chan)
L
Linus Torvalds 已提交
2805 2806
		return -ENOENT;

2807
	sk = chan->sk;
2808
	lock_sock(sk);
2809

2810
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2811 2812 2813 2814 2815
		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);
2816 2817 2818

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2819
		goto unlock;
2820
	}
2821

2822
	/* Reject if config buffer is too small. */
2823
	len = cmd_len - sizeof(*req);
2824
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2825
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2826
				l2cap_build_conf_rsp(chan, rsp,
2827 2828 2829 2830 2831
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2832 2833
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2834 2835 2836 2837

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2838
				l2cap_build_conf_rsp(chan, rsp,
2839
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2840 2841 2842 2843
		goto unlock;
	}

	/* Complete config. */
2844
	len = l2cap_parse_conf_req(chan, rsp);
2845
	if (len < 0) {
2846
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2847
		goto unlock;
2848
	}
L
Linus Torvalds 已提交
2849

2850
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2851
	chan->num_conf_rsp++;
2852 2853

	/* Reset config buffer. */
2854
	chan->conf_len = 0;
2855

2856
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2857 2858
		goto unlock;

2859
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2860
		set_default_fcs(chan);
2861

2862
		l2cap_state_change(chan, BT_CONNECTED);
2863

2864 2865
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2866
		skb_queue_head_init(&chan->tx_q);
2867
		if (chan->mode == L2CAP_MODE_ERTM)
2868
			l2cap_ertm_init(chan);
2869

2870
		l2cap_chan_ready(chan);
2871 2872 2873
		goto unlock;
	}

2874
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2875
		u8 buf[64];
L
Linus Torvalds 已提交
2876
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2877 2878
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2879 2880
	}

2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891
	/* 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,
2892
					l2cap_build_conf_rsp(chan, rsp,
2893 2894 2895
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

L
Linus Torvalds 已提交
2896
unlock:
2897
	release_sock(sk);
L
Linus Torvalds 已提交
2898 2899 2900 2901 2902 2903 2904
	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;
2905
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2906
	struct sock *sk;
2907
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2908 2909 2910 2911 2912

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

2913 2914
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2915

2916
	chan = l2cap_get_chan_by_scid(conn, scid);
2917
	if (!chan)
L
Linus Torvalds 已提交
2918 2919
		return 0;

2920
	sk = chan->sk;
2921
	lock_sock(sk);
2922

L
Linus Torvalds 已提交
2923 2924
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2925
		l2cap_conf_rfc_get(chan, rsp->data, len);
2926
		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2927 2928
		break;

2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947
	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,
2948
						l2cap_build_conf_rsp(chan, buf,
2949 2950 2951 2952
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

L
Linus Torvalds 已提交
2953
	case L2CAP_CONF_UNACCEPT:
2954
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2955 2956
			char req[64];

2957
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2958
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2959 2960 2961
				goto done;
			}

2962 2963
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2964 2965
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2966
			if (len < 0) {
2967
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2968 2969 2970 2971 2972
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2973
			chan->num_conf_req++;
2974 2975 2976
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2977 2978
		}

2979
	default:
2980
		sk->sk_err = ECONNRESET;
2981 2982
		__set_chan_timer(chan,
				msecs_to_jiffies(L2CAP_DISC_REJ_TIMEOUT));
2983
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2984 2985 2986 2987 2988 2989
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

2992
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2993
		set_default_fcs(chan);
2994

2995
		l2cap_state_change(chan, BT_CONNECTED);
2996 2997
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2998
		skb_queue_head_init(&chan->tx_q);
2999
		if (chan->mode ==  L2CAP_MODE_ERTM)
3000
			l2cap_ertm_init(chan);
3001

3002
		l2cap_chan_ready(chan);
L
Linus Torvalds 已提交
3003 3004 3005
	}

done:
3006
	release_sock(sk);
L
Linus Torvalds 已提交
3007 3008 3009 3010 3011 3012 3013 3014
	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;
3015
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3016 3017 3018 3019 3020 3021 3022
	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);

3023 3024 3025 3026 3027
	mutex_lock(&conn->chan_lock);

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

3031
	sk = chan->sk;
3032
	lock_sock(sk);
3033

3034 3035
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
3036 3037 3038 3039
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

3040
	l2cap_chan_del(chan, ECONNRESET);
3041
	release_sock(sk);
L
Linus Torvalds 已提交
3042

3043
	chan->ops->close(chan->data);
3044 3045 3046

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3047 3048 3049 3050 3051 3052 3053
	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;
3054
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3055 3056 3057 3058 3059 3060 3061
	struct sock *sk;

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

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

3062 3063 3064 3065 3066
	mutex_lock(&conn->chan_lock);

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

3070
	sk = chan->sk;
3071
	lock_sock(sk);
3072 3073

	l2cap_chan_del(chan, 0);
3074
	release_sock(sk);
L
Linus Torvalds 已提交
3075

3076
	chan->ops->close(chan->data);
3077 3078 3079

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091
	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);

3092 3093
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
3094
		u32 feat_mask = l2cap_feat_mask;
3095 3096 3097
		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);
3098
		if (!disable_ertm)
3099 3100
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
3101
		if (enable_hs)
3102 3103
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
3104

3105
		put_unaligned_le32(feat_mask, rsp->data);
3106 3107
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3108 3109 3110
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3111 3112 3113 3114 3115 3116

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

3117 3118
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3119
		memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3120 3121
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3122 3123 3124 3125 3126 3127 3128
	} 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 已提交
3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142

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

3143 3144 3145 3146 3147
	/* 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;

3148
	cancel_delayed_work(&conn->info_timer);
3149

3150 3151 3152 3153 3154 3155 3156 3157 3158
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

3159
	if (type == L2CAP_IT_FEAT_MASK) {
3160
		conn->feat_mask = get_unaligned_le32(rsp->data);
3161

3162
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176
			struct l2cap_info_req req;
			req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);

			conn->info_ident = l2cap_get_ident(conn);

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

			l2cap_conn_start(conn);
		}
	} else if (type == L2CAP_IT_FIXED_CHAN) {
3177
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3178
		conn->info_ident = 0;
3179 3180 3181

		l2cap_conn_start(conn);
	}
3182

L
Linus Torvalds 已提交
3183 3184 3185
	return 0;
}

3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224
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);
	rsp.result = L2CAP_CR_NO_MEM;
	rsp.status = L2CAP_CS_NO_INFO;

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

3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344
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;
}

3345
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
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
							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;
3373
	int err;
3374 3375 3376 3377 3378 3379 3380 3381 3382

	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;
3383 3384
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3385 3386 3387 3388 3389 3390 3391
	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));
3392 3393 3394

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3395 3396 3397 3398 3399 3400 3401
		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);

3402 3403 3404
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3405 3406 3407
	return 0;
}

3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456
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;

3457 3458 3459 3460 3461 3462 3463 3464
	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;

3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480
	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;

3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497
	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:
3498
		return l2cap_conn_param_update_req(conn, cmd, data);
3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510

	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 已提交
3511 3512 3513 3514
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3515
	int err;
L
Linus Torvalds 已提交
3516 3517 3518 3519

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3520
		u16 cmd_len;
L
Linus Torvalds 已提交
3521 3522 3523 3524
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3525
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3526

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

3529
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3530 3531 3532 3533
			BT_DBG("corrupted command");
			break;
		}

3534 3535 3536 3537
		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 已提交
3538 3539

		if (err) {
3540
			struct l2cap_cmd_rej_unk rej;
3541 3542

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

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

3549 3550
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3551 3552 3553 3554 3555
	}

	kfree_skb(skb);
}

3556
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3557 3558
{
	u16 our_fcs, rcv_fcs;
3559 3560 3561 3562 3563 3564
	int hdr_size;

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

3566
	if (chan->fcs == L2CAP_FCS_CRC16) {
3567
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3568 3569 3570 3571
		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)
3572
			return -EBADMSG;
3573 3574 3575 3576
	}
	return 0;
}

3577
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3578
{
3579
	u32 control = 0;
3580

3581
	chan->frames_sent = 0;
3582

3583
	control |= __set_reqseq(chan, chan->buffer_seq);
3584

3585
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3586
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3587
		l2cap_send_sframe(chan, control);
3588
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3589 3590
	}

3591
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3592
		l2cap_retransmit_frames(chan);
3593

3594
	l2cap_ertm_send(chan);
3595

3596
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3597
			chan->frames_sent == 0) {
3598
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3599
		l2cap_send_sframe(chan, control);
3600 3601 3602
	}
}

3603
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3604 3605
{
	struct sk_buff *next_skb;
3606
	int tx_seq_offset, next_tx_seq_offset;
3607 3608 3609 3610

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

3611
	next_skb = skb_peek(&chan->srej_q);
3612

3613
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3614

3615
	while (next_skb) {
3616 3617 3618
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3619 3620
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3621 3622

		if (next_tx_seq_offset > tx_seq_offset) {
3623
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3624
			return 0;
3625 3626
		}

3627
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3628 3629 3630 3631
			next_skb = NULL;
		else
			next_skb = skb_queue_next(&chan->srej_q, next_skb);
	}
3632

3633
	__skb_queue_tail(&chan->srej_q, skb);
3634 3635

	return 0;
3636 3637
}

3638 3639
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3640
{
3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656
	/* 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;
}

3657
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3658 3659
{
	int err = -EINVAL;
3660

3661 3662
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3663 3664
		if (chan->sdu)
			break;
3665

3666 3667
		err = chan->ops->recv(chan->data, skb);
		break;
3668

3669
	case L2CAP_SAR_START:
3670 3671
		if (chan->sdu)
			break;
3672

3673
		chan->sdu_len = get_unaligned_le16(skb->data);
3674
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3675

3676 3677 3678 3679
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3680

3681 3682
		if (skb->len >= chan->sdu_len)
			break;
3683

3684 3685
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3686

3687 3688
		skb = NULL;
		err = 0;
3689 3690
		break;

3691
	case L2CAP_SAR_CONTINUE:
3692
		if (!chan->sdu)
3693
			break;
3694

3695 3696 3697
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3698

3699 3700
		if (chan->sdu->len >= chan->sdu_len)
			break;
3701

3702
		err = 0;
3703 3704
		break;

3705
	case L2CAP_SAR_END:
3706
		if (!chan->sdu)
3707
			break;
3708

3709 3710 3711
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3712

3713 3714
		if (chan->sdu->len != chan->sdu_len)
			break;
3715

3716
		err = chan->ops->recv(chan->data, chan->sdu);
3717

3718 3719 3720 3721 3722
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3723
		}
3724 3725 3726
		break;
	}

3727 3728 3729 3730 3731 3732 3733
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3734

3735
	return err;
3736 3737
}

3738
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3739
{
3740
	BT_DBG("chan %p, Enter local busy", chan);
3741

3742 3743
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3744
	__set_ack_timer(chan);
3745 3746 3747 3748
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
3749
	u32 control;
3750

3751
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3752 3753
		goto done;

3754
	control = __set_reqseq(chan, chan->buffer_seq);
3755
	control |= __set_ctrl_poll(chan);
3756
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3757
	l2cap_send_sframe(chan, control);
3758
	chan->retry_count = 1;
3759

3760 3761
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3762

3763
	set_bit(CONN_WAIT_F, &chan->conn_state);
3764 3765

done:
3766 3767
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3768

3769
	BT_DBG("chan %p, Exit local busy", chan);
3770 3771
}

3772
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3773
{
3774 3775 3776 3777 3778
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3779 3780 3781
	}
}

3782
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3783 3784
{
	struct sk_buff *skb;
3785
	u32 control;
3786

3787 3788 3789 3790
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3791 3792 3793
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3794
		skb = skb_dequeue(&chan->srej_q);
3795
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3796
		err = l2cap_reassemble_sdu(chan, skb, control);
3797 3798 3799 3800 3801 3802

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

3803 3804
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3805 3806 3807
	}
}

3808
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3809 3810
{
	struct srej_list *l, *tmp;
3811
	u32 control;
3812

3813
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3814 3815 3816 3817 3818
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
3819
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3820
		control |= __set_reqseq(chan, l->tx_seq);
3821
		l2cap_send_sframe(chan, control);
3822
		list_del(&l->list);
3823
		list_add_tail(&l->list, &chan->srej_l);
3824 3825 3826
	}
}

3827
static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3828 3829
{
	struct srej_list *new;
3830
	u32 control;
3831

3832
	while (tx_seq != chan->expected_tx_seq) {
3833
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3834
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3835
		l2cap_send_sframe(chan, control);
3836 3837

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3838 3839 3840
		if (!new)
			return -ENOMEM;

3841
		new->tx_seq = chan->expected_tx_seq;
3842 3843 3844

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

3845
		list_add_tail(&new->list, &chan->srej_l);
3846
	}
3847 3848

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

	return 0;
3851 3852
}

3853
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3854
{
3855
	u16 tx_seq = __get_txseq(chan, rx_control);
3856
	u16 req_seq = __get_reqseq(chan, rx_control);
3857
	u8 sar = __get_ctrl_sar(chan, rx_control);
3858
	int tx_seq_offset, expected_tx_seq_offset;
3859
	int num_to_ack = (chan->tx_win/6) + 1;
3860 3861
	int err = 0;

3862
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3863
							tx_seq, rx_control);
3864

3865
	if (__is_ctrl_final(chan, rx_control) &&
3866
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3867
		__clear_monitor_timer(chan);
3868
		if (chan->unacked_frames > 0)
3869
			__set_retrans_timer(chan);
3870
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3871 3872
	}

3873 3874
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3875

3876
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3877 3878

	/* invalid tx_seq */
3879
	if (tx_seq_offset >= chan->tx_win) {
3880
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3881 3882 3883
		goto drop;
	}

3884 3885 3886
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
			l2cap_send_ack(chan);
3887
		goto drop;
3888
	}
3889

3890 3891 3892
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

3893
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3894
		struct srej_list *first;
3895

3896
		first = list_first_entry(&chan->srej_l,
3897 3898
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3899
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3900
			l2cap_check_srej_gap(chan, tx_seq);
3901 3902 3903 3904

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

3905
			if (list_empty(&chan->srej_l)) {
3906
				chan->buffer_seq = chan->buffer_seq_srej;
3907
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3908
				l2cap_send_ack(chan);
3909
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3910 3911 3912
			}
		} else {
			struct srej_list *l;
3913 3914

			/* duplicated tx_seq */
3915
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3916
				goto drop;
3917

3918
			list_for_each_entry(l, &chan->srej_l, list) {
3919
				if (l->tx_seq == tx_seq) {
3920
					l2cap_resend_srejframe(chan, tx_seq);
3921 3922 3923
					return 0;
				}
			}
3924 3925 3926 3927 3928 3929

			err = l2cap_send_srejframe(chan, tx_seq);
			if (err < 0) {
				l2cap_send_disconn_req(chan->conn, chan, -err);
				return err;
			}
3930 3931
		}
	} else {
3932 3933
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
3934 3935 3936 3937 3938

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

3939
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
3940

3941
		BT_DBG("chan %p, Enter SREJ", chan);
3942

3943
		INIT_LIST_HEAD(&chan->srej_l);
3944
		chan->buffer_seq_srej = chan->buffer_seq;
3945

3946
		__skb_queue_head_init(&chan->srej_q);
3947
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3948

3949 3950 3951
		/* 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);
3952

3953 3954 3955 3956 3957
		err = l2cap_send_srejframe(chan, tx_seq);
		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, -err);
			return err;
		}
3958
	}
3959 3960
	return 0;

3961
expected:
3962
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3963

3964
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3965 3966
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3967
		__skb_queue_tail(&chan->srej_q, skb);
3968 3969 3970
		return 0;
	}

3971
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
3972 3973
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

3974 3975 3976 3977
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
3978

3979
	if (__is_ctrl_final(chan, rx_control)) {
3980
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3981
			l2cap_retransmit_frames(chan);
3982 3983
	}

3984

3985 3986
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3987
		l2cap_send_ack(chan);
3988 3989
	else
		__set_ack_timer(chan);
3990

3991
	return 0;
3992 3993 3994 3995

drop:
	kfree_skb(skb);
	return 0;
3996 3997
}

3998
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
3999
{
4000
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
4001
				__get_reqseq(chan, rx_control), rx_control);
4002

4003
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
4004
	l2cap_drop_acked_frames(chan);
4005

4006
	if (__is_ctrl_poll(chan, rx_control)) {
4007 4008 4009
		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) &&
4010
					(chan->unacked_frames > 0))
4011
				__set_retrans_timer(chan);
4012

4013
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4014
			l2cap_send_srejtail(chan);
4015
		} else {
4016
			l2cap_send_i_or_rr_or_rnr(chan);
4017
		}
4018

4019
	} else if (__is_ctrl_final(chan, rx_control)) {
4020
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4021

4022
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4023
			l2cap_retransmit_frames(chan);
4024

4025
	} else {
4026
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4027
				(chan->unacked_frames > 0))
4028
			__set_retrans_timer(chan);
4029

4030 4031
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4032
			l2cap_send_ack(chan);
4033
		else
4034
			l2cap_ertm_send(chan);
4035 4036
	}
}
4037

4038
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4039
{
4040
	u16 tx_seq = __get_reqseq(chan, rx_control);
4041

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

4044
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4045

4046 4047
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4048

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

4055 4056
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
4057 4058
	}
}
4059
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
4060
{
4061
	u16 tx_seq = __get_reqseq(chan, rx_control);
4062

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

4065
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4066

4067
	if (__is_ctrl_poll(chan, rx_control)) {
4068 4069
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
4070

4071
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4072
		l2cap_retransmit_one_frame(chan, tx_seq);
4073

4074
		l2cap_ertm_send(chan);
4075

4076
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4077
			chan->srej_save_reqseq = tx_seq;
4078
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4079
		}
4080
	} else if (__is_ctrl_final(chan, rx_control)) {
4081
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
4082
				chan->srej_save_reqseq == tx_seq)
4083
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4084
		else
4085
			l2cap_retransmit_one_frame(chan, tx_seq);
4086
	} else {
4087
		l2cap_retransmit_one_frame(chan, tx_seq);
4088
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4089
			chan->srej_save_reqseq = tx_seq;
4090
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4091
		}
4092 4093 4094
	}
}

4095
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4096
{
4097
	u16 tx_seq = __get_reqseq(chan, rx_control);
4098

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

4101
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4102 4103
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4104

4105
	if (__is_ctrl_poll(chan, rx_control))
4106
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4107

4108
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4109
		__clear_retrans_timer(chan);
4110
		if (__is_ctrl_poll(chan, rx_control))
4111
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4112
		return;
4113
	}
4114

4115
	if (__is_ctrl_poll(chan, rx_control)) {
4116
		l2cap_send_srejtail(chan);
4117 4118 4119 4120
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
4121 4122
}

4123
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4124
{
4125
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4126

4127
	if (__is_ctrl_final(chan, rx_control) &&
4128
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4129
		__clear_monitor_timer(chan);
4130
		if (chan->unacked_frames > 0)
4131
			__set_retrans_timer(chan);
4132
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4133 4134
	}

4135 4136
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
4137
		l2cap_data_channel_rrframe(chan, rx_control);
4138 4139
		break;

4140
	case L2CAP_SUPER_REJ:
4141
		l2cap_data_channel_rejframe(chan, rx_control);
4142
		break;
4143

4144
	case L2CAP_SUPER_SREJ:
4145
		l2cap_data_channel_srejframe(chan, rx_control);
4146 4147
		break;

4148
	case L2CAP_SUPER_RNR:
4149
		l2cap_data_channel_rnrframe(chan, rx_control);
4150 4151 4152
		break;
	}

4153
	kfree_skb(skb);
4154 4155 4156
	return 0;
}

4157
static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4158
{
4159
	u32 control;
4160
	u16 req_seq;
4161 4162
	int len, next_tx_seq_offset, req_seq_offset;

4163 4164
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
4165 4166 4167 4168 4169 4170 4171
	len = skb->len;

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

4175
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4176
		len -= L2CAP_SDULEN_SIZE;
4177

4178
	if (chan->fcs == L2CAP_FCS_CRC16)
4179
		len -= L2CAP_FCS_SIZE;
4180

4181
	if (len > chan->mps) {
4182
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4183 4184 4185
		goto drop;
	}

4186
	req_seq = __get_reqseq(chan, control);
4187

4188 4189 4190 4191
	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);
4192 4193 4194

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
4195
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4196 4197 4198
		goto drop;
	}

4199
	if (!__is_sframe(chan, control)) {
4200
		if (len < 0) {
4201
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4202 4203 4204
			goto drop;
		}

4205
		l2cap_data_channel_iframe(chan, control, skb);
4206 4207 4208
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
4209
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4210 4211 4212
			goto drop;
		}

4213
		l2cap_data_channel_sframe(chan, control, skb);
4214 4215 4216 4217 4218 4219 4220 4221 4222
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
4223 4224
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
4225
	struct l2cap_chan *chan;
4226
	struct sock *sk = NULL;
4227
	u32 control;
4228
	u16 tx_seq;
4229
	int len;
L
Linus Torvalds 已提交
4230

4231
	chan = l2cap_get_chan_by_scid(conn, cid);
4232
	if (!chan) {
L
Linus Torvalds 已提交
4233 4234 4235 4236
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

4237
	sk = chan->sk;
4238
	lock_sock(sk);
4239

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

4242
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4243 4244
		goto drop;

4245
	switch (chan->mode) {
4246 4247 4248 4249 4250
	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 已提交
4251

4252
		if (chan->imtu < skb->len)
4253
			goto drop;
L
Linus Torvalds 已提交
4254

4255
		if (!chan->ops->recv(chan->data, skb))
4256 4257 4258 4259
			goto done;
		break;

	case L2CAP_MODE_ERTM:
4260
		l2cap_ertm_data_rcv(chan, skb);
4261

4262
		goto done;
4263

4264
	case L2CAP_MODE_STREAMING:
4265 4266
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
4267 4268
		len = skb->len;

4269
		if (l2cap_check_fcs(chan, skb))
4270 4271
			goto drop;

4272
		if (__is_sar_start(chan, control))
4273
			len -= L2CAP_SDULEN_SIZE;
4274

4275
		if (chan->fcs == L2CAP_FCS_CRC16)
4276
			len -= L2CAP_FCS_SIZE;
4277

4278
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4279 4280
			goto drop;

4281
		tx_seq = __get_txseq(chan, control);
4282

4283 4284 4285 4286 4287 4288
		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;
4289

4290 4291 4292
			/* TODO: Notify userland of missing data */
		}

4293
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
4294 4295 4296

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4297 4298 4299

		goto done;

4300
	default:
4301
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4302 4303
		break;
	}
L
Linus Torvalds 已提交
4304 4305 4306 4307 4308

drop:
	kfree_skb(skb);

done:
4309
	if (sk)
4310
		release_sock(sk);
4311

L
Linus Torvalds 已提交
4312 4313 4314
	return 0;
}

4315
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
4316
{
4317
	struct sock *sk = NULL;
4318
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4319

4320 4321
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
4322 4323
		goto drop;

4324 4325
	sk = chan->sk;

4326
	lock_sock(sk);
4327

L
Linus Torvalds 已提交
4328 4329
	BT_DBG("sk %p, len %d", sk, skb->len);

4330
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4331 4332
		goto drop;

4333
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
4334 4335
		goto drop;

4336
	if (!chan->ops->recv(chan->data, skb))
L
Linus Torvalds 已提交
4337 4338 4339 4340 4341 4342
		goto done;

drop:
	kfree_skb(skb);

done:
4343
	if (sk)
4344
		release_sock(sk);
L
Linus Torvalds 已提交
4345 4346 4347
	return 0;
}

4348 4349
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
4350
	struct sock *sk = NULL;
4351
	struct l2cap_chan *chan;
4352

4353 4354
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
4355 4356
		goto drop;

4357 4358
	sk = chan->sk;

4359
	lock_sock(sk);
4360 4361 4362

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

4363
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4364 4365
		goto drop;

4366
	if (chan->imtu < skb->len)
4367 4368
		goto drop;

4369
	if (!chan->ops->recv(chan->data, skb))
4370 4371 4372 4373 4374 4375 4376
		goto done;

drop:
	kfree_skb(skb);

done:
	if (sk)
4377
		release_sock(sk);
4378 4379 4380
	return 0;
}

L
Linus Torvalds 已提交
4381 4382 4383
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4384 4385
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4386 4387 4388 4389 4390

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

4391 4392 4393 4394 4395
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4396 4397 4398
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4399
	case L2CAP_CID_LE_SIGNALING:
4400
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4401 4402 4403
		l2cap_sig_channel(conn, skb);
		break;

4404
	case L2CAP_CID_CONN_LESS:
4405
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
4406 4407 4408 4409
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4410 4411 4412 4413
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4414 4415 4416 4417 4418
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4419 4420 4421 4422 4423 4424 4425 4426
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

4427
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
L
Linus Torvalds 已提交
4428 4429
{
	int exact = 0, lm1 = 0, lm2 = 0;
4430
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4431 4432 4433 4434

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

	/* Find listening sockets and check their link_mode */
4435 4436 4437
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4438

4439
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4440 4441 4442
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4443
			lm1 |= HCI_LM_ACCEPT;
4444
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4445
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4446
			exact++;
4447 4448
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4449
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4450 4451
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4452
	}
4453
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4454 4455 4456 4457

	return exact ? lm1 : lm2;
}

4458
int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
L
Linus Torvalds 已提交
4459
{
4460 4461
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4462 4463 4464 4465 4466 4467
	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);
4468
	} else
4469
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4470 4471 4472 4473

	return 0;
}

4474
int l2cap_disconn_ind(struct hci_conn *hcon)
4475 4476 4477 4478 4479
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4480
	if (!conn)
4481
		return HCI_ERROR_REMOTE_USER_TERM;
4482 4483 4484
	return conn->disc_reason;
}

4485
int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4486 4487 4488
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4489
	l2cap_conn_del(hcon, bt_to_errno(reason));
L
Linus Torvalds 已提交
4490 4491 4492
	return 0;
}

4493
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4494
{
4495
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4496 4497
		return;

4498
	if (encrypt == 0x00) {
4499
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4500
			__clear_chan_timer(chan);
4501 4502
			__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_ENC_TIMEOUT));
4503
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4504
			l2cap_chan_close(chan, ECONNREFUSED);
4505
	} else {
4506
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4507
			__clear_chan_timer(chan);
4508 4509 4510
	}
}

4511
int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4512
{
4513
	struct l2cap_conn *conn = hcon->l2cap_data;
4514
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4515

4516
	if (!conn)
L
Linus Torvalds 已提交
4517
		return 0;
4518

L
Linus Torvalds 已提交
4519 4520
	BT_DBG("conn %p", conn);

4521 4522
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
4523
		cancel_delayed_work(&conn->security_timer);
4524 4525
	}

4526
	mutex_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4527

4528
	list_for_each_entry(chan, &conn->chan_l, list) {
4529
		struct sock *sk = chan->sk;
4530

L
Linus Torvalds 已提交
4531 4532
		bh_lock_sock(sk);

4533 4534 4535 4536 4537
		BT_DBG("chan->scid %d", chan->scid);

		if (chan->scid == L2CAP_CID_LE_DATA) {
			if (!status && encrypt) {
				chan->sec_level = hcon->sec_level;
4538
				l2cap_chan_ready(chan);
4539 4540 4541 4542 4543 4544
			}

			bh_unlock_sock(sk);
			continue;
		}

4545
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4546 4547 4548 4549
			bh_unlock_sock(sk);
			continue;
		}

4550 4551
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4552
			l2cap_check_encryption(chan, encrypt);
4553 4554 4555 4556
			bh_unlock_sock(sk);
			continue;
		}

4557
		if (chan->state == BT_CONNECT) {
4558 4559
			if (!status) {
				struct l2cap_conn_req req;
4560 4561
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4562

4563
				chan->ident = l2cap_get_ident(conn);
4564
				set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
4565

4566
				l2cap_send_cmd(conn, chan->ident,
4567 4568
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
4569
				__clear_chan_timer(chan);
4570 4571
				__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_DISC_TIMEOUT));
4572
			}
4573
		} else if (chan->state == BT_CONNECT2) {
4574
			struct l2cap_conn_rsp rsp;
4575
			__u16 res, stat;
L
Linus Torvalds 已提交
4576

4577
			if (!status) {
4578 4579 4580 4581
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4582 4583
					if (parent)
						parent->sk_data_ready(parent, 0);
4584
				} else {
4585
					l2cap_state_change(chan, BT_CONFIG);
4586 4587 4588
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4589
			} else {
4590
				l2cap_state_change(chan, BT_DISCONN);
4591 4592
				__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_DISC_TIMEOUT));
4593 4594
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4595 4596
			}

4597 4598
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4599 4600
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4601 4602
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4603
		}
L
Linus Torvalds 已提交
4604 4605 4606 4607

		bh_unlock_sock(sk);
	}

4608
	mutex_unlock(&conn->chan_lock);
4609

L
Linus Torvalds 已提交
4610 4611 4612
	return 0;
}

4613
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
L
Linus Torvalds 已提交
4614 4615 4616
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4617 4618 4619 4620
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4621 4622 4623 4624
		goto drop;

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

4625
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4626
		struct l2cap_hdr *hdr;
4627
		struct l2cap_chan *chan;
4628
		u16 cid;
L
Linus Torvalds 已提交
4629 4630 4631 4632 4633 4634 4635 4636 4637 4638
		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);
		}

4639 4640
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4641 4642 4643 4644 4645 4646 4647
			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;
4648
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664

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

4665
		chan = l2cap_get_chan_by_scid(conn, cid);
4666

4667 4668
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4669
			lock_sock(sk);
4670

4671
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4672 4673
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4674
							chan->imtu);
4675
				release_sock(sk);
4676 4677 4678
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4679
			release_sock(sk);
4680
		}
4681

L
Linus Torvalds 已提交
4682
		/* Allocate skb for the complete frame (with header) */
4683 4684
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4685 4686
			goto drop;

4687
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4688
								skb->len);
L
Linus Torvalds 已提交
4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708
		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;
		}

4709
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4710
								skb->len);
L
Linus Torvalds 已提交
4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724
		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;
}

4725
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4726
{
4727
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4728

4729
	read_lock(&chan_list_lock);
L
Linus Torvalds 已提交
4730

4731 4732
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4733

4734
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4735 4736
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4737
					c->state, __le16_to_cpu(c->psm),
4738 4739
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4740
	}
L
Linus Torvalds 已提交
4741

4742
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4743

4744
	return 0;
L
Linus Torvalds 已提交
4745 4746
}

4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759
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 已提交
4760

4761
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4762 4763
{
	int err;
4764

4765
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4766 4767 4768
	if (err < 0)
		return err;

4769 4770 4771 4772 4773 4774
	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 已提交
4775 4776 4777 4778

	return 0;
}

4779
void l2cap_exit(void)
L
Linus Torvalds 已提交
4780
{
4781
	debugfs_remove(l2cap_debugfs);
4782
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4783 4784
}

4785 4786
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");