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

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

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

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

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

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

#include <linux/module.h>

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

59
int disable_ertm;
60
int enable_hs;
61

62
static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
63
static u8 l2cap_fixed_chan[8] = { 0x02, };
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 77
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);

78
/* ---- L2CAP channels ---- */
79 80 81 82 83 84 85 86 87 88 89 90

static inline void chan_hold(struct l2cap_chan *c)
{
	atomic_inc(&c->refcnt);
}

static inline void chan_put(struct l2cap_chan *c)
{
	if (atomic_dec_and_test(&c->refcnt))
		kfree(c);
}

91
static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
92
{
93
	struct l2cap_chan *c;
94 95

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

101 102
}

103
static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
104
{
105
	struct l2cap_chan *c;
106 107

	list_for_each_entry(c, &conn->chan_l, list) {
108
		if (c->scid == cid)
109
			return c;
110
	}
111
	return NULL;
112 113 114 115
}

/* Find channel with given SCID.
 * Returns locked socket */
116
static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
117
{
118
	struct l2cap_chan *c;
119 120 121

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_scid(conn, cid);
122 123
	if (c)
		bh_lock_sock(c->sk);
124
	read_unlock(&conn->chan_lock);
125
	return c;
126 127
}

128
static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
129
{
130
	struct l2cap_chan *c;
131 132

	list_for_each_entry(c, &conn->chan_l, list) {
133
		if (c->ident == ident)
134
			return c;
135
	}
136
	return NULL;
137 138
}

139
static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
140
{
141
	struct l2cap_chan *c;
142 143 144

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_ident(conn, ident);
145 146
	if (c)
		bh_lock_sock(c->sk);
147
	read_unlock(&conn->chan_lock);
148
	return c;
149 150
}

151
static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
152
{
153
	struct l2cap_chan *c;
154

155 156
	list_for_each_entry(c, &chan_list, global_l) {
		if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
157 158 159
			goto found;
	}

160
	c = NULL;
161
found:
162
	return c;
163 164 165 166
}

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

169
	write_lock_bh(&chan_list_lock);
170

171
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
172 173
		err = -EADDRINUSE;
		goto done;
174 175
	}

176 177 178 179 180 181 182 183 184
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

		err = -EINVAL;
		for (p = 0x1001; p < 0x1100; p += 2)
185
			if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
186 187 188 189 190 191
				chan->psm   = cpu_to_le16(p);
				chan->sport = cpu_to_le16(p);
				err = 0;
				break;
			}
	}
192

193
done:
194
	write_unlock_bh(&chan_list_lock);
195
	return err;
196 197 198 199
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
200
	write_lock_bh(&chan_list_lock);
201 202 203

	chan->scid = scid;

204
	write_unlock_bh(&chan_list_lock);
205 206 207 208

	return 0;
}

209
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
210
{
211
	u16 cid = L2CAP_CID_DYN_START;
212

213
	for (; cid < L2CAP_CID_DYN_END; cid++) {
214
		if (!__l2cap_get_chan_by_scid(conn, cid))
215 216 217 218 219 220
			return cid;
	}

	return 0;
}

221
static void l2cap_set_timer(struct l2cap_chan *chan, struct timer_list *timer, long timeout)
222
{
223
	BT_DBG("chan %p state %d timeout %ld", chan->sk, chan->state, timeout);
224

225
	if (!mod_timer(timer, jiffies + msecs_to_jiffies(timeout)))
226
		chan_hold(chan);
227 228
}

229
static void l2cap_clear_timer(struct l2cap_chan *chan, struct timer_list *timer)
230
{
231
	BT_DBG("chan %p state %d", chan, chan->state);
232

233 234
	if (timer_pending(timer) && del_timer(timer))
		chan_put(chan);
235 236
}

237 238 239 240 241 242
static void l2cap_state_change(struct l2cap_chan *chan, int state)
{
	chan->state = state;
	chan->ops->state_change(chan->data, state);
}

243 244 245 246 247 248
static void l2cap_chan_timeout(unsigned long arg)
{
	struct l2cap_chan *chan = (struct l2cap_chan *) arg;
	struct sock *sk = chan->sk;
	int reason;

249
	BT_DBG("chan %p state %d", chan, chan->state);
250 251 252 253 254

	bh_lock_sock(sk);

	if (sock_owned_by_user(sk)) {
		/* sk is owned by user. Try again later */
255
		__set_chan_timer(chan, HZ / 5);
256
		bh_unlock_sock(sk);
257
		chan_put(chan);
258 259 260
		return;
	}

261
	if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
262
		reason = ECONNREFUSED;
263
	else if (chan->state == BT_CONNECT &&
264 265 266 267 268
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

269
	l2cap_chan_close(chan, reason);
270 271 272

	bh_unlock_sock(sk);

273
	chan->ops->close(chan->data);
274
	chan_put(chan);
275 276
}

277
struct l2cap_chan *l2cap_chan_create(struct sock *sk)
278 279 280 281 282 283 284 285 286
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

287 288 289 290
	write_lock_bh(&chan_list_lock);
	list_add(&chan->global_l, &chan_list);
	write_unlock_bh(&chan_list_lock);

291 292
	setup_timer(&chan->chan_timer, l2cap_chan_timeout, (unsigned long) chan);

293 294
	chan->state = BT_OPEN;

295 296
	atomic_set(&chan->refcnt, 1);

297 298 299
	return chan;
}

300
void l2cap_chan_destroy(struct l2cap_chan *chan)
301
{
302 303 304 305
	write_lock_bh(&chan_list_lock);
	list_del(&chan->global_l);
	write_unlock_bh(&chan_list_lock);

306
	chan_put(chan);
307 308
}

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

314 315
	conn->disc_reason = 0x13;

316
	chan->conn = conn;
317

318
	if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED) {
319 320
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
321
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
322 323
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
324 325
		} else {
			/* Alloc CID for connection-oriented socket */
326
			chan->scid = l2cap_alloc_cid(conn);
327
			chan->omtu = L2CAP_DEFAULT_MTU;
328
		}
329
	} else if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
330
		/* Connectionless socket */
331 332
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
333
		chan->omtu = L2CAP_DEFAULT_MTU;
334 335
	} else {
		/* Raw socket can send/recv signalling messages only */
336 337
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
338
		chan->omtu = L2CAP_DEFAULT_MTU;
339 340
	}

341 342 343 344 345 346 347
	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;

348
	chan_hold(chan);
349 350

	list_add(&chan->list, &conn->chan_l);
351 352
}

353
/* Delete channel.
354
 * Must be called on the locked socket. */
355
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
356
{
357
	struct sock *sk = chan->sk;
358
	struct l2cap_conn *conn = chan->conn;
359 360
	struct sock *parent = bt_sk(sk)->parent;

361
	__clear_chan_timer(chan);
362

363
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
364

365
	if (conn) {
366 367 368 369
		/* Delete from channel list */
		write_lock_bh(&conn->chan_lock);
		list_del(&chan->list);
		write_unlock_bh(&conn->chan_lock);
370
		chan_put(chan);
371

372
		chan->conn = NULL;
373 374 375
		hci_conn_put(conn->hcon);
	}

376
	l2cap_state_change(chan, BT_CLOSED);
377 378 379 380 381 382 383 384 385 386
	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);
387

388 389
	if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
			test_bit(CONF_INPUT_DONE, &chan->conf_state)))
390
		return;
391

392
	skb_queue_purge(&chan->tx_q);
393

394
	if (chan->mode == L2CAP_MODE_ERTM) {
395 396
		struct srej_list *l, *tmp;

397 398 399
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
400

401
		skb_queue_purge(&chan->srej_q);
402

403
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
404 405 406 407
			list_del(&l->list);
			kfree(l);
		}
	}
408 409
}

410 411 412 413 414 415 416
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

	/* Close not yet accepted channels */
417
	while ((sk = bt_accept_dequeue(parent, NULL))) {
418
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;
419
		__clear_chan_timer(chan);
420
		lock_sock(sk);
421
		l2cap_chan_close(chan, ECONNRESET);
422
		release_sock(sk);
423
		chan->ops->close(chan->data);
424
	}
425 426
}

427
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
428 429 430 431
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

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

434
	switch (chan->state) {
435 436
	case BT_LISTEN:
		l2cap_chan_cleanup_listen(sk);
437 438 439

		l2cap_state_change(chan, BT_CLOSED);
		sock_set_flag(sk, SOCK_ZAPPED);
440 441 442 443
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
444
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
445
					conn->hcon->type == ACL_LINK) {
446 447
			__clear_chan_timer(chan);
			__set_chan_timer(chan, sk->sk_sndtimeo);
448 449 450 451 452 453
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
454
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
455 456 457 458 459 460 461 462
					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;
463
			l2cap_state_change(chan, BT_DISCONN);
464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486

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

487
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
488
{
489
	if (chan->chan_type == L2CAP_CHAN_RAW) {
490
		switch (chan->sec_level) {
491 492 493 494 495 496 497
		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;
		}
498
	} else if (chan->psm == cpu_to_le16(0x0001)) {
499 500
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
501

502
		if (chan->sec_level == BT_SECURITY_HIGH)
503
			return HCI_AT_NO_BONDING_MITM;
504
		else
505
			return HCI_AT_NO_BONDING;
506
	} else {
507
		switch (chan->sec_level) {
508
		case BT_SECURITY_HIGH:
509
			return HCI_AT_GENERAL_BONDING_MITM;
510
		case BT_SECURITY_MEDIUM:
511
			return HCI_AT_GENERAL_BONDING;
512
		default:
513
			return HCI_AT_NO_BONDING;
514
		}
515
	}
516 517 518
}

/* Service level security */
519
static inline int l2cap_check_security(struct l2cap_chan *chan)
520
{
521
	struct l2cap_conn *conn = chan->conn;
522 523
	__u8 auth_type;

524
	auth_type = l2cap_get_auth_type(chan);
525

526
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
527 528
}

529
static u8 l2cap_get_ident(struct l2cap_conn *conn)
530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
{
	u8 id;

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

	spin_lock_bh(&conn->lock);

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

	id = conn->tx_ident;

	spin_unlock_bh(&conn->lock);

	return id;
}

551
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
552 553
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
554
	u8 flags;
555 556 557 558

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

	if (!skb)
559
		return;
560

561 562 563 564 565
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

566 567
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;

568
	hci_send_acl(conn->hcon, skb, flags);
569 570
}

571
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
572 573 574
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
575
	struct l2cap_conn *conn = chan->conn;
576
	int count, hlen;
577
	u8 flags;
578

579
	if (chan->state != BT_CONNECTED)
580 581
		return;

582 583 584 585 586
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

587
	if (chan->fcs == L2CAP_FCS_CRC16)
588
		hlen += L2CAP_FCS_SIZE;
589

590
	BT_DBG("chan %p, control 0x%8.8x", chan, control);
591

592
	count = min_t(unsigned int, conn->mtu, hlen);
593 594

	control |= __set_sframe(chan);
595

596
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
597
		control |= __set_ctrl_final(chan);
598

599
	if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
600
		control |= __set_ctrl_poll(chan);
601

602 603
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
604
		return;
605 606

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
607
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
608
	lh->cid = cpu_to_le16(chan->dcid);
609 610

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

612
	if (chan->fcs == L2CAP_FCS_CRC16) {
613 614
		u16 fcs = crc16(0, (u8 *)lh, count - L2CAP_FCS_SIZE);
		put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
615 616
	}

617 618 619 620 621
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

622
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
623

624
	hci_send_acl(chan->conn->hcon, skb, flags);
625 626
}

627
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u32 control)
628
{
629
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
630
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
631
		set_bit(CONN_RNR_SENT, &chan->conn_state);
632
	} else
633
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
634

635
	control |= __set_reqseq(chan, chan->buffer_seq);
636

637
	l2cap_send_sframe(chan, control);
638 639
}

640
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
641
{
642
	return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
643 644
}

645
static void l2cap_do_start(struct l2cap_chan *chan)
646
{
647
	struct l2cap_conn *conn = chan->conn;
648 649

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
650 651 652
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

653 654
		if (l2cap_check_security(chan) &&
				__l2cap_no_conn_pending(chan)) {
655
			struct l2cap_conn_req req;
656 657
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
658

659
			chan->ident = l2cap_get_ident(conn);
660
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
661

662 663
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
664
		}
665 666 667 668 669 670 671 672 673 674 675 676 677 678 679
	} else {
		struct l2cap_info_req req;
		req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);

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

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

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

680 681 682
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
683
	if (!disable_ertm)
684 685 686 687 688 689 690 691 692 693 694 695
		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;
	}
}

696
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
697
{
698
	struct sock *sk;
699 700
	struct l2cap_disconn_req req;

701 702 703
	if (!conn)
		return;

704 705
	sk = chan->sk;

706
	if (chan->mode == L2CAP_MODE_ERTM) {
707 708 709
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
710 711
	}

712 713
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
714 715
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
716

717
	l2cap_state_change(chan, BT_DISCONN);
718
	sk->sk_err = err;
719 720
}

L
Linus Torvalds 已提交
721
/* ---- L2CAP connections ---- */
722 723
static void l2cap_conn_start(struct l2cap_conn *conn)
{
724
	struct l2cap_chan *chan, *tmp;
725 726 727

	BT_DBG("conn %p", conn);

728
	read_lock(&conn->chan_lock);
729

730
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
731
		struct sock *sk = chan->sk;
732

733 734
		bh_lock_sock(sk);

735
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
736 737 738 739
			bh_unlock_sock(sk);
			continue;
		}

740
		if (chan->state == BT_CONNECT) {
741
			struct l2cap_conn_req req;
742

743
			if (!l2cap_check_security(chan) ||
744
					!__l2cap_no_conn_pending(chan)) {
745 746 747
				bh_unlock_sock(sk);
				continue;
			}
748

749 750 751
			if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
					&& test_bit(CONF_STATE2_DEVICE,
					&chan->conf_state)) {
752
				/* l2cap_chan_close() calls list_del(chan)
753
				 * so release the lock */
754
				read_unlock(&conn->chan_lock);
755
				l2cap_chan_close(chan, ECONNRESET);
756
				read_lock(&conn->chan_lock);
757 758
				bh_unlock_sock(sk);
				continue;
759
			}
760

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

764
			chan->ident = l2cap_get_ident(conn);
765
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
766

767 768
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
769

770
		} else if (chan->state == BT_CONNECT2) {
771
			struct l2cap_conn_rsp rsp;
772
			char buf[128];
773 774
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
775

776
			if (l2cap_check_security(chan)) {
777 778 779 780
				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);
781 782
					if (parent)
						parent->sk_data_ready(parent, 0);
783 784

				} else {
785
					l2cap_state_change(chan, BT_CONFIG);
786 787 788
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
789 790 791 792 793
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

794 795
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
796

797
			if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
798 799 800 801 802
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

803
			set_bit(CONF_REQ_SENT, &chan->conf_state);
804
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
805 806
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
807 808 809 810 811
		}

		bh_unlock_sock(sk);
	}

812
	read_unlock(&conn->chan_lock);
813 814
}

815 816 817
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
818
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
819
{
820
	struct l2cap_chan *c, *c1 = NULL;
821

822
	read_lock(&chan_list_lock);
823

824 825
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
826

827
		if (state && c->state != state)
828 829
			continue;

830
		if (c->scid == cid) {
831
			/* Exact match. */
832 833 834 835
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
836 837 838

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
839
				c1 = c;
840 841
		}
	}
842

843
	read_unlock(&chan_list_lock);
844

845
	return c1;
846 847 848 849
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
850
	struct sock *parent, *sk;
851
	struct l2cap_chan *chan, *pchan;
852 853 854 855

	BT_DBG("");

	/* Check if we have socket listening on cid */
856
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
857
							conn->src);
858
	if (!pchan)
859 860
		return;

861 862
	parent = pchan->sk;

863 864
	bh_lock_sock(parent);

865 866 867 868 869 870
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

871 872
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
873 874
		goto clean;

875
	sk = chan->sk;
876

877
	write_lock_bh(&conn->chan_lock);
878 879 880 881 882 883

	hci_conn_hold(conn->hcon);

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

884 885
	bt_accept_enqueue(parent, sk);

886 887
	__l2cap_chan_add(conn, chan);

888
	__set_chan_timer(chan, sk->sk_sndtimeo);
889

890
	l2cap_state_change(chan, BT_CONNECTED);
891 892
	parent->sk_data_ready(parent, 0);

893
	write_unlock_bh(&conn->chan_lock);
894 895 896 897 898

clean:
	bh_unlock_sock(parent);
}

899 900 901 902 903 904 905 906 907 908
static void l2cap_chan_ready(struct sock *sk)
{
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
	struct sock *parent = bt_sk(sk)->parent;

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

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

909
	l2cap_state_change(chan, BT_CONNECTED);
910 911 912 913 914 915
	sk->sk_state_change(sk);

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

916 917
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
918
	struct l2cap_chan *chan;
919

920
	BT_DBG("conn %p", conn);
921

922 923 924
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

925 926 927
	if (conn->hcon->out && conn->hcon->type == LE_LINK)
		smp_conn_security(conn, conn->hcon->pending_sec_level);

928
	read_lock(&conn->chan_lock);
929

930
	list_for_each_entry(chan, &conn->chan_l, list) {
931
		struct sock *sk = chan->sk;
932

933
		bh_lock_sock(sk);
934

935
		if (conn->hcon->type == LE_LINK) {
936
			if (smp_conn_security(conn, chan->sec_level))
937
				l2cap_chan_ready(sk);
938

939
		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
940
			__clear_chan_timer(chan);
941
			l2cap_state_change(chan, BT_CONNECTED);
942
			sk->sk_state_change(sk);
943

944
		} else if (chan->state == BT_CONNECT)
945
			l2cap_do_start(chan);
946

947
		bh_unlock_sock(sk);
948
	}
949

950
	read_unlock(&conn->chan_lock);
951 952 953 954 955
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
956
	struct l2cap_chan *chan;
957 958 959

	BT_DBG("conn %p", conn);

960
	read_lock(&conn->chan_lock);
961

962
	list_for_each_entry(chan, &conn->chan_l, list) {
963
		struct sock *sk = chan->sk;
964

965
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
966 967 968
			sk->sk_err = err;
	}

969
	read_unlock(&conn->chan_lock);
970 971 972 973 974 975
}

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

976
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
977
	conn->info_ident = 0;
978

979 980 981
	l2cap_conn_start(conn);
}

982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006
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);

	/* Kill channels */
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
		sk = chan->sk;
		bh_lock_sock(sk);
		l2cap_chan_del(chan, err);
		bh_unlock_sock(sk);
		chan->ops->close(chan->data);
	}

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

1007
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->pend)) {
1008
		del_timer(&conn->security_timer);
1009
		smp_chan_destroy(conn);
1010
	}
1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022

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

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

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

L
Linus Torvalds 已提交
1023 1024
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
1025
	struct l2cap_conn *conn = hcon->l2cap_data;
L
Linus Torvalds 已提交
1026

1027
	if (conn || status)
L
Linus Torvalds 已提交
1028 1029
		return conn;

1030 1031
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
	if (!conn)
L
Linus Torvalds 已提交
1032 1033 1034 1035 1036
		return NULL;

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

1037 1038
	BT_DBG("hcon %p conn %p", hcon, conn);

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

1047 1048
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
1049
	spin_lock_init(&conn->lock);
1050 1051 1052
	rwlock_init(&conn->chan_lock);

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

1054 1055 1056 1057
	if (hcon->type == LE_LINK)
		setup_timer(&conn->security_timer, security_timeout,
						(unsigned long) conn);
	else
1058
		setup_timer(&conn->info_timer, l2cap_info_timeout,
D
Dave Young 已提交
1059 1060
						(unsigned long) conn);

1061 1062
	conn->disc_reason = 0x13;

L
Linus Torvalds 已提交
1063 1064 1065
	return conn;
}

1066
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1067
{
1068
	write_lock_bh(&conn->chan_lock);
1069
	__l2cap_chan_add(conn, chan);
1070
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
1071 1072 1073 1074 1075 1076 1077
}

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

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

1082
	read_lock(&chan_list_lock);
1083

1084 1085
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1086

1087
		if (state && c->state != state)
L
Linus Torvalds 已提交
1088 1089
			continue;

1090
		if (c->psm == psm) {
L
Linus Torvalds 已提交
1091
			/* Exact match. */
1092
			if (!bacmp(&bt_sk(sk)->src, src)) {
1093
				read_unlock(&chan_list_lock);
1094 1095
				return c;
			}
L
Linus Torvalds 已提交
1096 1097 1098

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1099
				c1 = c;
L
Linus Torvalds 已提交
1100 1101 1102
		}
	}

1103
	read_unlock(&chan_list_lock);
1104

1105
	return c1;
L
Linus Torvalds 已提交
1106 1107
}

1108
int l2cap_chan_connect(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1109
{
1110
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1111 1112 1113 1114 1115
	bdaddr_t *src = &bt_sk(sk)->src;
	bdaddr_t *dst = &bt_sk(sk)->dst;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1116
	__u8 auth_type;
1117
	int err;
L
Linus Torvalds 已提交
1118

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

1122 1123
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1124 1125 1126 1127
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

1128
	auth_type = l2cap_get_auth_type(chan);
1129

1130
	if (chan->dcid == L2CAP_CID_LE_DATA)
1131
		hcon = hci_connect(hdev, LE_LINK, dst,
1132
					chan->sec_level, auth_type);
1133 1134
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1135
					chan->sec_level, auth_type);
1136

1137 1138
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1139
		goto done;
1140
	}
L
Linus Torvalds 已提交
1141 1142 1143 1144

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1145
		err = -ENOMEM;
L
Linus Torvalds 已提交
1146 1147 1148 1149 1150 1151
		goto done;
	}

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

1152 1153
	l2cap_chan_add(conn, chan);

1154
	l2cap_state_change(chan, BT_CONNECT);
1155
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1156 1157

	if (hcon->state == BT_CONNECTED) {
1158
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1159
			__clear_chan_timer(chan);
1160
			if (l2cap_check_security(chan))
1161
				l2cap_state_change(chan, BT_CONNECTED);
1162
		} else
1163
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1164 1165
	}

1166 1167
	err = 0;

L
Linus Torvalds 已提交
1168 1169 1170 1171 1172 1173
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

1174
int __l2cap_wait_ack(struct sock *sk)
1175
{
1176
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1177 1178 1179 1180
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1181
	add_wait_queue(sk_sleep(sk), &wait);
1182 1183
	set_current_state(TASK_INTERRUPTIBLE);
	while (chan->unacked_frames > 0 && chan->conn) {
1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194
		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);
1195
		set_current_state(TASK_INTERRUPTIBLE);
1196 1197 1198 1199 1200 1201

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1202
	remove_wait_queue(sk_sleep(sk), &wait);
1203 1204 1205
	return err;
}

1206 1207
static void l2cap_monitor_timeout(unsigned long arg)
{
1208 1209
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1210

1211
	BT_DBG("chan %p", chan);
1212

1213
	bh_lock_sock(sk);
1214
	if (chan->retry_count >= chan->remote_max_tx) {
1215
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1216
		bh_unlock_sock(sk);
1217 1218 1219
		return;
	}

1220
	chan->retry_count++;
1221
	__set_monitor_timer(chan);
1222

1223
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1224
	bh_unlock_sock(sk);
1225 1226 1227 1228
}

static void l2cap_retrans_timeout(unsigned long arg)
{
1229 1230
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1231

1232
	BT_DBG("chan %p", chan);
1233

1234
	bh_lock_sock(sk);
1235
	chan->retry_count = 1;
1236
	__set_monitor_timer(chan);
1237

1238
	set_bit(CONN_WAIT_F, &chan->conn_state);
1239

1240
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1241
	bh_unlock_sock(sk);
1242 1243
}

1244
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1245
{
1246
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1247

1248
	while ((skb = skb_peek(&chan->tx_q)) &&
1249
			chan->unacked_frames) {
1250
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1251
			break;
L
Linus Torvalds 已提交
1252

1253
		skb = skb_dequeue(&chan->tx_q);
1254
		kfree_skb(skb);
L
Linus Torvalds 已提交
1255

1256
		chan->unacked_frames--;
1257
	}
L
Linus Torvalds 已提交
1258

1259
	if (!chan->unacked_frames)
1260
		__clear_retrans_timer(chan);
1261
}
L
Linus Torvalds 已提交
1262

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

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

1270 1271
	if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
					lmp_no_flush_capable(hcon->hdev))
1272 1273 1274 1275
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

1276
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
1277
	hci_send_acl(hcon, skb, flags);
1278 1279
}

1280
static void l2cap_streaming_send(struct l2cap_chan *chan)
1281
{
1282
	struct sk_buff *skb;
1283 1284
	u32 control;
	u16 fcs;
1285

1286
	while ((skb = skb_dequeue(&chan->tx_q))) {
1287
		control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1288
		control |= __set_txseq(chan, chan->next_tx_seq);
1289
		__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1290

1291
		if (chan->fcs == L2CAP_FCS_CRC16) {
1292 1293 1294 1295
			fcs = crc16(0, (u8 *)skb->data,
						skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs,
					skb->data + skb->len - L2CAP_FCS_SIZE);
1296 1297
		}

1298
		l2cap_do_send(chan, skb);
1299

1300
		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1301 1302 1303
	}
}

1304
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1305 1306
{
	struct sk_buff *skb, *tx_skb;
1307 1308
	u16 fcs;
	u32 control;
1309

1310
	skb = skb_peek(&chan->tx_q);
1311 1312
	if (!skb)
		return;
1313

1314 1315
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1316 1317
			break;

1318
		if (skb_queue_is_last(&chan->tx_q, skb))
1319
			return;
1320

1321
	} while ((skb = skb_queue_next(&chan->tx_q, skb)));
1322

1323 1324
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1325
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1326 1327 1328 1329 1330
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
1331 1332

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

1335
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1336
		control |= __set_ctrl_final(chan);
1337

1338
	control |= __set_reqseq(chan, chan->buffer_seq);
1339
	control |= __set_txseq(chan, tx_seq);
1340

1341
	__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1342

1343
	if (chan->fcs == L2CAP_FCS_CRC16) {
1344 1345 1346 1347
		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);
1348 1349
	}

1350
	l2cap_do_send(chan, tx_skb);
1351 1352
}

1353
static int l2cap_ertm_send(struct l2cap_chan *chan)
1354 1355
{
	struct sk_buff *skb, *tx_skb;
1356 1357
	u16 fcs;
	u32 control;
1358
	int nsent = 0;
1359

1360
	if (chan->state != BT_CONNECTED)
1361
		return -ENOTCONN;
1362

1363
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1364

1365 1366
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1367
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1368 1369 1370
			break;
		}

1371 1372
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1373 1374
		bt_cb(skb)->retries++;

1375
		control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1376
		control &= __get_sar_mask(chan);
1377

1378
		if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1379
			control |= __set_ctrl_final(chan);
1380

1381
		control |= __set_reqseq(chan, chan->buffer_seq);
1382
		control |= __set_txseq(chan, chan->next_tx_seq);
1383

1384
		__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1385

1386
		if (chan->fcs == L2CAP_FCS_CRC16) {
1387 1388 1389 1390
			fcs = crc16(0, (u8 *)skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs, skb->data +
						tx_skb->len - L2CAP_FCS_SIZE);
1391 1392
		}

1393
		l2cap_do_send(chan, tx_skb);
1394

1395
		__set_retrans_timer(chan);
1396

1397
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
1398 1399

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

1401
		if (bt_cb(skb)->retries == 1)
1402
			chan->unacked_frames++;
1403

1404
		chan->frames_sent++;
1405

1406 1407
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1408
		else
1409
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1410 1411

		nsent++;
1412 1413
	}

1414 1415 1416
	return nsent;
}

1417
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1418 1419 1420
{
	int ret;

1421 1422
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1423

1424
	chan->next_tx_seq = chan->expected_ack_seq;
1425
	ret = l2cap_ertm_send(chan);
1426 1427 1428
	return ret;
}

1429
static void l2cap_send_ack(struct l2cap_chan *chan)
1430
{
1431
	u32 control = 0;
1432

1433
	control |= __set_reqseq(chan, chan->buffer_seq);
1434

1435
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1436
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1437
		set_bit(CONN_RNR_SENT, &chan->conn_state);
1438
		l2cap_send_sframe(chan, control);
1439
		return;
1440
	}
1441

1442
	if (l2cap_ertm_send(chan) > 0)
1443 1444
		return;

1445
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1446
	l2cap_send_sframe(chan, control);
1447 1448
}

1449
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1450 1451
{
	struct srej_list *tail;
1452
	u32 control;
1453

1454
	control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1455
	control |= __set_ctrl_final(chan);
1456

1457
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1458
	control |= __set_reqseq(chan, tail->tx_seq);
1459

1460
	l2cap_send_sframe(chan, control);
1461 1462
}

1463 1464
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
1465
	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1466 1467
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1468

1469
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1470
		return -EFAULT;
L
Linus Torvalds 已提交
1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481

	sent += count;
	len  -= count;

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

		*frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
		if (!*frag)
1482
			return err;
1483 1484
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1485 1486 1487 1488 1489 1490 1491 1492

		sent += count;
		len  -= count;

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

	return sent;
1493
}
L
Linus Torvalds 已提交
1494

1495
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1496
{
1497
	struct sock *sk = chan->sk;
1498
	struct l2cap_conn *conn = chan->conn;
1499
	struct sk_buff *skb;
1500
	int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1501 1502 1503 1504 1505 1506 1507 1508
	struct l2cap_hdr *lh;

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

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1509
		return ERR_PTR(err);
1510 1511 1512

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1513
	lh->cid = cpu_to_le16(chan->dcid);
1514
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1515
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1516 1517 1518 1519 1520 1521 1522 1523 1524

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

1525
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1526
{
1527
	struct sock *sk = chan->sk;
1528
	struct l2cap_conn *conn = chan->conn;
1529 1530 1531 1532 1533 1534 1535 1536 1537 1538
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

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

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1539
		return ERR_PTR(err);
1540 1541 1542

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1543
	lh->cid = cpu_to_le16(chan->dcid);
1544 1545 1546 1547 1548 1549 1550 1551 1552 1553
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

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

1554 1555
static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
1556
						u32 control, u16 sdulen)
1557
{
1558
	struct sock *sk = chan->sk;
1559
	struct l2cap_conn *conn = chan->conn;
1560
	struct sk_buff *skb;
1561
	int err, count, hlen;
1562 1563 1564 1565
	struct l2cap_hdr *lh;

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

1566 1567 1568
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1569 1570 1571 1572 1573
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1574
	if (sdulen)
1575
		hlen += L2CAP_SDULEN_SIZE;
1576

1577
	if (chan->fcs == L2CAP_FCS_CRC16)
1578
		hlen += L2CAP_FCS_SIZE;
1579

1580 1581 1582 1583
	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1584
		return ERR_PTR(err);
1585 1586 1587

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

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

1593
	if (sdulen)
1594
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1595 1596 1597 1598 1599 1600

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

1602
	if (chan->fcs == L2CAP_FCS_CRC16)
1603
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1604

1605
	bt_cb(skb)->retries = 0;
1606
	return skb;
L
Linus Torvalds 已提交
1607 1608
}

1609
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1610 1611 1612
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1613
	u32 control;
1614 1615
	size_t size = 0;

1616
	skb_queue_head_init(&sar_queue);
1617
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1618
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1619 1620 1621 1622
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1623 1624
	len -= chan->remote_mps;
	size += chan->remote_mps;
1625 1626 1627 1628

	while (len > 0) {
		size_t buflen;

1629
		if (len > chan->remote_mps) {
1630
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1631
			buflen = chan->remote_mps;
1632
		} else {
1633
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
1634 1635 1636
			buflen = len;
		}

1637
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1638 1639 1640 1641 1642 1643 1644 1645 1646
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1647 1648 1649
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1650 1651 1652 1653

	return size;
}

1654 1655 1656
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
{
	struct sk_buff *skb;
1657
	u32 control;
1658 1659 1660
	int err;

	/* Connectionless channel */
1661
	if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688
		skb = l2cap_create_connless_pdu(chan, msg, len);
		if (IS_ERR(skb))
			return PTR_ERR(skb);

		l2cap_do_send(chan, skb);
		return len;
	}

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

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

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

	case L2CAP_MODE_ERTM:
	case L2CAP_MODE_STREAMING:
		/* Entire SDU fits into one PDU */
		if (len <= chan->remote_mps) {
1689
			control = __set_ctrl_sar(chan, L2CAP_SAR_UNSEGMENTED);
1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712
			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;
		}

1713 1714
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
				test_bit(CONN_WAIT_F, &chan->conn_state)) {
1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732
			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 已提交
1733 1734 1735 1736
/* 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;
1737
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1738 1739 1740

	BT_DBG("conn %p", conn);

1741 1742
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1743
		struct sock *sk = chan->sk;
1744
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
1745 1746 1747 1748 1749
			continue;

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

1754
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
1755 1756
			kfree_skb(nskb);
	}
1757
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768
}

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

1769 1770
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1771 1772 1773 1774 1775 1776 1777 1778 1779

	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);
1780
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1781 1782 1783 1784 1785

	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 已提交
1786 1787 1788 1789

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1790
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840

	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:
1841
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1842 1843 1844
		break;

	case 4:
1845
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
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
		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:
1872
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1873 1874 1875
		break;

	case 4:
1876
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1877 1878 1879 1880 1881 1882 1883 1884 1885 1886
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

	switch(chan->mode) {
	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);
}

1918 1919
static void l2cap_ack_timeout(unsigned long arg)
{
1920
	struct l2cap_chan *chan = (void *) arg;
1921

1922 1923 1924
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1925 1926
}

1927
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1928
{
1929 1930
	struct sock *sk = chan->sk;

1931
	chan->expected_ack_seq = 0;
1932
	chan->unacked_frames = 0;
1933
	chan->buffer_seq = 0;
1934 1935
	chan->num_acked = 0;
	chan->frames_sent = 0;
1936

1937 1938 1939 1940 1941
	setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
							(unsigned long) chan);
	setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
							(unsigned long) chan);
	setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1942

1943
	skb_queue_head_init(&chan->srej_q);
1944

1945 1946
	INIT_LIST_HEAD(&chan->srej_l);

1947 1948

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1949 1950
}

1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963
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;
	}
}

1964 1965 1966 1967 1968
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

1969 1970 1971 1972 1973
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

1974 1975 1976
static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
{
	if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
1977
						__l2cap_ews_supported(chan)) {
1978 1979
		/* use extended control field */
		set_bit(FLAG_EXT_CTRL, &chan->flags);
1980 1981
		chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
	} else {
1982 1983
		chan->tx_win = min_t(u16, chan->tx_win,
						L2CAP_DEFAULT_TX_WINDOW);
1984 1985
		chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	}
1986 1987
}

1988
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1989 1990
{
	struct l2cap_conf_req *req = data;
1991
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
1992
	void *ptr = req->data;
1993
	u16 size;
L
Linus Torvalds 已提交
1994

1995
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1996

1997
	if (chan->num_conf_req || chan->num_conf_rsp)
1998 1999
		goto done;

2000
	switch (chan->mode) {
2001 2002
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2003
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2004 2005
			break;

2006 2007 2008
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2009
		/* fall through */
2010
	default:
2011
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2012 2013 2014 2015
		break;
	}

done:
2016 2017
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2018

2019
	switch (chan->mode) {
2020
	case L2CAP_MODE_BASIC:
2021 2022
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2023 2024
			break;

2025 2026 2027 2028 2029 2030 2031
		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;

2032 2033
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
2034 2035 2036 2037
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2038
		rfc.max_transmit    = chan->max_tx;
2039 2040
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2041 2042 2043 2044 2045 2046

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

2048 2049 2050 2051 2052
		l2cap_txwin_setup(chan);

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

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

2056 2057 2058
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2059
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2060 2061
			break;

2062
		if (chan->fcs == L2CAP_FCS_NONE ||
2063
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2064 2065
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2066
		}
2067 2068 2069 2070

		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
								chan->tx_win);
2071 2072 2073 2074 2075 2076 2077 2078
		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;
2079 2080 2081 2082 2083 2084

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

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

2089 2090 2091
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2092
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2093 2094
			break;

2095
		if (chan->fcs == L2CAP_FCS_NONE ||
2096
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2097 2098
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2099
		}
2100 2101
		break;
	}
L
Linus Torvalds 已提交
2102

2103
	req->dcid  = cpu_to_le16(chan->dcid);
2104
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2105 2106 2107 2108

	return ptr - data;
}

2109
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2110
{
2111 2112
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
2113 2114
	void *req = chan->conf_req;
	int len = chan->conf_len;
2115 2116
	int type, hint, olen;
	unsigned long val;
2117
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2118
	u16 mtu = L2CAP_DEFAULT_MTU;
2119
	u16 result = L2CAP_CONF_SUCCESS;
2120
	u16 size;
L
Linus Torvalds 已提交
2121

2122
	BT_DBG("chan %p", chan);
2123

2124 2125
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2126

2127
		hint  = type & L2CAP_CONF_HINT;
2128
		type &= L2CAP_CONF_MASK;
2129 2130 2131

		switch (type) {
		case L2CAP_CONF_MTU:
2132
			mtu = val;
2133 2134 2135
			break;

		case L2CAP_CONF_FLUSH_TO:
2136
			chan->flush_to = val;
2137 2138 2139 2140 2141
			break;

		case L2CAP_CONF_QOS:
			break;

2142 2143 2144 2145 2146
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2147 2148
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2149
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2150 2151 2152

			break;

2153 2154 2155 2156 2157 2158
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;

			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2159
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2160 2161 2162
			chan->remote_tx_win = val;
			break;

2163 2164 2165 2166 2167 2168 2169 2170 2171 2172
		default:
			if (hint)
				break;

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

2173
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2174 2175
		goto done;

2176
	switch (chan->mode) {
2177 2178
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2179
		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2180
			chan->mode = l2cap_select_mode(rfc.mode,
2181
					chan->conn->feat_mask);
2182 2183 2184
			break;
		}

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

2188 2189 2190 2191
		break;
	}

done:
2192
	if (chan->mode != rfc.mode) {
2193
		result = L2CAP_CONF_UNACCEPT;
2194
		rfc.mode = chan->mode;
2195

2196
		if (chan->num_conf_rsp == 1)
2197 2198 2199 2200 2201 2202 2203
			return -ECONNREFUSED;

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


2204 2205 2206 2207
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2208 2209 2210
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2211
			chan->omtu = mtu;
2212
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2213
		}
2214
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2215

2216 2217
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2218
			chan->fcs = L2CAP_FCS_NONE;
2219
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2220 2221 2222
			break;

		case L2CAP_MODE_ERTM:
2223 2224 2225 2226 2227
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;

2228
			chan->remote_max_tx = rfc.max_transmit;
2229

2230 2231 2232 2233 2234 2235 2236
			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;
2237

2238 2239 2240 2241
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2242

2243
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2244 2245 2246 2247

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

2248 2249 2250
			break;

		case L2CAP_MODE_STREAMING:
2251 2252 2253 2254 2255 2256 2257
			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;
2258

2259
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2260 2261 2262 2263

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

2264 2265 2266
			break;

		default:
2267 2268
			result = L2CAP_CONF_UNACCEPT;

2269
			memset(&rfc, 0, sizeof(rfc));
2270
			rfc.mode = chan->mode;
2271
		}
2272

2273
		if (result == L2CAP_CONF_SUCCESS)
2274
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2275
	}
2276
	rsp->scid   = cpu_to_le16(chan->dcid);
2277 2278 2279 2280
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2281 2282
}

2283
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2284 2285 2286 2287 2288 2289 2290
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2291
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2292 2293 2294 2295 2296 2297 2298 2299

	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;
2300
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2301
			} else
2302 2303
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2304 2305 2306
			break;

		case L2CAP_CONF_FLUSH_TO:
2307
			chan->flush_to = val;
2308
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2309
							2, chan->flush_to);
2310 2311 2312 2313 2314 2315
			break;

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

2316
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2317
							rfc.mode != chan->mode)
2318 2319
				return -ECONNREFUSED;

2320
			chan->fcs = 0;
2321 2322 2323 2324

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2325 2326 2327 2328 2329 2330 2331

		case L2CAP_CONF_EWS:
			chan->tx_win = min_t(u16, val,
						L2CAP_DEFAULT_EXT_WINDOW);
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS,
							2, chan->tx_win);
			break;
2332 2333 2334
		}
	}

2335
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2336 2337
		return -ECONNREFUSED;

2338
	chan->mode = rfc.mode;
2339

2340 2341 2342
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2343 2344 2345
			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);
2346 2347
			break;
		case L2CAP_MODE_STREAMING:
2348
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2349 2350 2351
		}
	}

2352
	req->dcid   = cpu_to_le16(chan->dcid);
2353 2354 2355 2356 2357
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2358
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2359 2360 2361 2362
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2363
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2364

2365
	rsp->scid   = cpu_to_le16(chan->dcid);
2366
	rsp->result = cpu_to_le16(result);
2367
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2368 2369 2370 2371

	return ptr - data;
}

2372
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2373 2374
{
	struct l2cap_conn_rsp rsp;
2375
	struct l2cap_conn *conn = chan->conn;
2376 2377
	u8 buf[128];

2378 2379
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2380 2381 2382 2383 2384
	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);

2385
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2386 2387 2388 2389 2390 2391 2392
		return;

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

2393
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2394 2395 2396 2397 2398
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2399
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2400

2401
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417
		return;

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

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

done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2418 2419 2420
		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);
2421 2422
		break;
	case L2CAP_MODE_STREAMING:
2423
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2424 2425 2426
	}
}

2427 2428
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2429
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2430

2431
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2432 2433 2434 2435 2436
		return 0;

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

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2439
		conn->info_ident = 0;
2440

2441 2442 2443 2444 2445 2446
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2447 2448 2449 2450
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;
2451
	struct l2cap_chan *chan = NULL, *pchan;
2452
	struct sock *parent, *sk = NULL;
2453
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2454 2455

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2456
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2457 2458 2459 2460

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

	/* Check if we have socket listening on psm */
2461 2462
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2463 2464 2465 2466
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2467 2468
	parent = pchan->sk;

2469 2470
	bh_lock_sock(parent);

2471 2472 2473
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2474
		conn->disc_reason = 0x05;
2475 2476 2477 2478
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2479 2480 2481 2482
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2483
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2484 2485 2486
		goto response;
	}

2487 2488
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2489 2490
		goto response;

2491 2492
	sk = chan->sk;

2493
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2494 2495

	/* Check if we already have channel with that dcid */
2496 2497
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2498
		sock_set_flag(sk, SOCK_ZAPPED);
2499
		chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2500 2501 2502 2503 2504 2505 2506
		goto response;
	}

	hci_conn_hold(conn->hcon);

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

2510 2511
	bt_accept_enqueue(parent, sk);

2512 2513
	__l2cap_chan_add(conn, chan);

2514
	dcid = chan->scid;
L
Linus Torvalds 已提交
2515

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

2518
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2519

2520
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2521
		if (l2cap_check_security(chan)) {
2522
			if (bt_sk(sk)->defer_setup) {
2523
				l2cap_state_change(chan, BT_CONNECT2);
2524 2525 2526 2527
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
2528
				l2cap_state_change(chan, BT_CONFIG);
2529 2530 2531
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2532
		} else {
2533
			l2cap_state_change(chan, BT_CONNECT2);
2534 2535 2536 2537
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
2538
		l2cap_state_change(chan, BT_CONNECT2);
2539 2540
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2541 2542
	}

2543
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2544 2545 2546 2547 2548

response:
	bh_unlock_sock(parent);

sendresp:
2549 2550 2551 2552
	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 已提交
2553
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568

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

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

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

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

2569
	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2570 2571
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2572
		set_bit(CONF_REQ_SENT, &chan->conf_state);
2573
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2574 2575
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2576 2577
	}

L
Linus Torvalds 已提交
2578 2579 2580 2581 2582 2583 2584
	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;
2585
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596
	struct sock *sk;
	u8 req[128];

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

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

	if (scid) {
2597
		chan = l2cap_get_chan_by_scid(conn, scid);
2598
		if (!chan)
2599
			return -EFAULT;
L
Linus Torvalds 已提交
2600
	} else {
2601
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2602
		if (!chan)
2603
			return -EFAULT;
L
Linus Torvalds 已提交
2604 2605
	}

2606 2607
	sk = chan->sk;

L
Linus Torvalds 已提交
2608 2609
	switch (result) {
	case L2CAP_CR_SUCCESS:
2610
		l2cap_state_change(chan, BT_CONFIG);
2611
		chan->ident = 0;
2612
		chan->dcid = dcid;
2613
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2614

2615
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2616 2617
			break;

L
Linus Torvalds 已提交
2618
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2619 2620
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2621 2622 2623
		break;

	case L2CAP_CR_PEND:
2624
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2625 2626 2627
		break;

	default:
2628 2629
		/* don't delete l2cap channel if sk is owned by user */
		if (sock_owned_by_user(sk)) {
2630
			l2cap_state_change(chan, BT_DISCONN);
2631 2632
			__clear_chan_timer(chan);
			__set_chan_timer(chan, HZ / 5);
2633 2634 2635
			break;
		}

2636
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2637 2638 2639 2640 2641 2642 2643
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2644
static inline void set_default_fcs(struct l2cap_chan *chan)
2645 2646 2647 2648
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2649
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2650
		chan->fcs = L2CAP_FCS_NONE;
2651
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2652
		chan->fcs = L2CAP_FCS_CRC16;
2653 2654
}

2655
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2656 2657 2658 2659
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2660
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2661
	struct sock *sk;
2662
	int len;
L
Linus Torvalds 已提交
2663 2664 2665 2666 2667 2668

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

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

2669
	chan = l2cap_get_chan_by_scid(conn, dcid);
2670
	if (!chan)
L
Linus Torvalds 已提交
2671 2672
		return -ENOENT;

2673 2674
	sk = chan->sk;

2675
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2676 2677 2678 2679 2680
		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);
2681 2682 2683

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2684
		goto unlock;
2685
	}
2686

2687
	/* Reject if config buffer is too small. */
2688
	len = cmd_len - sizeof(*req);
2689
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2690
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2691
				l2cap_build_conf_rsp(chan, rsp,
2692 2693 2694 2695 2696
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2697 2698
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2699 2700 2701 2702

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2703
				l2cap_build_conf_rsp(chan, rsp,
2704
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2705 2706 2707 2708
		goto unlock;
	}

	/* Complete config. */
2709
	len = l2cap_parse_conf_req(chan, rsp);
2710
	if (len < 0) {
2711
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2712
		goto unlock;
2713
	}
L
Linus Torvalds 已提交
2714

2715
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2716
	chan->num_conf_rsp++;
2717 2718

	/* Reset config buffer. */
2719
	chan->conf_len = 0;
2720

2721
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2722 2723
		goto unlock;

2724
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2725
		set_default_fcs(chan);
2726

2727
		l2cap_state_change(chan, BT_CONNECTED);
2728

2729 2730
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2731
		skb_queue_head_init(&chan->tx_q);
2732
		if (chan->mode == L2CAP_MODE_ERTM)
2733
			l2cap_ertm_init(chan);
2734

L
Linus Torvalds 已提交
2735
		l2cap_chan_ready(sk);
2736 2737 2738
		goto unlock;
	}

2739
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2740
		u8 buf[64];
L
Linus Torvalds 已提交
2741
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2742 2743
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754
	}

unlock:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
	u16 scid, flags, result;
2755
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2756
	struct sock *sk;
2757
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2758 2759 2760 2761 2762

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

2763 2764
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2765

2766
	chan = l2cap_get_chan_by_scid(conn, scid);
2767
	if (!chan)
L
Linus Torvalds 已提交
2768 2769
		return 0;

2770 2771
	sk = chan->sk;

L
Linus Torvalds 已提交
2772 2773
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2774
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2775 2776 2777
		break;

	case L2CAP_CONF_UNACCEPT:
2778
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2779 2780
			char req[64];

2781
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2782
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2783 2784 2785
				goto done;
			}

2786 2787
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2788 2789
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2790
			if (len < 0) {
2791
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2792 2793 2794 2795 2796
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2797
			chan->num_conf_req++;
2798 2799 2800
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2801 2802
		}

2803
	default:
2804
		sk->sk_err = ECONNRESET;
2805
		__set_chan_timer(chan, HZ * 5);
2806
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2807 2808 2809 2810 2811 2812
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

2815
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2816
		set_default_fcs(chan);
2817

2818
		l2cap_state_change(chan, BT_CONNECTED);
2819 2820
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2821
		skb_queue_head_init(&chan->tx_q);
2822
		if (chan->mode ==  L2CAP_MODE_ERTM)
2823
			l2cap_ertm_init(chan);
2824

L
Linus Torvalds 已提交
2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837
		l2cap_chan_ready(sk);
	}

done:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
	struct l2cap_disconn_rsp rsp;
	u16 dcid, scid;
2838
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2839 2840 2841 2842 2843 2844 2845
	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);

2846
	chan = l2cap_get_chan_by_scid(conn, dcid);
2847
	if (!chan)
L
Linus Torvalds 已提交
2848 2849
		return 0;

2850 2851
	sk = chan->sk;

2852 2853
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2854 2855 2856 2857
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2858 2859
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
2860
		l2cap_state_change(chan, BT_DISCONN);
2861 2862
		__clear_chan_timer(chan);
		__set_chan_timer(chan, HZ / 5);
2863 2864 2865 2866
		bh_unlock_sock(sk);
		return 0;
	}

2867
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2868 2869
	bh_unlock_sock(sk);

2870
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2871 2872 2873 2874 2875 2876 2877
	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;
2878
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2879 2880 2881 2882 2883 2884 2885
	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);

2886
	chan = l2cap_get_chan_by_scid(conn, scid);
2887
	if (!chan)
L
Linus Torvalds 已提交
2888 2889
		return 0;

2890 2891
	sk = chan->sk;

2892 2893
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
2894
		l2cap_state_change(chan,BT_DISCONN);
2895 2896
		__clear_chan_timer(chan);
		__set_chan_timer(chan, HZ / 5);
2897 2898 2899 2900
		bh_unlock_sock(sk);
		return 0;
	}

2901
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2902 2903
	bh_unlock_sock(sk);

2904
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916
	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);

2917 2918
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2919
		u32 feat_mask = l2cap_feat_mask;
2920 2921 2922
		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);
2923
		if (!disable_ertm)
2924 2925
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2926
		if (enable_hs)
2927 2928
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
2929

2930
		put_unaligned_le32(feat_mask, rsp->data);
2931 2932
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2933 2934 2935 2936 2937 2938 2939 2940
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
		memcpy(buf + 4, l2cap_fixed_chan, 8);
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2941 2942 2943 2944 2945 2946 2947
	} 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 已提交
2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961

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

2962 2963 2964 2965 2966
	/* 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;

2967 2968
	del_timer(&conn->info_timer);

2969 2970 2971 2972 2973 2974 2975 2976 2977
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2978
	if (type == L2CAP_IT_FEAT_MASK) {
2979
		conn->feat_mask = get_unaligned_le32(rsp->data);
2980

2981
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995
			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) {
2996
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2997
		conn->info_ident = 0;
2998 2999 3000

		l2cap_conn_start(conn);
	}
3001

L
Linus Torvalds 已提交
3002 3003 3004
	return 0;
}

3005
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032
							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;
3033
	int err;
3034 3035 3036 3037 3038 3039 3040 3041 3042

	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;
3043 3044
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3045 3046 3047 3048 3049 3050 3051
	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));
3052 3053 3054

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3055 3056 3057 3058 3059 3060 3061
		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);

3062 3063 3064
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3065 3066 3067
	return 0;
}

3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133
static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
{
	int err = 0;

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

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

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

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

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

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

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

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

	case L2CAP_ECHO_RSP:
		break;

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

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

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

	return err;
}

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

	case L2CAP_CONN_PARAM_UPDATE_REQ:
3134
		return l2cap_conn_param_update_req(conn, cmd, data);
3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146

	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 已提交
3147 3148 3149 3150
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3151
	int err;
L
Linus Torvalds 已提交
3152 3153 3154 3155

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3156
		u16 cmd_len;
L
Linus Torvalds 已提交
3157 3158 3159 3160
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3161
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3162

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

3165
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3166 3167 3168 3169
			BT_DBG("corrupted command");
			break;
		}

3170 3171 3172 3173
		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 已提交
3174 3175

		if (err) {
3176
			struct l2cap_cmd_rej_unk rej;
3177 3178

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

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

3185 3186
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3187 3188 3189 3190 3191
	}

	kfree_skb(skb);
}

3192
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3193 3194
{
	u16 our_fcs, rcv_fcs;
3195 3196 3197 3198 3199 3200
	int hdr_size;

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

3202
	if (chan->fcs == L2CAP_FCS_CRC16) {
3203
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3204 3205 3206 3207
		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)
3208
			return -EBADMSG;
3209 3210 3211 3212
	}
	return 0;
}

3213
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3214
{
3215
	u32 control = 0;
3216

3217
	chan->frames_sent = 0;
3218

3219
	control |= __set_reqseq(chan, chan->buffer_seq);
3220

3221
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3222
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3223
		l2cap_send_sframe(chan, control);
3224
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3225 3226
	}

3227
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3228
		l2cap_retransmit_frames(chan);
3229

3230
	l2cap_ertm_send(chan);
3231

3232
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3233
			chan->frames_sent == 0) {
3234
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3235
		l2cap_send_sframe(chan, control);
3236 3237 3238
	}
}

3239
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3240 3241
{
	struct sk_buff *next_skb;
3242
	int tx_seq_offset, next_tx_seq_offset;
3243 3244 3245 3246

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

3247
	next_skb = skb_peek(&chan->srej_q);
3248
	if (!next_skb) {
3249
		__skb_queue_tail(&chan->srej_q, skb);
3250
		return 0;
3251 3252
	}

3253
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3254

3255
	do {
3256 3257 3258
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3259 3260
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3261 3262

		if (next_tx_seq_offset > tx_seq_offset) {
3263
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3264
			return 0;
3265 3266
		}

3267
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3268 3269
			break;

3270
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3271

3272
	__skb_queue_tail(&chan->srej_q, skb);
3273 3274

	return 0;
3275 3276
}

3277 3278
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3279
{
3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295
	/* 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;
}

3296
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3297 3298
{
	int err = -EINVAL;
3299

3300 3301
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3302 3303
		if (chan->sdu)
			break;
3304

3305 3306
		err = chan->ops->recv(chan->data, skb);
		break;
3307

3308
	case L2CAP_SAR_START:
3309 3310
		if (chan->sdu)
			break;
3311

3312
		chan->sdu_len = get_unaligned_le16(skb->data);
3313
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3314

3315 3316 3317 3318
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3319

3320 3321
		if (skb->len >= chan->sdu_len)
			break;
3322

3323 3324
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3325

3326 3327
		skb = NULL;
		err = 0;
3328 3329
		break;

3330
	case L2CAP_SAR_CONTINUE:
3331
		if (!chan->sdu)
3332
			break;
3333

3334 3335 3336
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3337

3338 3339
		if (chan->sdu->len >= chan->sdu_len)
			break;
3340

3341
		err = 0;
3342 3343
		break;

3344
	case L2CAP_SAR_END:
3345
		if (!chan->sdu)
3346
			break;
3347

3348 3349 3350
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3351

3352 3353
		if (chan->sdu->len != chan->sdu_len)
			break;
3354

3355
		err = chan->ops->recv(chan->data, chan->sdu);
3356

3357 3358 3359 3360 3361
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3362
		}
3363 3364 3365
		break;
	}

3366 3367 3368 3369 3370 3371 3372
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3373

3374
	return err;
3375 3376
}

3377
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3378
{
3379
	u32 control;
3380

3381
	BT_DBG("chan %p, Enter local busy", chan);
3382

3383 3384
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3385
	control = __set_reqseq(chan, chan->buffer_seq);
3386
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3387 3388 3389 3390 3391 3392 3393 3394 3395
	l2cap_send_sframe(chan, control);

	set_bit(CONN_RNR_SENT, &chan->conn_state);

	__clear_ack_timer(chan);
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
3396
	u32 control;
3397

3398
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3399 3400
		goto done;

3401
	control = __set_reqseq(chan, chan->buffer_seq);
3402
	control |= __set_ctrl_poll(chan);
3403
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3404
	l2cap_send_sframe(chan, control);
3405
	chan->retry_count = 1;
3406

3407 3408
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3409

3410
	set_bit(CONN_WAIT_F, &chan->conn_state);
3411 3412

done:
3413 3414
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3415

3416
	BT_DBG("chan %p, Exit local busy", chan);
3417 3418
}

3419
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3420
{
3421 3422 3423 3424 3425
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3426 3427 3428
	}
}

3429
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3430 3431
{
	struct sk_buff *skb;
3432
	u32 control;
3433

3434 3435 3436 3437
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3438 3439 3440
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3441
		skb = skb_dequeue(&chan->srej_q);
3442
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3443
		err = l2cap_reassemble_sdu(chan, skb, control);
3444 3445 3446 3447 3448 3449

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

3450 3451
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3452 3453 3454
	}
}

3455
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3456 3457
{
	struct srej_list *l, *tmp;
3458
	u32 control;
3459

3460
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3461 3462 3463 3464 3465
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
3466
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3467
		control |= __set_reqseq(chan, l->tx_seq);
3468
		l2cap_send_sframe(chan, control);
3469
		list_del(&l->list);
3470
		list_add_tail(&l->list, &chan->srej_l);
3471 3472 3473
	}
}

3474
static void l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3475 3476
{
	struct srej_list *new;
3477
	u32 control;
3478

3479
	while (tx_seq != chan->expected_tx_seq) {
3480
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3481
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3482
		l2cap_send_sframe(chan, control);
3483 3484

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3485
		new->tx_seq = chan->expected_tx_seq;
3486 3487 3488

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

3489
		list_add_tail(&new->list, &chan->srej_l);
3490
	}
3491 3492

	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3493 3494
}

3495
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3496
{
3497
	u16 tx_seq = __get_txseq(chan, rx_control);
3498
	u16 req_seq = __get_reqseq(chan, rx_control);
3499
	u8 sar = __get_ctrl_sar(chan, rx_control);
3500
	int tx_seq_offset, expected_tx_seq_offset;
3501
	int num_to_ack = (chan->tx_win/6) + 1;
3502 3503
	int err = 0;

3504
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3505
							tx_seq, rx_control);
3506

3507
	if (__is_ctrl_final(chan, rx_control) &&
3508
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3509
		__clear_monitor_timer(chan);
3510
		if (chan->unacked_frames > 0)
3511
			__set_retrans_timer(chan);
3512
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3513 3514
	}

3515 3516
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3517

3518
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3519 3520

	/* invalid tx_seq */
3521
	if (tx_seq_offset >= chan->tx_win) {
3522
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3523 3524 3525
		goto drop;
	}

3526
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
3527 3528
		goto drop;

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

3532
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3533
		struct srej_list *first;
3534

3535
		first = list_first_entry(&chan->srej_l,
3536 3537
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3538
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3539
			l2cap_check_srej_gap(chan, tx_seq);
3540 3541 3542 3543

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

3544
			if (list_empty(&chan->srej_l)) {
3545
				chan->buffer_seq = chan->buffer_seq_srej;
3546
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3547
				l2cap_send_ack(chan);
3548
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3549 3550 3551
			}
		} else {
			struct srej_list *l;
3552 3553

			/* duplicated tx_seq */
3554
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3555
				goto drop;
3556

3557
			list_for_each_entry(l, &chan->srej_l, list) {
3558
				if (l->tx_seq == tx_seq) {
3559
					l2cap_resend_srejframe(chan, tx_seq);
3560 3561 3562
					return 0;
				}
			}
3563
			l2cap_send_srejframe(chan, tx_seq);
3564 3565
		}
	} else {
3566 3567
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
3568 3569 3570 3571 3572

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

3573
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
3574

3575
		BT_DBG("chan %p, Enter SREJ", chan);
3576

3577
		INIT_LIST_HEAD(&chan->srej_l);
3578
		chan->buffer_seq_srej = chan->buffer_seq;
3579

3580
		__skb_queue_head_init(&chan->srej_q);
3581
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3582

3583
		set_bit(CONN_SEND_PBIT, &chan->conn_state);
3584

3585
		l2cap_send_srejframe(chan, tx_seq);
3586

3587
		__clear_ack_timer(chan);
3588
	}
3589 3590
	return 0;

3591
expected:
3592
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3593

3594
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3595 3596
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3597
		__skb_queue_tail(&chan->srej_q, skb);
3598 3599 3600
		return 0;
	}

3601
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
3602 3603
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

3604 3605 3606 3607
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
3608

3609
	if (__is_ctrl_final(chan, rx_control)) {
3610
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3611
			l2cap_retransmit_frames(chan);
3612 3613
	}

3614
	__set_ack_timer(chan);
3615

3616 3617
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3618
		l2cap_send_ack(chan);
3619

3620
	return 0;
3621 3622 3623 3624

drop:
	kfree_skb(skb);
	return 0;
3625 3626
}

3627
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
3628
{
3629
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
3630
				__get_reqseq(chan, rx_control), rx_control);
3631

3632
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
3633
	l2cap_drop_acked_frames(chan);
3634

3635
	if (__is_ctrl_poll(chan, rx_control)) {
3636 3637 3638
		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) &&
3639
					(chan->unacked_frames > 0))
3640
				__set_retrans_timer(chan);
3641

3642
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3643
			l2cap_send_srejtail(chan);
3644
		} else {
3645
			l2cap_send_i_or_rr_or_rnr(chan);
3646
		}
3647

3648
	} else if (__is_ctrl_final(chan, rx_control)) {
3649
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3650

3651
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3652
			l2cap_retransmit_frames(chan);
3653

3654
	} else {
3655
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3656
				(chan->unacked_frames > 0))
3657
			__set_retrans_timer(chan);
3658

3659 3660
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
3661
			l2cap_send_ack(chan);
3662
		else
3663
			l2cap_ertm_send(chan);
3664 3665
	}
}
3666

3667
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
3668
{
3669
	u16 tx_seq = __get_reqseq(chan, rx_control);
3670

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

3673
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3674

3675 3676
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3677

3678
	if (__is_ctrl_final(chan, rx_control)) {
3679
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3680
			l2cap_retransmit_frames(chan);
3681
	} else {
3682
		l2cap_retransmit_frames(chan);
3683

3684 3685
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
3686 3687
	}
}
3688
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
3689
{
3690
	u16 tx_seq = __get_reqseq(chan, rx_control);
3691

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

3694
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3695

3696
	if (__is_ctrl_poll(chan, rx_control)) {
3697 3698
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3699

3700
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
3701
		l2cap_retransmit_one_frame(chan, tx_seq);
3702

3703
		l2cap_ertm_send(chan);
3704

3705
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3706
			chan->srej_save_reqseq = tx_seq;
3707
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
3708
		}
3709
	} else if (__is_ctrl_final(chan, rx_control)) {
3710
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
3711
				chan->srej_save_reqseq == tx_seq)
3712
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
3713
		else
3714
			l2cap_retransmit_one_frame(chan, tx_seq);
3715
	} else {
3716
		l2cap_retransmit_one_frame(chan, tx_seq);
3717
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3718
			chan->srej_save_reqseq = tx_seq;
3719
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
3720
		}
3721 3722 3723
	}
}

3724
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
3725
{
3726
	u16 tx_seq = __get_reqseq(chan, rx_control);
3727

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

3730
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3731 3732
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3733

3734
	if (__is_ctrl_poll(chan, rx_control))
3735
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
3736

3737
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3738
		__clear_retrans_timer(chan);
3739
		if (__is_ctrl_poll(chan, rx_control))
3740
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3741
		return;
3742
	}
3743

3744
	if (__is_ctrl_poll(chan, rx_control)) {
3745
		l2cap_send_srejtail(chan);
3746 3747 3748 3749
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
3750 3751
}

3752
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3753
{
3754
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
3755

3756
	if (__is_ctrl_final(chan, rx_control) &&
3757
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3758
		__clear_monitor_timer(chan);
3759
		if (chan->unacked_frames > 0)
3760
			__set_retrans_timer(chan);
3761
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3762 3763
	}

3764 3765
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
3766
		l2cap_data_channel_rrframe(chan, rx_control);
3767 3768
		break;

3769
	case L2CAP_SUPER_REJ:
3770
		l2cap_data_channel_rejframe(chan, rx_control);
3771
		break;
3772

3773
	case L2CAP_SUPER_SREJ:
3774
		l2cap_data_channel_srejframe(chan, rx_control);
3775 3776
		break;

3777
	case L2CAP_SUPER_RNR:
3778
		l2cap_data_channel_rnrframe(chan, rx_control);
3779 3780 3781
		break;
	}

3782
	kfree_skb(skb);
3783 3784 3785
	return 0;
}

3786 3787
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3788
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3789
	u32 control;
3790
	u16 req_seq;
3791 3792
	int len, next_tx_seq_offset, req_seq_offset;

3793 3794
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
3795 3796 3797 3798 3799 3800 3801
	len = skb->len;

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

3805
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
3806
		len -= L2CAP_SDULEN_SIZE;
3807

3808
	if (chan->fcs == L2CAP_FCS_CRC16)
3809
		len -= L2CAP_FCS_SIZE;
3810

3811
	if (len > chan->mps) {
3812
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3813 3814 3815
		goto drop;
	}

3816
	req_seq = __get_reqseq(chan, control);
3817

3818 3819 3820 3821
	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);
3822 3823 3824

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3825
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3826 3827 3828
		goto drop;
	}

3829
	if (!__is_sframe(chan, control)) {
3830
		if (len < 0) {
3831
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3832 3833 3834
			goto drop;
		}

3835
		l2cap_data_channel_iframe(chan, control, skb);
3836 3837 3838
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3839
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3840 3841 3842
			goto drop;
		}

3843
		l2cap_data_channel_sframe(chan, control, skb);
3844 3845 3846 3847 3848 3849 3850 3851 3852
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3853 3854
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3855
	struct l2cap_chan *chan;
3856
	struct sock *sk = NULL;
3857
	u32 control;
3858
	u16 tx_seq;
3859
	int len;
L
Linus Torvalds 已提交
3860

3861
	chan = l2cap_get_chan_by_scid(conn, cid);
3862
	if (!chan) {
L
Linus Torvalds 已提交
3863 3864 3865 3866
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3867
	sk = chan->sk;
3868

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

3871
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
3872 3873
		goto drop;

3874
	switch (chan->mode) {
3875 3876 3877 3878 3879
	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 已提交
3880

3881
		if (chan->imtu < skb->len)
3882
			goto drop;
L
Linus Torvalds 已提交
3883

3884
		if (!chan->ops->recv(chan->data, skb))
3885 3886 3887 3888
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3889 3890
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3891
		} else {
3892
			if (sk_add_backlog(sk, skb))
3893 3894
				goto drop;
		}
3895

3896
		goto done;
3897

3898
	case L2CAP_MODE_STREAMING:
3899 3900
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
3901 3902
		len = skb->len;

3903
		if (l2cap_check_fcs(chan, skb))
3904 3905
			goto drop;

3906
		if (__is_sar_start(chan, control))
3907
			len -= L2CAP_SDULEN_SIZE;
3908

3909
		if (chan->fcs == L2CAP_FCS_CRC16)
3910
			len -= L2CAP_FCS_SIZE;
3911

3912
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
3913 3914
			goto drop;

3915
		tx_seq = __get_txseq(chan, control);
3916

3917 3918 3919 3920 3921 3922
		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;
3923

3924 3925 3926
			/* TODO: Notify userland of missing data */
		}

3927
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
3928 3929 3930

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3931 3932 3933

		goto done;

3934
	default:
3935
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3936 3937
		break;
	}
L
Linus Torvalds 已提交
3938 3939 3940 3941 3942

drop:
	kfree_skb(skb);

done:
3943 3944 3945
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3946 3947 3948
	return 0;
}

3949
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3950
{
3951
	struct sock *sk = NULL;
3952
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3953

3954 3955
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
3956 3957
		goto drop;

3958 3959
	sk = chan->sk;

3960 3961
	bh_lock_sock(sk);

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

3964
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
3965 3966
		goto drop;

3967
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
3968 3969
		goto drop;

3970
	if (!chan->ops->recv(chan->data, skb))
L
Linus Torvalds 已提交
3971 3972 3973 3974 3975 3976
		goto done;

drop:
	kfree_skb(skb);

done:
3977 3978
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3979 3980 3981
	return 0;
}

3982 3983
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
3984
	struct sock *sk = NULL;
3985
	struct l2cap_chan *chan;
3986

3987 3988
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
3989 3990
		goto drop;

3991 3992
	sk = chan->sk;

3993 3994 3995 3996
	bh_lock_sock(sk);

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

3997
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3998 3999
		goto drop;

4000
	if (chan->imtu < skb->len)
4001 4002
		goto drop;

4003
	if (!chan->ops->recv(chan->data, skb))
4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014
		goto done;

drop:
	kfree_skb(skb);

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

L
Linus Torvalds 已提交
4015 4016 4017
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4018 4019
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4020 4021 4022 4023 4024

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

4025 4026 4027 4028 4029
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4030 4031 4032
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4033
	case L2CAP_CID_LE_SIGNALING:
4034
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4035 4036 4037
		l2cap_sig_channel(conn, skb);
		break;

4038
	case L2CAP_CID_CONN_LESS:
4039
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
4040 4041 4042 4043
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4044 4045 4046 4047
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4048 4049 4050 4051 4052
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

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

	if (type != ACL_LINK)
4067
		return -EINVAL;
L
Linus Torvalds 已提交
4068 4069 4070 4071

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

	/* Find listening sockets and check their link_mode */
4072 4073 4074
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4075

4076
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4077 4078 4079
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4080
			lm1 |= HCI_LM_ACCEPT;
4081
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4082
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4083
			exact++;
4084 4085
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4086
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4087 4088
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4089
	}
4090
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4091 4092 4093 4094 4095 4096

	return exact ? lm1 : lm2;
}

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

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

4101
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4102
		return -EINVAL;
L
Linus Torvalds 已提交
4103 4104 4105 4106 4107

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
4108
	} else
4109
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4110 4111 4112 4113

	return 0;
}

4114 4115 4116 4117 4118 4119
static int l2cap_disconn_ind(struct hci_conn *hcon)
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4120
	if ((hcon->type != ACL_LINK && hcon->type != LE_LINK) || !conn)
4121 4122 4123 4124 4125 4126
		return 0x13;

	return conn->disc_reason;
}

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

4130
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4131
		return -EINVAL;
L
Linus Torvalds 已提交
4132

4133
	l2cap_conn_del(hcon, bt_to_errno(reason));
4134

L
Linus Torvalds 已提交
4135 4136 4137
	return 0;
}

4138
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4139
{
4140
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4141 4142
		return;

4143
	if (encrypt == 0x00) {
4144
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4145 4146
			__clear_chan_timer(chan);
			__set_chan_timer(chan, HZ * 5);
4147
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4148
			l2cap_chan_close(chan, ECONNREFUSED);
4149
	} else {
4150
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4151
			__clear_chan_timer(chan);
4152 4153 4154
	}
}

4155
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4156
{
4157
	struct l2cap_conn *conn = hcon->l2cap_data;
4158
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4159

4160
	if (!conn)
L
Linus Torvalds 已提交
4161
		return 0;
4162

L
Linus Torvalds 已提交
4163 4164
	BT_DBG("conn %p", conn);

4165 4166 4167 4168 4169
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
		del_timer(&conn->security_timer);
	}

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

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

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

4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188
		BT_DBG("chan->scid %d", chan->scid);

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

			bh_unlock_sock(sk);
			continue;
		}

4189
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4190 4191 4192 4193
			bh_unlock_sock(sk);
			continue;
		}

4194 4195
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4196
			l2cap_check_encryption(chan, encrypt);
4197 4198 4199 4200
			bh_unlock_sock(sk);
			continue;
		}

4201
		if (chan->state == BT_CONNECT) {
4202 4203
			if (!status) {
				struct l2cap_conn_req req;
4204 4205
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4206

4207
				chan->ident = l2cap_get_ident(conn);
4208
				set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
4209

4210
				l2cap_send_cmd(conn, chan->ident,
4211 4212
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
4213 4214
				__clear_chan_timer(chan);
				__set_chan_timer(chan, HZ / 10);
4215
			}
4216
		} else if (chan->state == BT_CONNECT2) {
4217
			struct l2cap_conn_rsp rsp;
4218
			__u16 res, stat;
L
Linus Torvalds 已提交
4219

4220
			if (!status) {
4221 4222 4223 4224
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4225 4226
					if (parent)
						parent->sk_data_ready(parent, 0);
4227
				} else {
4228
					l2cap_state_change(chan, BT_CONFIG);
4229 4230 4231
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4232
			} else {
4233
				l2cap_state_change(chan, BT_DISCONN);
4234
				__set_chan_timer(chan, HZ / 10);
4235 4236
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4237 4238
			}

4239 4240
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4241 4242
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4243 4244
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4245
		}
L
Linus Torvalds 已提交
4246 4247 4248 4249

		bh_unlock_sock(sk);
	}

4250
	read_unlock(&conn->chan_lock);
4251

L
Linus Torvalds 已提交
4252 4253 4254 4255 4256 4257 4258
	return 0;
}

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

4259 4260 4261 4262
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4263 4264 4265 4266
		goto drop;

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

4267
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4268
		struct l2cap_hdr *hdr;
4269
		struct l2cap_chan *chan;
4270
		u16 cid;
L
Linus Torvalds 已提交
4271 4272 4273 4274 4275 4276 4277 4278 4279 4280
		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);
		}

4281 4282
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4283 4284 4285 4286 4287 4288 4289
			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;
4290
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306

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

4307
		chan = l2cap_get_chan_by_scid(conn, cid);
4308

4309 4310
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4311

4312
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4313 4314
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4315
							chan->imtu);
4316 4317 4318 4319
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4320
			bh_unlock_sock(sk);
4321
		}
4322

L
Linus Torvalds 已提交
4323
		/* Allocate skb for the complete frame (with header) */
4324 4325
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4326 4327
			goto drop;

4328
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4329
								skb->len);
L
Linus Torvalds 已提交
4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349
		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;
		}

4350
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4351
								skb->len);
L
Linus Torvalds 已提交
4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365
		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;
}

4366
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4367
{
4368
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4369

4370
	read_lock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4371

4372 4373
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4374

4375
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4376 4377
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4378
					c->state, __le16_to_cpu(c->psm),
4379 4380
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4381
}
L
Linus Torvalds 已提交
4382

4383
	read_unlock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4384

4385
	return 0;
L
Linus Torvalds 已提交
4386 4387
}

4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400
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 已提交
4401 4402 4403 4404 4405 4406 4407

static struct hci_proto l2cap_hci_proto = {
	.name		= "L2CAP",
	.id		= HCI_PROTO_L2CAP,
	.connect_ind	= l2cap_connect_ind,
	.connect_cfm	= l2cap_connect_cfm,
	.disconn_ind	= l2cap_disconn_ind,
4408
	.disconn_cfm	= l2cap_disconn_cfm,
4409
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4410 4411 4412
	.recv_acldata	= l2cap_recv_acldata
};

4413
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4414 4415
{
	int err;
4416

4417
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4418 4419 4420 4421 4422 4423 4424 4425 4426 4427
	if (err < 0)
		return err;

	err = hci_register_proto(&l2cap_hci_proto);
	if (err < 0) {
		BT_ERR("L2CAP protocol registration failed");
		bt_sock_unregister(BTPROTO_L2CAP);
		goto error;
	}

4428 4429 4430 4431 4432 4433
	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 已提交
4434 4435 4436 4437

	return 0;

error:
4438
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4439 4440 4441
	return err;
}

4442
void l2cap_exit(void)
L
Linus Torvalds 已提交
4443
{
4444
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4445 4446 4447 4448

	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4449
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4450 4451
}

4452 4453
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
4454 4455 4456

module_param(enable_hs, bool, 0644);
MODULE_PARM_DESC(enable_hs, "Enable High Speed");