l2cap_core.c 100.0 KB
Newer Older
1
/*
L
Linus Torvalds 已提交
2 3
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2000-2001 Qualcomm Incorporated
4
   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
5
   Copyright (C) 2010 Google Inc.
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 1993
	void *ptr = req->data;

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

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

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

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

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

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

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

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

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

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2037
		rfc.max_transmit    = chan->max_tx;
2038 2039
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2040
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
2041 2042
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2043

2044 2045 2046 2047 2048
		l2cap_txwin_setup(chan);

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

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

2052 2053 2054
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2055
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2056 2057
			break;

2058
		if (chan->fcs == L2CAP_FCS_NONE ||
2059
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2060 2061
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2062
		}
2063 2064 2065 2066

		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
								chan->tx_win);
2067 2068 2069 2070 2071 2072 2073 2074
		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;
2075
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
2076 2077
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2078

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

2082 2083 2084
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2085
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2086 2087
			break;

2088
		if (chan->fcs == L2CAP_FCS_NONE ||
2089
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2090 2091
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2092
		}
2093 2094
		break;
	}
L
Linus Torvalds 已提交
2095

2096
	req->dcid  = cpu_to_le16(chan->dcid);
2097
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2098 2099 2100 2101

	return ptr - data;
}

2102
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2103
{
2104 2105
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
2106 2107
	void *req = chan->conf_req;
	int len = chan->conf_len;
2108 2109
	int type, hint, olen;
	unsigned long val;
2110
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2111
	u16 mtu = L2CAP_DEFAULT_MTU;
2112
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
2113

2114
	BT_DBG("chan %p", chan);
2115

2116 2117
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2118

2119
		hint  = type & L2CAP_CONF_HINT;
2120
		type &= L2CAP_CONF_MASK;
2121 2122 2123

		switch (type) {
		case L2CAP_CONF_MTU:
2124
			mtu = val;
2125 2126 2127
			break;

		case L2CAP_CONF_FLUSH_TO:
2128
			chan->flush_to = val;
2129 2130 2131 2132 2133
			break;

		case L2CAP_CONF_QOS:
			break;

2134 2135 2136 2137 2138
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2139 2140
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2141
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2142 2143 2144

			break;

2145 2146 2147 2148 2149 2150
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;

			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2151
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2152 2153 2154
			chan->remote_tx_win = val;
			break;

2155 2156 2157 2158 2159 2160 2161 2162 2163 2164
		default:
			if (hint)
				break;

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

2165
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2166 2167
		goto done;

2168
	switch (chan->mode) {
2169 2170
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2171
		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2172
			chan->mode = l2cap_select_mode(rfc.mode,
2173
					chan->conn->feat_mask);
2174 2175 2176
			break;
		}

2177
		if (chan->mode != rfc.mode)
2178
			return -ECONNREFUSED;
2179

2180 2181 2182 2183
		break;
	}

done:
2184
	if (chan->mode != rfc.mode) {
2185
		result = L2CAP_CONF_UNACCEPT;
2186
		rfc.mode = chan->mode;
2187

2188
		if (chan->num_conf_rsp == 1)
2189 2190 2191 2192 2193 2194 2195
			return -ECONNREFUSED;

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


2196 2197 2198 2199
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2200 2201 2202
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2203
			chan->omtu = mtu;
2204
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2205
		}
2206
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2207

2208 2209
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2210
			chan->fcs = L2CAP_FCS_NONE;
2211
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2212 2213 2214
			break;

		case L2CAP_MODE_ERTM:
2215 2216 2217 2218 2219
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;

2220
			chan->remote_max_tx = rfc.max_transmit;
2221

2222 2223
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2224

2225
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2226

2227 2228 2229 2230
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2231

2232
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2233 2234 2235 2236

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

2237 2238 2239
			break;

		case L2CAP_MODE_STREAMING:
2240 2241
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
2242

2243
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
2244

2245
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2246 2247 2248 2249

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

2250 2251 2252
			break;

		default:
2253 2254
			result = L2CAP_CONF_UNACCEPT;

2255
			memset(&rfc, 0, sizeof(rfc));
2256
			rfc.mode = chan->mode;
2257
		}
2258

2259
		if (result == L2CAP_CONF_SUCCESS)
2260
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2261
	}
2262
	rsp->scid   = cpu_to_le16(chan->dcid);
2263 2264 2265 2266
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2267 2268
}

2269
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2270 2271 2272 2273 2274 2275 2276
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2277
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2278 2279 2280 2281 2282 2283 2284 2285

	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;
2286
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2287
			} else
2288 2289
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2290 2291 2292
			break;

		case L2CAP_CONF_FLUSH_TO:
2293
			chan->flush_to = val;
2294
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2295
							2, chan->flush_to);
2296 2297 2298 2299 2300 2301
			break;

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

2302
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2303
							rfc.mode != chan->mode)
2304 2305
				return -ECONNREFUSED;

2306
			chan->fcs = 0;
2307 2308 2309 2310

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2311 2312 2313 2314 2315 2316 2317

		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;
2318 2319 2320
		}
	}

2321
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2322 2323
		return -ECONNREFUSED;

2324
	chan->mode = rfc.mode;
2325

2326 2327 2328
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2329 2330 2331
			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);
2332 2333
			break;
		case L2CAP_MODE_STREAMING:
2334
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2335 2336 2337
		}
	}

2338
	req->dcid   = cpu_to_le16(chan->dcid);
2339 2340 2341 2342 2343
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2344
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2345 2346 2347 2348
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2349
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2350

2351
	rsp->scid   = cpu_to_le16(chan->dcid);
2352
	rsp->result = cpu_to_le16(result);
2353
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2354 2355 2356 2357

	return ptr - data;
}

2358
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2359 2360
{
	struct l2cap_conn_rsp rsp;
2361
	struct l2cap_conn *conn = chan->conn;
2362 2363
	u8 buf[128];

2364 2365
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2366 2367 2368 2369 2370
	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);

2371
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2372 2373 2374 2375 2376 2377 2378
		return;

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

2379
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2380 2381 2382 2383 2384
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2385
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2386

2387
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403
		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:
2404 2405 2406
		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);
2407 2408
		break;
	case L2CAP_MODE_STREAMING:
2409
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2410 2411 2412
	}
}

2413 2414
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2415
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2416

2417
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2418 2419 2420 2421 2422
		return 0;

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

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2425
		conn->info_ident = 0;
2426

2427 2428 2429 2430 2431 2432
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2433 2434 2435 2436
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;
2437
	struct l2cap_chan *chan = NULL, *pchan;
2438
	struct sock *parent, *sk = NULL;
2439
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2440 2441

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2442
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2443 2444 2445 2446

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

	/* Check if we have socket listening on psm */
2447 2448
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2449 2450 2451 2452
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2453 2454
	parent = pchan->sk;

2455 2456
	bh_lock_sock(parent);

2457 2458 2459
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2460
		conn->disc_reason = 0x05;
2461 2462 2463 2464
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2465 2466 2467 2468
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2469
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2470 2471 2472
		goto response;
	}

2473 2474
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2475 2476
		goto response;

2477 2478
	sk = chan->sk;

2479
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2480 2481

	/* Check if we already have channel with that dcid */
2482 2483
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2484
		sock_set_flag(sk, SOCK_ZAPPED);
2485
		chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2486 2487 2488 2489 2490 2491 2492
		goto response;
	}

	hci_conn_hold(conn->hcon);

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

2496 2497
	bt_accept_enqueue(parent, sk);

2498 2499
	__l2cap_chan_add(conn, chan);

2500
	dcid = chan->scid;
L
Linus Torvalds 已提交
2501

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

2504
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2505

2506
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2507
		if (l2cap_check_security(chan)) {
2508
			if (bt_sk(sk)->defer_setup) {
2509
				l2cap_state_change(chan, BT_CONNECT2);
2510 2511 2512 2513
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
2514
				l2cap_state_change(chan, BT_CONFIG);
2515 2516 2517
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2518
		} else {
2519
			l2cap_state_change(chan, BT_CONNECT2);
2520 2521 2522 2523
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
2524
		l2cap_state_change(chan, BT_CONNECT2);
2525 2526
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2527 2528
	}

2529
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2530 2531 2532 2533 2534

response:
	bh_unlock_sock(parent);

sendresp:
2535 2536 2537 2538
	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 已提交
2539
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554

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

2555
	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
2556 2557
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2558
		set_bit(CONF_REQ_SENT, &chan->conf_state);
2559
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2560 2561
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2562 2563
	}

L
Linus Torvalds 已提交
2564 2565 2566 2567 2568 2569 2570
	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;
2571
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582
	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) {
2583
		chan = l2cap_get_chan_by_scid(conn, scid);
2584
		if (!chan)
2585
			return -EFAULT;
L
Linus Torvalds 已提交
2586
	} else {
2587
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2588
		if (!chan)
2589
			return -EFAULT;
L
Linus Torvalds 已提交
2590 2591
	}

2592 2593
	sk = chan->sk;

L
Linus Torvalds 已提交
2594 2595
	switch (result) {
	case L2CAP_CR_SUCCESS:
2596
		l2cap_state_change(chan, BT_CONFIG);
2597
		chan->ident = 0;
2598
		chan->dcid = dcid;
2599
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2600

2601
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2602 2603
			break;

L
Linus Torvalds 已提交
2604
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2605 2606
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2607 2608 2609
		break;

	case L2CAP_CR_PEND:
2610
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2611 2612 2613
		break;

	default:
2614 2615
		/* don't delete l2cap channel if sk is owned by user */
		if (sock_owned_by_user(sk)) {
2616
			l2cap_state_change(chan, BT_DISCONN);
2617 2618
			__clear_chan_timer(chan);
			__set_chan_timer(chan, HZ / 5);
2619 2620 2621
			break;
		}

2622
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2623 2624 2625 2626 2627 2628 2629
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2630
static inline void set_default_fcs(struct l2cap_chan *chan)
2631 2632 2633 2634
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2635
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2636
		chan->fcs = L2CAP_FCS_NONE;
2637
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2638
		chan->fcs = L2CAP_FCS_CRC16;
2639 2640
}

2641
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2642 2643 2644 2645
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2646
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2647
	struct sock *sk;
2648
	int len;
L
Linus Torvalds 已提交
2649 2650 2651 2652 2653 2654

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

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

2655
	chan = l2cap_get_chan_by_scid(conn, dcid);
2656
	if (!chan)
L
Linus Torvalds 已提交
2657 2658
		return -ENOENT;

2659 2660
	sk = chan->sk;

2661
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2662 2663 2664 2665 2666
		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);
2667 2668 2669

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2670
		goto unlock;
2671
	}
2672

2673
	/* Reject if config buffer is too small. */
2674
	len = cmd_len - sizeof(*req);
2675
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2676
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2677
				l2cap_build_conf_rsp(chan, rsp,
2678 2679 2680 2681 2682
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2683 2684
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2685 2686 2687 2688

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2689
				l2cap_build_conf_rsp(chan, rsp,
2690
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2691 2692 2693 2694
		goto unlock;
	}

	/* Complete config. */
2695
	len = l2cap_parse_conf_req(chan, rsp);
2696
	if (len < 0) {
2697
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2698
		goto unlock;
2699
	}
L
Linus Torvalds 已提交
2700

2701
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2702
	chan->num_conf_rsp++;
2703 2704

	/* Reset config buffer. */
2705
	chan->conf_len = 0;
2706

2707
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2708 2709
		goto unlock;

2710
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2711
		set_default_fcs(chan);
2712

2713
		l2cap_state_change(chan, BT_CONNECTED);
2714

2715 2716
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2717
		skb_queue_head_init(&chan->tx_q);
2718
		if (chan->mode == L2CAP_MODE_ERTM)
2719
			l2cap_ertm_init(chan);
2720

L
Linus Torvalds 已提交
2721
		l2cap_chan_ready(sk);
2722 2723 2724
		goto unlock;
	}

2725
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2726
		u8 buf[64];
L
Linus Torvalds 已提交
2727
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2728 2729
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740
	}

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;
2741
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2742
	struct sock *sk;
2743
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2744 2745 2746 2747 2748

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

2749 2750
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2751

2752
	chan = l2cap_get_chan_by_scid(conn, scid);
2753
	if (!chan)
L
Linus Torvalds 已提交
2754 2755
		return 0;

2756 2757
	sk = chan->sk;

L
Linus Torvalds 已提交
2758 2759
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2760
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2761 2762 2763
		break;

	case L2CAP_CONF_UNACCEPT:
2764
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2765 2766
			char req[64];

2767
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2768
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2769 2770 2771
				goto done;
			}

2772 2773
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2774 2775
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2776
			if (len < 0) {
2777
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2778 2779 2780 2781 2782
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2783
			chan->num_conf_req++;
2784 2785 2786
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2787 2788
		}

2789
	default:
2790
		sk->sk_err = ECONNRESET;
2791
		__set_chan_timer(chan, HZ * 5);
2792
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2793 2794 2795 2796 2797 2798
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

2801
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2802
		set_default_fcs(chan);
2803

2804
		l2cap_state_change(chan, BT_CONNECTED);
2805 2806
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2807
		skb_queue_head_init(&chan->tx_q);
2808
		if (chan->mode ==  L2CAP_MODE_ERTM)
2809
			l2cap_ertm_init(chan);
2810

L
Linus Torvalds 已提交
2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823
		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;
2824
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2825 2826 2827 2828 2829 2830 2831
	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);

2832
	chan = l2cap_get_chan_by_scid(conn, dcid);
2833
	if (!chan)
L
Linus Torvalds 已提交
2834 2835
		return 0;

2836 2837
	sk = chan->sk;

2838 2839
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2840 2841 2842 2843
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2844 2845
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
2846
		l2cap_state_change(chan, BT_DISCONN);
2847 2848
		__clear_chan_timer(chan);
		__set_chan_timer(chan, HZ / 5);
2849 2850 2851 2852
		bh_unlock_sock(sk);
		return 0;
	}

2853
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2854 2855
	bh_unlock_sock(sk);

2856
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2857 2858 2859 2860 2861 2862 2863
	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;
2864
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2865 2866 2867 2868 2869 2870 2871
	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);

2872
	chan = l2cap_get_chan_by_scid(conn, scid);
2873
	if (!chan)
L
Linus Torvalds 已提交
2874 2875
		return 0;

2876 2877
	sk = chan->sk;

2878 2879
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
2880
		l2cap_state_change(chan,BT_DISCONN);
2881 2882
		__clear_chan_timer(chan);
		__set_chan_timer(chan, HZ / 5);
2883 2884 2885 2886
		bh_unlock_sock(sk);
		return 0;
	}

2887
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2888 2889
	bh_unlock_sock(sk);

2890
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902
	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);

2903 2904
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2905
		u32 feat_mask = l2cap_feat_mask;
2906 2907 2908
		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);
2909
		if (!disable_ertm)
2910 2911
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2912
		if (enable_hs)
2913 2914
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
2915

2916
		put_unaligned_le32(feat_mask, rsp->data);
2917 2918
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2919 2920 2921 2922 2923 2924 2925 2926
	} 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);
2927 2928 2929 2930 2931 2932 2933
	} 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 已提交
2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947

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

2948 2949 2950 2951 2952
	/* 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;

2953 2954
	del_timer(&conn->info_timer);

2955 2956 2957 2958 2959 2960 2961 2962 2963
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2964
	if (type == L2CAP_IT_FEAT_MASK) {
2965
		conn->feat_mask = get_unaligned_le32(rsp->data);
2966

2967
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981
			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) {
2982
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2983
		conn->info_ident = 0;
2984 2985 2986

		l2cap_conn_start(conn);
	}
2987

L
Linus Torvalds 已提交
2988 2989 2990
	return 0;
}

2991
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018
							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;
3019
	int err;
3020 3021 3022 3023 3024 3025 3026 3027 3028

	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;
3029 3030
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3031 3032 3033 3034 3035 3036 3037
	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));
3038 3039 3040

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3041 3042 3043 3044 3045 3046 3047
		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);

3048 3049 3050
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3051 3052 3053
	return 0;
}

3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 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
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:
3120
		return l2cap_conn_param_update_req(conn, cmd, data);
3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132

	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 已提交
3133 3134 3135 3136
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3137
	int err;
L
Linus Torvalds 已提交
3138 3139 3140 3141

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3142
		u16 cmd_len;
L
Linus Torvalds 已提交
3143 3144 3145 3146
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3147
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3148

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

3151
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3152 3153 3154 3155
			BT_DBG("corrupted command");
			break;
		}

3156 3157 3158 3159
		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 已提交
3160 3161

		if (err) {
3162
			struct l2cap_cmd_rej_unk rej;
3163 3164

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

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

3171 3172
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3173 3174 3175 3176 3177
	}

	kfree_skb(skb);
}

3178
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3179 3180
{
	u16 our_fcs, rcv_fcs;
3181 3182 3183 3184 3185 3186
	int hdr_size;

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

3188
	if (chan->fcs == L2CAP_FCS_CRC16) {
3189
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3190 3191 3192 3193
		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)
3194
			return -EBADMSG;
3195 3196 3197 3198
	}
	return 0;
}

3199
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3200
{
3201
	u32 control = 0;
3202

3203
	chan->frames_sent = 0;
3204

3205
	control |= __set_reqseq(chan, chan->buffer_seq);
3206

3207
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3208
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3209
		l2cap_send_sframe(chan, control);
3210
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3211 3212
	}

3213
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3214
		l2cap_retransmit_frames(chan);
3215

3216
	l2cap_ertm_send(chan);
3217

3218
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3219
			chan->frames_sent == 0) {
3220
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3221
		l2cap_send_sframe(chan, control);
3222 3223 3224
	}
}

3225
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3226 3227
{
	struct sk_buff *next_skb;
3228
	int tx_seq_offset, next_tx_seq_offset;
3229 3230 3231 3232

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

3233
	next_skb = skb_peek(&chan->srej_q);
3234
	if (!next_skb) {
3235
		__skb_queue_tail(&chan->srej_q, skb);
3236
		return 0;
3237 3238
	}

3239
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3240

3241
	do {
3242 3243 3244
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3245 3246
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3247 3248

		if (next_tx_seq_offset > tx_seq_offset) {
3249
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3250
			return 0;
3251 3252
		}

3253
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3254 3255
			break;

3256
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3257

3258
	__skb_queue_tail(&chan->srej_q, skb);
3259 3260

	return 0;
3261 3262
}

3263 3264
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3265
{
3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281
	/* 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;
}

3282
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3283 3284
{
	int err = -EINVAL;
3285

3286 3287
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3288 3289
		if (chan->sdu)
			break;
3290

3291 3292
		err = chan->ops->recv(chan->data, skb);
		break;
3293

3294
	case L2CAP_SAR_START:
3295 3296
		if (chan->sdu)
			break;
3297

3298
		chan->sdu_len = get_unaligned_le16(skb->data);
3299
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3300

3301 3302 3303 3304
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3305

3306 3307
		if (skb->len >= chan->sdu_len)
			break;
3308

3309 3310
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3311

3312 3313
		skb = NULL;
		err = 0;
3314 3315
		break;

3316
	case L2CAP_SAR_CONTINUE:
3317
		if (!chan->sdu)
3318
			break;
3319

3320 3321 3322
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3323

3324 3325
		if (chan->sdu->len >= chan->sdu_len)
			break;
3326

3327
		err = 0;
3328 3329
		break;

3330
	case L2CAP_SAR_END:
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 = chan->ops->recv(chan->data, chan->sdu);
3342

3343 3344 3345 3346 3347
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3348
		}
3349 3350 3351
		break;
	}

3352 3353 3354 3355 3356 3357 3358
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3359

3360
	return err;
3361 3362
}

3363
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3364
{
3365
	u32 control;
3366

3367
	BT_DBG("chan %p, Enter local busy", chan);
3368

3369 3370
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3371
	control = __set_reqseq(chan, chan->buffer_seq);
3372
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3373 3374 3375 3376 3377 3378 3379 3380 3381
	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)
{
3382
	u32 control;
3383

3384
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3385 3386
		goto done;

3387
	control = __set_reqseq(chan, chan->buffer_seq);
3388
	control |= __set_ctrl_poll(chan);
3389
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3390
	l2cap_send_sframe(chan, control);
3391
	chan->retry_count = 1;
3392

3393 3394
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3395

3396
	set_bit(CONN_WAIT_F, &chan->conn_state);
3397 3398

done:
3399 3400
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3401

3402
	BT_DBG("chan %p, Exit local busy", chan);
3403 3404
}

3405
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3406
{
3407 3408 3409 3410 3411
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3412 3413 3414
	}
}

3415
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3416 3417
{
	struct sk_buff *skb;
3418
	u32 control;
3419

3420 3421 3422 3423
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3424 3425 3426
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3427
		skb = skb_dequeue(&chan->srej_q);
3428
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3429
		err = l2cap_reassemble_sdu(chan, skb, control);
3430 3431 3432 3433 3434 3435

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

3436 3437
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3438 3439 3440
	}
}

3441
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3442 3443
{
	struct srej_list *l, *tmp;
3444
	u32 control;
3445

3446
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3447 3448 3449 3450 3451
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
3452
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3453
		control |= __set_reqseq(chan, l->tx_seq);
3454
		l2cap_send_sframe(chan, control);
3455
		list_del(&l->list);
3456
		list_add_tail(&l->list, &chan->srej_l);
3457 3458 3459
	}
}

3460
static void l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3461 3462
{
	struct srej_list *new;
3463
	u32 control;
3464

3465
	while (tx_seq != chan->expected_tx_seq) {
3466
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3467
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3468
		l2cap_send_sframe(chan, control);
3469 3470

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3471
		new->tx_seq = chan->expected_tx_seq;
3472 3473 3474

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

3475
		list_add_tail(&new->list, &chan->srej_l);
3476
	}
3477 3478

	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3479 3480
}

3481
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3482
{
3483
	u16 tx_seq = __get_txseq(chan, rx_control);
3484
	u16 req_seq = __get_reqseq(chan, rx_control);
3485
	u8 sar = __get_ctrl_sar(chan, rx_control);
3486
	int tx_seq_offset, expected_tx_seq_offset;
3487
	int num_to_ack = (chan->tx_win/6) + 1;
3488 3489
	int err = 0;

3490
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3491
							tx_seq, rx_control);
3492

3493
	if (__is_ctrl_final(chan, rx_control) &&
3494
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3495
		__clear_monitor_timer(chan);
3496
		if (chan->unacked_frames > 0)
3497
			__set_retrans_timer(chan);
3498
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3499 3500
	}

3501 3502
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3503

3504
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3505 3506

	/* invalid tx_seq */
3507
	if (tx_seq_offset >= chan->tx_win) {
3508
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3509 3510 3511
		goto drop;
	}

3512
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
3513 3514
		goto drop;

3515 3516 3517
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

3518
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3519
		struct srej_list *first;
3520

3521
		first = list_first_entry(&chan->srej_l,
3522 3523
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3524
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3525
			l2cap_check_srej_gap(chan, tx_seq);
3526 3527 3528 3529

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

3530
			if (list_empty(&chan->srej_l)) {
3531
				chan->buffer_seq = chan->buffer_seq_srej;
3532
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3533
				l2cap_send_ack(chan);
3534
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3535 3536 3537
			}
		} else {
			struct srej_list *l;
3538 3539

			/* duplicated tx_seq */
3540
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3541
				goto drop;
3542

3543
			list_for_each_entry(l, &chan->srej_l, list) {
3544
				if (l->tx_seq == tx_seq) {
3545
					l2cap_resend_srejframe(chan, tx_seq);
3546 3547 3548
					return 0;
				}
			}
3549
			l2cap_send_srejframe(chan, tx_seq);
3550 3551
		}
	} else {
3552 3553
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
3554 3555 3556 3557 3558

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

3559
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
3560

3561
		BT_DBG("chan %p, Enter SREJ", chan);
3562

3563
		INIT_LIST_HEAD(&chan->srej_l);
3564
		chan->buffer_seq_srej = chan->buffer_seq;
3565

3566
		__skb_queue_head_init(&chan->srej_q);
3567
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3568

3569
		set_bit(CONN_SEND_PBIT, &chan->conn_state);
3570

3571
		l2cap_send_srejframe(chan, tx_seq);
3572

3573
		__clear_ack_timer(chan);
3574
	}
3575 3576
	return 0;

3577
expected:
3578
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3579

3580
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3581 3582
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3583
		__skb_queue_tail(&chan->srej_q, skb);
3584 3585 3586
		return 0;
	}

3587
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
3588 3589
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

3590 3591 3592 3593
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
3594

3595
	if (__is_ctrl_final(chan, rx_control)) {
3596
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3597
			l2cap_retransmit_frames(chan);
3598 3599
	}

3600
	__set_ack_timer(chan);
3601

3602 3603
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3604
		l2cap_send_ack(chan);
3605

3606
	return 0;
3607 3608 3609 3610

drop:
	kfree_skb(skb);
	return 0;
3611 3612
}

3613
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
3614
{
3615
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
3616
				__get_reqseq(chan, rx_control), rx_control);
3617

3618
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
3619
	l2cap_drop_acked_frames(chan);
3620

3621
	if (__is_ctrl_poll(chan, rx_control)) {
3622 3623 3624
		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) &&
3625
					(chan->unacked_frames > 0))
3626
				__set_retrans_timer(chan);
3627

3628
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3629
			l2cap_send_srejtail(chan);
3630
		} else {
3631
			l2cap_send_i_or_rr_or_rnr(chan);
3632
		}
3633

3634
	} else if (__is_ctrl_final(chan, rx_control)) {
3635
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3636

3637
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3638
			l2cap_retransmit_frames(chan);
3639

3640
	} else {
3641
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3642
				(chan->unacked_frames > 0))
3643
			__set_retrans_timer(chan);
3644

3645 3646
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
3647
			l2cap_send_ack(chan);
3648
		else
3649
			l2cap_ertm_send(chan);
3650 3651
	}
}
3652

3653
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
3654
{
3655
	u16 tx_seq = __get_reqseq(chan, rx_control);
3656

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

3659
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3660

3661 3662
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3663

3664
	if (__is_ctrl_final(chan, rx_control)) {
3665
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3666
			l2cap_retransmit_frames(chan);
3667
	} else {
3668
		l2cap_retransmit_frames(chan);
3669

3670 3671
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
3672 3673
	}
}
3674
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
3675
{
3676
	u16 tx_seq = __get_reqseq(chan, rx_control);
3677

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

3680
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3681

3682
	if (__is_ctrl_poll(chan, rx_control)) {
3683 3684
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3685

3686
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
3687
		l2cap_retransmit_one_frame(chan, tx_seq);
3688

3689
		l2cap_ertm_send(chan);
3690

3691
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3692
			chan->srej_save_reqseq = tx_seq;
3693
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
3694
		}
3695
	} else if (__is_ctrl_final(chan, rx_control)) {
3696
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
3697
				chan->srej_save_reqseq == tx_seq)
3698
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
3699
		else
3700
			l2cap_retransmit_one_frame(chan, tx_seq);
3701
	} else {
3702
		l2cap_retransmit_one_frame(chan, tx_seq);
3703
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
3704
			chan->srej_save_reqseq = tx_seq;
3705
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
3706
		}
3707 3708 3709
	}
}

3710
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
3711
{
3712
	u16 tx_seq = __get_reqseq(chan, rx_control);
3713

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

3716
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3717 3718
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3719

3720
	if (__is_ctrl_poll(chan, rx_control))
3721
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
3722

3723
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3724
		__clear_retrans_timer(chan);
3725
		if (__is_ctrl_poll(chan, rx_control))
3726
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3727
		return;
3728
	}
3729

3730
	if (__is_ctrl_poll(chan, rx_control)) {
3731
		l2cap_send_srejtail(chan);
3732 3733 3734 3735
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
3736 3737
}

3738
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3739
{
3740
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
3741

3742
	if (__is_ctrl_final(chan, rx_control) &&
3743
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3744
		__clear_monitor_timer(chan);
3745
		if (chan->unacked_frames > 0)
3746
			__set_retrans_timer(chan);
3747
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3748 3749
	}

3750 3751
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
3752
		l2cap_data_channel_rrframe(chan, rx_control);
3753 3754
		break;

3755
	case L2CAP_SUPER_REJ:
3756
		l2cap_data_channel_rejframe(chan, rx_control);
3757
		break;
3758

3759
	case L2CAP_SUPER_SREJ:
3760
		l2cap_data_channel_srejframe(chan, rx_control);
3761 3762
		break;

3763
	case L2CAP_SUPER_RNR:
3764
		l2cap_data_channel_rnrframe(chan, rx_control);
3765 3766 3767
		break;
	}

3768
	kfree_skb(skb);
3769 3770 3771
	return 0;
}

3772 3773
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3774
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3775
	u32 control;
3776
	u16 req_seq;
3777 3778
	int len, next_tx_seq_offset, req_seq_offset;

3779 3780
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
3781 3782 3783 3784 3785 3786 3787
	len = skb->len;

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

3791
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
3792
		len -= L2CAP_SDULEN_SIZE;
3793

3794
	if (chan->fcs == L2CAP_FCS_CRC16)
3795
		len -= L2CAP_FCS_SIZE;
3796

3797
	if (len > chan->mps) {
3798
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3799 3800 3801
		goto drop;
	}

3802
	req_seq = __get_reqseq(chan, control);
3803

3804 3805 3806 3807
	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);
3808 3809 3810

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3811
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3812 3813 3814
		goto drop;
	}

3815
	if (!__is_sframe(chan, control)) {
3816
		if (len < 0) {
3817
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3818 3819 3820
			goto drop;
		}

3821
		l2cap_data_channel_iframe(chan, control, skb);
3822 3823 3824
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3825
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3826 3827 3828
			goto drop;
		}

3829
		l2cap_data_channel_sframe(chan, control, skb);
3830 3831 3832 3833 3834 3835 3836 3837 3838
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3839 3840
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3841
	struct l2cap_chan *chan;
3842
	struct sock *sk = NULL;
3843
	u32 control;
3844
	u16 tx_seq;
3845
	int len;
L
Linus Torvalds 已提交
3846

3847
	chan = l2cap_get_chan_by_scid(conn, cid);
3848
	if (!chan) {
L
Linus Torvalds 已提交
3849 3850 3851 3852
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3853
	sk = chan->sk;
3854

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

3857
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
3858 3859
		goto drop;

3860
	switch (chan->mode) {
3861 3862 3863 3864 3865
	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 已提交
3866

3867
		if (chan->imtu < skb->len)
3868
			goto drop;
L
Linus Torvalds 已提交
3869

3870
		if (!chan->ops->recv(chan->data, skb))
3871 3872 3873 3874
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3875 3876
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3877
		} else {
3878
			if (sk_add_backlog(sk, skb))
3879 3880
				goto drop;
		}
3881

3882
		goto done;
3883

3884
	case L2CAP_MODE_STREAMING:
3885 3886
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
3887 3888
		len = skb->len;

3889
		if (l2cap_check_fcs(chan, skb))
3890 3891
			goto drop;

3892
		if (__is_sar_start(chan, control))
3893
			len -= L2CAP_SDULEN_SIZE;
3894

3895
		if (chan->fcs == L2CAP_FCS_CRC16)
3896
			len -= L2CAP_FCS_SIZE;
3897

3898
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
3899 3900
			goto drop;

3901
		tx_seq = __get_txseq(chan, control);
3902

3903 3904 3905 3906 3907 3908
		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;
3909

3910 3911 3912
			/* TODO: Notify userland of missing data */
		}

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

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3917 3918 3919

		goto done;

3920
	default:
3921
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3922 3923
		break;
	}
L
Linus Torvalds 已提交
3924 3925 3926 3927 3928

drop:
	kfree_skb(skb);

done:
3929 3930 3931
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3932 3933 3934
	return 0;
}

3935
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3936
{
3937
	struct sock *sk = NULL;
3938
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3939

3940 3941
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
3942 3943
		goto drop;

3944 3945
	sk = chan->sk;

3946 3947
	bh_lock_sock(sk);

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

3950
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
3951 3952
		goto drop;

3953
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
3954 3955
		goto drop;

3956
	if (!chan->ops->recv(chan->data, skb))
L
Linus Torvalds 已提交
3957 3958 3959 3960 3961 3962
		goto done;

drop:
	kfree_skb(skb);

done:
3963 3964
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3965 3966 3967
	return 0;
}

3968 3969
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
3970
	struct sock *sk = NULL;
3971
	struct l2cap_chan *chan;
3972

3973 3974
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
3975 3976
		goto drop;

3977 3978
	sk = chan->sk;

3979 3980 3981 3982
	bh_lock_sock(sk);

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

3983
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
3984 3985
		goto drop;

3986
	if (chan->imtu < skb->len)
3987 3988
		goto drop;

3989
	if (!chan->ops->recv(chan->data, skb))
3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000
		goto done;

drop:
	kfree_skb(skb);

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

L
Linus Torvalds 已提交
4001 4002 4003
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4004 4005
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4006 4007 4008 4009 4010

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

4011 4012 4013 4014 4015
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4016 4017 4018
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4019
	case L2CAP_CID_LE_SIGNALING:
4020
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4021 4022 4023
		l2cap_sig_channel(conn, skb);
		break;

4024
	case L2CAP_CID_CONN_LESS:
4025
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
4026 4027 4028 4029
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4030 4031 4032 4033
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4034 4035 4036 4037 4038
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049
	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;
4050
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4051 4052

	if (type != ACL_LINK)
4053
		return -EINVAL;
L
Linus Torvalds 已提交
4054 4055 4056 4057

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

	/* Find listening sockets and check their link_mode */
4058 4059 4060
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4061

4062
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4063 4064 4065
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4066
			lm1 |= HCI_LM_ACCEPT;
4067
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4068
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4069
			exact++;
4070 4071
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4072
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4073 4074
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4075
	}
4076
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4077 4078 4079 4080 4081 4082

	return exact ? lm1 : lm2;
}

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

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

4087
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4088
		return -EINVAL;
L
Linus Torvalds 已提交
4089 4090 4091 4092 4093

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
4094
	} else
4095
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4096 4097 4098 4099

	return 0;
}

4100 4101 4102 4103 4104 4105
static int l2cap_disconn_ind(struct hci_conn *hcon)
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4106
	if ((hcon->type != ACL_LINK && hcon->type != LE_LINK) || !conn)
4107 4108 4109 4110 4111 4112
		return 0x13;

	return conn->disc_reason;
}

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

4116
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4117
		return -EINVAL;
L
Linus Torvalds 已提交
4118

4119
	l2cap_conn_del(hcon, bt_to_errno(reason));
4120

L
Linus Torvalds 已提交
4121 4122 4123
	return 0;
}

4124
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4125
{
4126
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4127 4128
		return;

4129
	if (encrypt == 0x00) {
4130
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4131 4132
			__clear_chan_timer(chan);
			__set_chan_timer(chan, HZ * 5);
4133
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4134
			l2cap_chan_close(chan, ECONNREFUSED);
4135
	} else {
4136
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4137
			__clear_chan_timer(chan);
4138 4139 4140
	}
}

4141
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4142
{
4143
	struct l2cap_conn *conn = hcon->l2cap_data;
4144
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4145

4146
	if (!conn)
L
Linus Torvalds 已提交
4147
		return 0;
4148

L
Linus Torvalds 已提交
4149 4150
	BT_DBG("conn %p", conn);

4151 4152 4153 4154 4155
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
		del_timer(&conn->security_timer);
	}

4156
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4157

4158
	list_for_each_entry(chan, &conn->chan_l, list) {
4159
		struct sock *sk = chan->sk;
4160

L
Linus Torvalds 已提交
4161 4162
		bh_lock_sock(sk);

4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174
		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;
		}

4175
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4176 4177 4178 4179
			bh_unlock_sock(sk);
			continue;
		}

4180 4181
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4182
			l2cap_check_encryption(chan, encrypt);
4183 4184 4185 4186
			bh_unlock_sock(sk);
			continue;
		}

4187
		if (chan->state == BT_CONNECT) {
4188 4189
			if (!status) {
				struct l2cap_conn_req req;
4190 4191
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4192

4193
				chan->ident = l2cap_get_ident(conn);
4194
				set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
4195

4196
				l2cap_send_cmd(conn, chan->ident,
4197 4198
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
4199 4200
				__clear_chan_timer(chan);
				__set_chan_timer(chan, HZ / 10);
4201
			}
4202
		} else if (chan->state == BT_CONNECT2) {
4203
			struct l2cap_conn_rsp rsp;
4204
			__u16 res, stat;
L
Linus Torvalds 已提交
4205

4206
			if (!status) {
4207 4208 4209 4210
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4211 4212
					if (parent)
						parent->sk_data_ready(parent, 0);
4213
				} else {
4214
					l2cap_state_change(chan, BT_CONFIG);
4215 4216 4217
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4218
			} else {
4219
				l2cap_state_change(chan, BT_DISCONN);
4220
				__set_chan_timer(chan, HZ / 10);
4221 4222
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4223 4224
			}

4225 4226
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4227 4228
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4229 4230
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4231
		}
L
Linus Torvalds 已提交
4232 4233 4234 4235

		bh_unlock_sock(sk);
	}

4236
	read_unlock(&conn->chan_lock);
4237

L
Linus Torvalds 已提交
4238 4239 4240 4241 4242 4243 4244
	return 0;
}

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

4245 4246 4247 4248
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4249 4250 4251 4252
		goto drop;

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

4253
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4254
		struct l2cap_hdr *hdr;
4255
		struct l2cap_chan *chan;
4256
		u16 cid;
L
Linus Torvalds 已提交
4257 4258 4259 4260 4261 4262 4263 4264 4265 4266
		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);
		}

4267 4268
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4269 4270 4271 4272 4273 4274 4275
			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;
4276
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292

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

4293
		chan = l2cap_get_chan_by_scid(conn, cid);
4294

4295 4296
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4297

4298
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4299 4300
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4301
							chan->imtu);
4302 4303 4304 4305
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4306
			bh_unlock_sock(sk);
4307
		}
4308

L
Linus Torvalds 已提交
4309
		/* Allocate skb for the complete frame (with header) */
4310 4311
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4312 4313
			goto drop;

4314
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4315
								skb->len);
L
Linus Torvalds 已提交
4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335
		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;
		}

4336
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4337
								skb->len);
L
Linus Torvalds 已提交
4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351
		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;
}

4352
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4353
{
4354
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4355

4356
	read_lock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4357

4358 4359
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4360

4361
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4362 4363
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4364
					c->state, __le16_to_cpu(c->psm),
4365 4366
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4367
}
L
Linus Torvalds 已提交
4368

4369
	read_unlock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4370

4371
	return 0;
L
Linus Torvalds 已提交
4372 4373
}

4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386
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 已提交
4387 4388 4389 4390 4391 4392 4393

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,
4394
	.disconn_cfm	= l2cap_disconn_cfm,
4395
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4396 4397 4398
	.recv_acldata	= l2cap_recv_acldata
};

4399
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4400 4401
{
	int err;
4402

4403
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4404 4405 4406 4407 4408 4409 4410 4411 4412 4413
	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;
	}

4414 4415 4416 4417 4418 4419
	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 已提交
4420 4421 4422 4423

	return 0;

error:
4424
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4425 4426 4427
	return err;
}

4428
void l2cap_exit(void)
L
Linus Torvalds 已提交
4429
{
4430
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4431 4432 4433 4434

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

4435
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4436 4437
}

4438 4439
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
4440 4441 4442

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