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

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

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

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

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

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

#include <linux/module.h>

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

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

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

60
bool disable_ertm;
61

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

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

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

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

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

82 83 84 85 86 87 88
	rcu_read_lock();

	list_for_each_entry_rcu(c, &conn->chan_l, list) {
		if (c->dcid == cid) {
			r = c;
			break;
		}
89
	}
90 91 92

	rcu_read_unlock();
	return r;
93 94
}

95
static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
96
{
97
	struct l2cap_chan *c, *r = NULL;
98

99 100 101 102 103 104 105
	rcu_read_lock();

	list_for_each_entry_rcu(c, &conn->chan_l, list) {
		if (c->scid == cid) {
			r = c;
			break;
		}
106
	}
107 108 109

	rcu_read_unlock();
	return r;
110 111 112 113
}

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

	c = __l2cap_get_chan_by_scid(conn, cid);
119
	if (c)
120
		lock_sock(c->sk);
121
	return c;
122 123
}

124
static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
125
{
126
	struct l2cap_chan *c, *r = NULL;
127

128 129 130 131 132 133 134
	rcu_read_lock();

	list_for_each_entry_rcu(c, &conn->chan_l, list) {
		if (c->ident == ident) {
			r = c;
			break;
		}
135
	}
136 137 138

	rcu_read_unlock();
	return r;
139 140
}

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

	c = __l2cap_get_chan_by_ident(conn, ident);
146
	if (c)
147
		lock_sock(c->sk);
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
			return c;
158
	}
159
	return NULL;
160 161 162 163
}

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

166
	write_lock(&chan_list_lock);
167

168
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
169 170
		err = -EADDRINUSE;
		goto done;
171 172
	}

173 174 175 176 177 178 179 180 181
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

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

190
done:
191
	write_unlock(&chan_list_lock);
192
	return err;
193 194 195 196
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
197
	write_lock(&chan_list_lock);
198 199 200

	chan->scid = scid;

201
	write_unlock(&chan_list_lock);
202 203 204 205

	return 0;
}

206
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
207
{
208
	u16 cid = L2CAP_CID_DYN_START;
209

210
	for (; cid < L2CAP_CID_DYN_END; cid++) {
211
		if (!__l2cap_get_chan_by_scid(conn, cid))
212 213 214 215 216 217
			return cid;
	}

	return 0;
}

218 219
static void l2cap_state_change(struct l2cap_chan *chan, int state)
{
220
	BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
221 222
						state_to_string(state));

223 224 225 226
	chan->state = state;
	chan->ops->state_change(chan->data, state);
}

227
static void l2cap_chan_timeout(struct work_struct *work)
228
{
229 230
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							chan_timer.work);
231 232 233
	struct sock *sk = chan->sk;
	int reason;

234
	BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
235

236
	lock_sock(sk);
237

238
	if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
239
		reason = ECONNREFUSED;
240
	else if (chan->state == BT_CONNECT &&
241 242 243 244 245
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

246
	l2cap_chan_close(chan, reason);
247

248
	release_sock(sk);
249

250
	chan->ops->close(chan->data);
251
	l2cap_chan_put(chan);
252 253
}

254
struct l2cap_chan *l2cap_chan_create(struct sock *sk)
255 256 257 258 259 260 261 262 263
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

264
	write_lock(&chan_list_lock);
265
	list_add(&chan->global_l, &chan_list);
266
	write_unlock(&chan_list_lock);
267

268
	INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
269

270 271
	chan->state = BT_OPEN;

272 273
	atomic_set(&chan->refcnt, 1);

274 275
	BT_DBG("sk %p chan %p", sk, chan);

276 277 278
	return chan;
}

279
void l2cap_chan_destroy(struct l2cap_chan *chan)
280
{
281
	write_lock(&chan_list_lock);
282
	list_del(&chan->global_l);
283
	write_unlock(&chan_list_lock);
284

285
	l2cap_chan_put(chan);
286 287
}

288
static void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
289
{
290
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
291
			chan->psm, chan->dcid);
292

293
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
294

295
	chan->conn = conn;
296

297 298
	switch (chan->chan_type) {
	case L2CAP_CHAN_CONN_ORIENTED:
299 300
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
301
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
302 303
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
304 305
		} else {
			/* Alloc CID for connection-oriented socket */
306
			chan->scid = l2cap_alloc_cid(conn);
307
			chan->omtu = L2CAP_DEFAULT_MTU;
308
		}
309 310 311
		break;

	case L2CAP_CHAN_CONN_LESS:
312
		/* Connectionless socket */
313 314
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
315
		chan->omtu = L2CAP_DEFAULT_MTU;
316 317 318
		break;

	default:
319
		/* Raw socket can send/recv signalling messages only */
320 321
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
322
		chan->omtu = L2CAP_DEFAULT_MTU;
323 324
	}

325 326 327 328 329 330 331
	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;

332
	l2cap_chan_hold(chan);
333

334
	list_add_rcu(&chan->list, &conn->chan_l);
335 336
}

337
/* Delete channel.
338
 * Must be called on the locked socket. */
339
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
340
{
341
	struct sock *sk = chan->sk;
342
	struct l2cap_conn *conn = chan->conn;
343 344
	struct sock *parent = bt_sk(sk)->parent;

345
	__clear_chan_timer(chan);
346

347
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
348

349
	if (conn) {
350
		/* Delete from channel list */
351 352 353
		list_del_rcu(&chan->list);
		synchronize_rcu();

354
		l2cap_chan_put(chan);
355

356
		chan->conn = NULL;
357 358 359
		hci_conn_put(conn->hcon);
	}

360
	l2cap_state_change(chan, BT_CLOSED);
361 362 363 364 365 366 367 368 369 370
	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);
371

372 373
	if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
			test_bit(CONF_INPUT_DONE, &chan->conf_state)))
374
		return;
375

376
	skb_queue_purge(&chan->tx_q);
377

378
	if (chan->mode == L2CAP_MODE_ERTM) {
379 380
		struct srej_list *l, *tmp;

381 382 383
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
384

385
		skb_queue_purge(&chan->srej_q);
386

387
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
388 389 390 391
			list_del(&l->list);
			kfree(l);
		}
	}
392 393
}

394 395 396 397 398 399 400
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

	/* Close not yet accepted channels */
401
	while ((sk = bt_accept_dequeue(parent, NULL))) {
402
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;
403
		__clear_chan_timer(chan);
404
		lock_sock(sk);
405
		l2cap_chan_close(chan, ECONNRESET);
406
		release_sock(sk);
407
		chan->ops->close(chan->data);
408
	}
409 410
}

411
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
412 413 414 415
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

416 417
	BT_DBG("chan %p state %s sk %p", chan,
					state_to_string(chan->state), sk);
418

419
	switch (chan->state) {
420 421
	case BT_LISTEN:
		l2cap_chan_cleanup_listen(sk);
422 423 424

		l2cap_state_change(chan, BT_CLOSED);
		sock_set_flag(sk, SOCK_ZAPPED);
425 426 427 428
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
429
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
430
					conn->hcon->type == ACL_LINK) {
431 432
			__clear_chan_timer(chan);
			__set_chan_timer(chan, sk->sk_sndtimeo);
433 434 435 436 437 438
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
439
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
440 441 442 443 444 445 446 447
					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;
448
			l2cap_state_change(chan, BT_DISCONN);
449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471

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

472
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
473
{
474
	if (chan->chan_type == L2CAP_CHAN_RAW) {
475
		switch (chan->sec_level) {
476 477 478 479 480 481 482
		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;
		}
483
	} else if (chan->psm == cpu_to_le16(0x0001)) {
484 485
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
486

487
		if (chan->sec_level == BT_SECURITY_HIGH)
488
			return HCI_AT_NO_BONDING_MITM;
489
		else
490
			return HCI_AT_NO_BONDING;
491
	} else {
492
		switch (chan->sec_level) {
493
		case BT_SECURITY_HIGH:
494
			return HCI_AT_GENERAL_BONDING_MITM;
495
		case BT_SECURITY_MEDIUM:
496
			return HCI_AT_GENERAL_BONDING;
497
		default:
498
			return HCI_AT_NO_BONDING;
499
		}
500
	}
501 502 503
}

/* Service level security */
504
int l2cap_chan_check_security(struct l2cap_chan *chan)
505
{
506
	struct l2cap_conn *conn = chan->conn;
507 508
	__u8 auth_type;

509
	auth_type = l2cap_get_auth_type(chan);
510

511
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
512 513
}

514
static u8 l2cap_get_ident(struct l2cap_conn *conn)
515 516 517 518 519 520 521 522 523
{
	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.
	 */

524
	spin_lock(&conn->lock);
525 526 527 528 529 530

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

	id = conn->tx_ident;

531
	spin_unlock(&conn->lock);
532 533 534 535

	return id;
}

536
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
537 538
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
539
	u8 flags;
540 541 542 543

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

	if (!skb)
544
		return;
545

546 547 548 549 550
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

551
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
552
	skb->priority = HCI_PRIO_MAX;
553

554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569
	hci_send_acl(conn->hchan, skb, flags);
}

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

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

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

571 572
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
	hci_send_acl(chan->conn->hchan, skb, flags);
573 574
}

575
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
576 577 578
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
579
	struct l2cap_conn *conn = chan->conn;
580
	int count, hlen;
581

582
	if (chan->state != BT_CONNECTED)
583 584
		return;

585 586 587 588 589
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

590
	if (chan->fcs == L2CAP_FCS_CRC16)
591
		hlen += L2CAP_FCS_SIZE;
592

593
	BT_DBG("chan %p, control 0x%8.8x", chan, control);
594

595
	count = min_t(unsigned int, conn->mtu, hlen);
596 597

	control |= __set_sframe(chan);
598

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

602
	if (test_and_clear_bit(CONN_SEND_PBIT, &chan->conn_state))
603
		control |= __set_ctrl_poll(chan);
604

605 606
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
607
		return;
608 609

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
610
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
611
	lh->cid = cpu_to_le16(chan->dcid);
612 613

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

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

620 621
	skb->priority = HCI_PRIO_MAX;
	l2cap_do_send(chan, skb);
622 623
}

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

632
	control |= __set_reqseq(chan, chan->buffer_seq);
633

634
	l2cap_send_sframe(chan, control);
635 636
}

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

642
static void l2cap_do_start(struct l2cap_chan *chan)
643
{
644
	struct l2cap_conn *conn = chan->conn;
645 646

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
647 648 649
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

650
		if (l2cap_chan_check_security(chan) &&
651
				__l2cap_no_conn_pending(chan)) {
652
			struct l2cap_conn_req req;
653 654
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
655

656
			chan->ident = l2cap_get_ident(conn);
657
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
658

659 660
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
661
		}
662 663 664 665 666 667 668
	} 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);

669
		schedule_delayed_work(&conn->info_timer,
670 671 672 673 674 675 676
					msecs_to_jiffies(L2CAP_INFO_TIMEOUT));

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

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

693
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
694
{
695
	struct sock *sk;
696 697
	struct l2cap_disconn_req req;

698 699 700
	if (!conn)
		return;

701 702
	sk = chan->sk;

703
	if (chan->mode == L2CAP_MODE_ERTM) {
704 705 706
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
707 708
	}

709 710
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
711 712
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
713

714
	l2cap_state_change(chan, BT_DISCONN);
715
	sk->sk_err = err;
716 717
}

L
Linus Torvalds 已提交
718
/* ---- L2CAP connections ---- */
719 720
static void l2cap_conn_start(struct l2cap_conn *conn)
{
721
	struct l2cap_chan *chan;
722 723 724

	BT_DBG("conn %p", conn);

725
	rcu_read_lock();
726

727
	list_for_each_entry_rcu(chan, &conn->chan_l, list) {
728
		struct sock *sk = chan->sk;
729

730 731
		bh_lock_sock(sk);

732
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
733 734 735 736
			bh_unlock_sock(sk);
			continue;
		}

737
		if (chan->state == BT_CONNECT) {
738
			struct l2cap_conn_req req;
739

740
			if (!l2cap_chan_check_security(chan) ||
741
					!__l2cap_no_conn_pending(chan)) {
742 743 744
				bh_unlock_sock(sk);
				continue;
			}
745

746 747 748
			if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
					&& test_bit(CONF_STATE2_DEVICE,
					&chan->conf_state)) {
749
				/* l2cap_chan_close() calls list_del(chan)
750
				 * so release the lock */
751
				l2cap_chan_close(chan, ECONNRESET);
752 753
				bh_unlock_sock(sk);
				continue;
754
			}
755

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

759
			chan->ident = l2cap_get_ident(conn);
760
			set_bit(CONF_CONNECT_PEND, &chan->conf_state);
761

762 763
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
764

765
		} else if (chan->state == BT_CONNECT2) {
766
			struct l2cap_conn_rsp rsp;
767
			char buf[128];
768 769
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
770

771
			if (l2cap_chan_check_security(chan)) {
772 773 774 775
				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);
776 777
					if (parent)
						parent->sk_data_ready(parent, 0);
778 779

				} else {
780
					l2cap_state_change(chan, BT_CONFIG);
781 782 783
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
784 785 786 787 788
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

789 790
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
791

792
			if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
793 794 795 796 797
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

798
			set_bit(CONF_REQ_SENT, &chan->conf_state);
799
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
800 801
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
802 803 804 805 806
		}

		bh_unlock_sock(sk);
	}

807
	rcu_read_unlock();
808 809
}

810 811 812
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
813
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
814
{
815
	struct l2cap_chan *c, *c1 = NULL;
816

817
	read_lock(&chan_list_lock);
818

819 820
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
821

822
		if (state && c->state != state)
823 824
			continue;

825
		if (c->scid == cid) {
826
			/* Exact match. */
827 828 829 830
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
831 832 833

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
834
				c1 = c;
835 836
		}
	}
837

838
	read_unlock(&chan_list_lock);
839

840
	return c1;
841 842 843 844
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
845
	struct sock *parent, *sk;
846
	struct l2cap_chan *chan, *pchan;
847 848 849 850

	BT_DBG("");

	/* Check if we have socket listening on cid */
851
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
852
							conn->src);
853
	if (!pchan)
854 855
		return;

856 857
	parent = pchan->sk;

858
	lock_sock(parent);
859

860 861 862 863 864 865
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

866 867
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
868 869
		goto clean;

870
	sk = chan->sk;
871

872 873 874 875 876
	hci_conn_hold(conn->hcon);

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

877 878
	bt_accept_enqueue(parent, sk);

879
	l2cap_chan_add(conn, chan);
880

881
	__set_chan_timer(chan, sk->sk_sndtimeo);
882

883
	l2cap_state_change(chan, BT_CONNECTED);
884 885 886
	parent->sk_data_ready(parent, 0);

clean:
887
	release_sock(parent);
888 889
}

890
static void l2cap_chan_ready(struct l2cap_chan *chan)
891
{
892
	struct sock *sk = chan->sk;
893 894 895 896 897 898 899
	struct sock *parent = bt_sk(sk)->parent;

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

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

900
	l2cap_state_change(chan, BT_CONNECTED);
901 902 903 904 905 906
	sk->sk_state_change(sk);

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

907 908
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
909
	struct l2cap_chan *chan;
910

911
	BT_DBG("conn %p", conn);
912

913 914 915
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

916 917 918
	if (conn->hcon->out && conn->hcon->type == LE_LINK)
		smp_conn_security(conn, conn->hcon->pending_sec_level);

919
	rcu_read_lock();
920

921
	list_for_each_entry_rcu(chan, &conn->chan_l, list) {
922
		struct sock *sk = chan->sk;
923

924
		bh_lock_sock(sk);
925

926
		if (conn->hcon->type == LE_LINK) {
927
			if (smp_conn_security(conn, chan->sec_level))
928
				l2cap_chan_ready(chan);
929

930
		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
931
			__clear_chan_timer(chan);
932
			l2cap_state_change(chan, BT_CONNECTED);
933
			sk->sk_state_change(sk);
934

935
		} else if (chan->state == BT_CONNECT)
936
			l2cap_do_start(chan);
937

938
		bh_unlock_sock(sk);
939
	}
940

941
	rcu_read_unlock();
942 943 944 945 946
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
947
	struct l2cap_chan *chan;
948 949 950

	BT_DBG("conn %p", conn);

951
	rcu_read_lock();
952

953
	list_for_each_entry_rcu(chan, &conn->chan_l, list) {
954
		struct sock *sk = chan->sk;
955

956
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
957 958 959
			sk->sk_err = err;
	}

960
	rcu_read_unlock();
961 962
}

963
static void l2cap_info_timeout(struct work_struct *work)
964
{
965
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
966
							info_timer.work);
967

968
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
969
	conn->info_ident = 0;
970

971 972 973
	l2cap_conn_start(conn);
}

974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989
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;
990
		lock_sock(sk);
991
		l2cap_chan_del(chan, err);
992
		release_sock(sk);
993 994 995
		chan->ops->close(chan->data);
	}

996 997
	hci_chan_del(conn->hchan);

998
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
999
		cancel_delayed_work_sync(&conn->info_timer);
1000

1001
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1002
		cancel_delayed_work_sync(&conn->security_timer);
1003
		smp_chan_destroy(conn);
1004
	}
1005 1006 1007 1008 1009

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

1010
static void security_timeout(struct work_struct *work)
1011
{
1012 1013
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
						security_timer.work);
1014 1015 1016 1017

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

L
Linus Torvalds 已提交
1018 1019
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
1020
	struct l2cap_conn *conn = hcon->l2cap_data;
1021
	struct hci_chan *hchan;
L
Linus Torvalds 已提交
1022

1023
	if (conn || status)
L
Linus Torvalds 已提交
1024 1025
		return conn;

1026 1027 1028 1029
	hchan = hci_chan_create(hcon);
	if (!hchan)
		return NULL;

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

	hcon->l2cap_data = conn;
	conn->hcon = hcon;
1038
	conn->hchan = hchan;
L
Linus Torvalds 已提交
1039

1040
	BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1041

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

1050 1051
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
1052
	spin_lock_init(&conn->lock);
1053 1054

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

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

1061
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1062

L
Linus Torvalds 已提交
1063 1064 1065 1066 1067 1068 1069 1070
	return conn;
}

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

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

1075
	read_lock(&chan_list_lock);
1076

1077 1078
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1079

1080
		if (state && c->state != state)
L
Linus Torvalds 已提交
1081 1082
			continue;

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

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1092
				c1 = c;
L
Linus Torvalds 已提交
1093 1094 1095
		}
	}

1096
	read_unlock(&chan_list_lock);
1097

1098
	return c1;
L
Linus Torvalds 已提交
1099 1100
}

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

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

1114 1115
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1116 1117
		return -EHOSTUNREACH;

1118
	hci_dev_lock(hdev);
L
Linus Torvalds 已提交
1119

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

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

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

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

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

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

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

	default:
		err = -EBADFD;
		goto done;
	}

	/* Set destination address and psm */
1171
	bacpy(&bt_sk(sk)->dst, dst);
1172 1173
	chan->psm = psm;
	chan->dcid = cid;
L
Linus Torvalds 已提交
1174

1175
	auth_type = l2cap_get_auth_type(chan);
1176

1177
	if (chan->dcid == L2CAP_CID_LE_DATA)
1178
		hcon = hci_connect(hdev, LE_LINK, dst,
1179
					chan->sec_level, auth_type);
1180 1181
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1182
					chan->sec_level, auth_type);
1183

1184 1185
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1186
		goto done;
1187
	}
L
Linus Torvalds 已提交
1188 1189 1190 1191

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1192
		err = -ENOMEM;
L
Linus Torvalds 已提交
1193 1194 1195 1196 1197 1198
		goto done;
	}

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

1199 1200
	l2cap_chan_add(conn, chan);

1201
	l2cap_state_change(chan, BT_CONNECT);
1202
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1203 1204

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

1213 1214
	err = 0;

L
Linus Torvalds 已提交
1215
done:
1216
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1217 1218 1219 1220
	hci_dev_put(hdev);
	return err;
}

1221
int __l2cap_wait_ack(struct sock *sk)
1222
{
1223
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1224 1225 1226 1227
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

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

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1249
	remove_wait_queue(sk_sleep(sk), &wait);
1250 1251 1252
	return err;
}

1253
static void l2cap_monitor_timeout(struct work_struct *work)
1254
{
1255 1256
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							monitor_timer.work);
1257
	struct sock *sk = chan->sk;
1258

1259
	BT_DBG("chan %p", chan);
1260

1261
	lock_sock(sk);
1262
	if (chan->retry_count >= chan->remote_max_tx) {
1263
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1264
		release_sock(sk);
1265 1266 1267
		return;
	}

1268
	chan->retry_count++;
1269
	__set_monitor_timer(chan);
1270

1271
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1272
	release_sock(sk);
1273 1274
}

1275
static void l2cap_retrans_timeout(struct work_struct *work)
1276
{
1277 1278
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							retrans_timer.work);
1279
	struct sock *sk = chan->sk;
1280

1281
	BT_DBG("chan %p", chan);
1282

1283
	lock_sock(sk);
1284
	chan->retry_count = 1;
1285
	__set_monitor_timer(chan);
1286

1287
	set_bit(CONN_WAIT_F, &chan->conn_state);
1288

1289
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1290
	release_sock(sk);
1291 1292
}

1293
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1294
{
1295
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1296

1297
	while ((skb = skb_peek(&chan->tx_q)) &&
1298
			chan->unacked_frames) {
1299
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1300
			break;
L
Linus Torvalds 已提交
1301

1302
		skb = skb_dequeue(&chan->tx_q);
1303
		kfree_skb(skb);
L
Linus Torvalds 已提交
1304

1305
		chan->unacked_frames--;
1306
	}
L
Linus Torvalds 已提交
1307

1308
	if (!chan->unacked_frames)
1309
		__clear_retrans_timer(chan);
1310
}
L
Linus Torvalds 已提交
1311

1312
static void l2cap_streaming_send(struct l2cap_chan *chan)
1313
{
1314
	struct sk_buff *skb;
1315 1316
	u32 control;
	u16 fcs;
1317

1318
	while ((skb = skb_dequeue(&chan->tx_q))) {
1319
		control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1320
		control |= __set_txseq(chan, chan->next_tx_seq);
1321
		__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1322

1323
		if (chan->fcs == L2CAP_FCS_CRC16) {
1324 1325 1326 1327
			fcs = crc16(0, (u8 *)skb->data,
						skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs,
					skb->data + skb->len - L2CAP_FCS_SIZE);
1328 1329
		}

1330
		l2cap_do_send(chan, skb);
1331

1332
		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1333 1334 1335
	}
}

1336
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1337 1338
{
	struct sk_buff *skb, *tx_skb;
1339 1340
	u16 fcs;
	u32 control;
1341

1342
	skb = skb_peek(&chan->tx_q);
1343 1344
	if (!skb)
		return;
1345

1346
	while (bt_cb(skb)->tx_seq != tx_seq) {
1347
		if (skb_queue_is_last(&chan->tx_q, skb))
1348
			return;
1349

1350 1351
		skb = skb_queue_next(&chan->tx_q, skb);
	}
1352

1353 1354
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1355
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1356 1357 1358 1359 1360
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
1361 1362

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

1365
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1366
		control |= __set_ctrl_final(chan);
1367

1368
	control |= __set_reqseq(chan, chan->buffer_seq);
1369
	control |= __set_txseq(chan, tx_seq);
1370

1371
	__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1372

1373
	if (chan->fcs == L2CAP_FCS_CRC16) {
1374 1375 1376 1377
		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);
1378 1379
	}

1380
	l2cap_do_send(chan, tx_skb);
1381 1382
}

1383
static int l2cap_ertm_send(struct l2cap_chan *chan)
1384 1385
{
	struct sk_buff *skb, *tx_skb;
1386 1387
	u16 fcs;
	u32 control;
1388
	int nsent = 0;
1389

1390
	if (chan->state != BT_CONNECTED)
1391
		return -ENOTCONN;
1392

1393
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1394

1395 1396
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1397
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1398 1399 1400
			break;
		}

1401 1402
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1403 1404
		bt_cb(skb)->retries++;

1405
		control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1406
		control &= __get_sar_mask(chan);
1407

1408
		if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1409
			control |= __set_ctrl_final(chan);
1410

1411
		control |= __set_reqseq(chan, chan->buffer_seq);
1412
		control |= __set_txseq(chan, chan->next_tx_seq);
1413

1414
		__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1415

1416
		if (chan->fcs == L2CAP_FCS_CRC16) {
1417 1418 1419 1420
			fcs = crc16(0, (u8 *)skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs, skb->data +
						tx_skb->len - L2CAP_FCS_SIZE);
1421 1422
		}

1423
		l2cap_do_send(chan, tx_skb);
1424

1425
		__set_retrans_timer(chan);
1426

1427
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
1428 1429

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

1431
		if (bt_cb(skb)->retries == 1) {
1432
			chan->unacked_frames++;
1433 1434 1435

			if (!nsent++)
				__clear_ack_timer(chan);
1436
		}
1437

1438
		chan->frames_sent++;
1439

1440 1441
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1442
		else
1443
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1444 1445
	}

1446 1447 1448
	return nsent;
}

1449
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1450 1451 1452
{
	int ret;

1453 1454
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1455

1456
	chan->next_tx_seq = chan->expected_ack_seq;
1457
	ret = l2cap_ertm_send(chan);
1458 1459 1460
	return ret;
}

1461
static void __l2cap_send_ack(struct l2cap_chan *chan)
1462
{
1463
	u32 control = 0;
1464

1465
	control |= __set_reqseq(chan, chan->buffer_seq);
1466

1467
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1468
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1469
		set_bit(CONN_RNR_SENT, &chan->conn_state);
1470
		l2cap_send_sframe(chan, control);
1471
		return;
1472
	}
1473

1474
	if (l2cap_ertm_send(chan) > 0)
1475 1476
		return;

1477
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1478
	l2cap_send_sframe(chan, control);
1479 1480
}

1481 1482 1483 1484 1485 1486
static void l2cap_send_ack(struct l2cap_chan *chan)
{
	__clear_ack_timer(chan);
	__l2cap_send_ack(chan);
}

1487
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1488 1489
{
	struct srej_list *tail;
1490
	u32 control;
1491

1492
	control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1493
	control |= __set_ctrl_final(chan);
1494

1495
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1496
	control |= __set_reqseq(chan, tail->tx_seq);
1497

1498
	l2cap_send_sframe(chan, control);
1499 1500
}

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

1507
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1508
		return -EFAULT;
L
Linus Torvalds 已提交
1509 1510 1511 1512 1513 1514 1515 1516 1517

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

1518 1519 1520
		*frag = chan->ops->alloc_skb(chan, count,
					msg->msg_flags & MSG_DONTWAIT, &err);

L
Linus Torvalds 已提交
1521
		if (!*frag)
1522
			return err;
1523 1524
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1525

1526 1527
		(*frag)->priority = skb->priority;

L
Linus Torvalds 已提交
1528 1529 1530 1531 1532 1533 1534
		sent += count;
		len  -= count;

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

	return sent;
1535
}
L
Linus Torvalds 已提交
1536

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

1546
	BT_DBG("chan %p len %d priority %u", chan, (int)len, priority);
1547 1548

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1549 1550 1551 1552

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

1553
	if (!skb)
1554
		return ERR_PTR(err);
1555

1556 1557
	skb->priority = priority;

1558 1559
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1560
	lh->cid = cpu_to_le16(chan->dcid);
1561
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1562
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1563

1564
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1565 1566 1567 1568 1569 1570 1571
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

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

1581
	BT_DBG("chan %p len %d", chan, (int)len);
1582 1583

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1584 1585 1586 1587

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

1588
	if (!skb)
1589
		return ERR_PTR(err);
1590

1591 1592
	skb->priority = priority;

1593 1594
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1595
	lh->cid = cpu_to_le16(chan->dcid);
1596 1597
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

1598
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1599 1600 1601 1602 1603 1604 1605
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

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

1615
	BT_DBG("chan %p len %d", chan, (int)len);
1616

1617 1618 1619
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1620 1621 1622 1623 1624
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1625
	if (sdulen)
1626
		hlen += L2CAP_SDULEN_SIZE;
1627

1628
	if (chan->fcs == L2CAP_FCS_CRC16)
1629
		hlen += L2CAP_FCS_SIZE;
1630

1631
	count = min_t(unsigned int, (conn->mtu - hlen), len);
1632 1633 1634 1635

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

1636
	if (!skb)
1637
		return ERR_PTR(err);
1638 1639 1640

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1641
	lh->cid = cpu_to_le16(chan->dcid);
1642
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1643 1644 1645

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

1646
	if (sdulen)
1647
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1648

1649
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1650 1651 1652 1653
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1654

1655
	if (chan->fcs == L2CAP_FCS_CRC16)
1656
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1657

1658
	bt_cb(skb)->retries = 0;
1659
	return skb;
L
Linus Torvalds 已提交
1660 1661
}

1662
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1663 1664 1665
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1666
	u32 control;
1667 1668
	size_t size = 0;

1669
	skb_queue_head_init(&sar_queue);
1670
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1671
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1672 1673 1674 1675
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1676 1677
	len -= chan->remote_mps;
	size += chan->remote_mps;
1678 1679 1680 1681

	while (len > 0) {
		size_t buflen;

1682
		if (len > chan->remote_mps) {
1683
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1684
			buflen = chan->remote_mps;
1685
		} else {
1686
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
1687 1688 1689
			buflen = len;
		}

1690
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1691 1692 1693 1694 1695 1696 1697 1698 1699
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1700 1701 1702
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1703 1704 1705 1706

	return size;
}

1707 1708
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
								u32 priority)
1709 1710
{
	struct sk_buff *skb;
1711
	u32 control;
1712 1713 1714
	int err;

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

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

	BT_DBG("conn %p", conn);

1795 1796 1797
	rcu_read_lock();

	list_for_each_entry_rcu(chan, &conn->chan_l, list) {
1798
		struct sock *sk = chan->sk;
1799
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
1800 1801 1802 1803 1804
			continue;

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

1809
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
1810 1811
			kfree_skb(nskb);
	}
1812 1813

	rcu_read_unlock();
L
Linus Torvalds 已提交
1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824
}

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

1825 1826
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1827 1828 1829 1830 1831 1832 1833 1834 1835

	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);
1836
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1837 1838 1839 1840 1841

	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 已提交
1842 1843 1844 1845

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

	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:
1897
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1898 1899 1900
		break;

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

	case 4:
1932
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1933 1934 1935 1936 1937 1938 1939 1940 1941 1942
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1943 1944 1945 1946
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

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

1974
static void l2cap_ack_timeout(struct work_struct *work)
1975
{
1976 1977
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							ack_timer.work);
1978

1979 1980
	BT_DBG("chan %p", chan);

1981
	lock_sock(chan->sk);
1982
	__l2cap_send_ack(chan);
1983
	release_sock(chan->sk);
1984 1985

	l2cap_chan_put(chan);
1986 1987
}

1988
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1989
{
1990
	chan->expected_ack_seq = 0;
1991
	chan->unacked_frames = 0;
1992
	chan->buffer_seq = 0;
1993 1994
	chan->num_acked = 0;
	chan->frames_sent = 0;
1995

1996 1997 1998
	INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
	INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
	INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
1999

2000
	skb_queue_head_init(&chan->srej_q);
2001

2002
	INIT_LIST_HEAD(&chan->srej_l);
2003 2004
}

2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017
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;
	}
}

2018 2019 2020 2021 2022
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

2023 2024 2025 2026 2027
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

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

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

2049
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2050

2051
	if (chan->num_conf_req || chan->num_conf_rsp)
2052 2053
		goto done;

2054
	switch (chan->mode) {
2055 2056
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2057
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2058 2059
			break;

2060 2061 2062
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2063
		/* fall through */
2064
	default:
2065
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2066 2067 2068 2069
		break;
	}

done:
2070 2071
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2072

2073
	switch (chan->mode) {
2074
	case L2CAP_MODE_BASIC:
2075 2076
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2077 2078
			break;

2079 2080 2081 2082 2083 2084 2085
		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;

2086 2087
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
2088 2089 2090 2091
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2092
		rfc.max_transmit    = chan->max_tx;
2093 2094
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2095 2096 2097 2098 2099 2100

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

2102 2103 2104 2105
		l2cap_txwin_setup(chan);

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

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

2110 2111 2112
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2113
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2114 2115
			break;

2116
		if (chan->fcs == L2CAP_FCS_NONE ||
2117
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2118 2119
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2120
		}
2121 2122 2123 2124

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

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

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

2143 2144 2145
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2146
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2147 2148
			break;

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

2157
	req->dcid  = cpu_to_le16(chan->dcid);
2158
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2159 2160 2161 2162

	return ptr - data;
}

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

2178
	BT_DBG("chan %p", chan);
2179

2180 2181
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2182

2183
		hint  = type & L2CAP_CONF_HINT;
2184
		type &= L2CAP_CONF_MASK;
2185 2186 2187

		switch (type) {
		case L2CAP_CONF_MTU:
2188
			mtu = val;
2189 2190 2191
			break;

		case L2CAP_CONF_FLUSH_TO:
2192
			chan->flush_to = val;
2193 2194 2195 2196 2197
			break;

		case L2CAP_CONF_QOS:
			break;

2198 2199 2200 2201 2202
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2203 2204
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2205
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2206
			break;
2207

2208 2209 2210 2211
		case L2CAP_CONF_EFS:
			remote_efs = 1;
			if (olen == sizeof(efs))
				memcpy(&efs, (void *) val, olen);
2212 2213
			break;

2214 2215 2216
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;
2217

2218 2219
			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2220
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2221
			chan->remote_tx_win = val;
2222 2223
			break;

2224 2225 2226 2227 2228 2229 2230 2231 2232 2233
		default:
			if (hint)
				break;

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

2234
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2235 2236
		goto done;

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

2246 2247 2248 2249 2250 2251 2252
		if (remote_efs) {
			if (__l2cap_efs_supported(chan))
				set_bit(FLAG_EFS_ENABLE, &chan->flags);
			else
				return -ECONNREFUSED;
		}

2253
		if (chan->mode != rfc.mode)
2254
			return -ECONNREFUSED;
2255

2256 2257 2258 2259
		break;
	}

done:
2260
	if (chan->mode != rfc.mode) {
2261
		result = L2CAP_CONF_UNACCEPT;
2262
		rfc.mode = chan->mode;
2263

2264
		if (chan->num_conf_rsp == 1)
2265 2266 2267 2268 2269 2270
			return -ECONNREFUSED;

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

2271 2272 2273 2274
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2275 2276 2277
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2278
			chan->omtu = mtu;
2279
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2280
		}
2281
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2282

2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293
		if (remote_efs) {
			if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != L2CAP_SERV_NOTRAFIC &&
					efs.stype != chan->local_stype) {

				result = L2CAP_CONF_UNACCEPT;

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

				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
2294
							sizeof(efs),
2295
							(unsigned long) &efs);
2296
			} else {
2297
				/* Send PENDING Conf Rsp */
2298 2299
				result = L2CAP_CONF_PENDING;
				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2300 2301 2302
			}
		}

2303 2304
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2305
			chan->fcs = L2CAP_FCS_NONE;
2306
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2307 2308 2309
			break;

		case L2CAP_MODE_ERTM:
2310 2311 2312 2313
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2314

2315
			chan->remote_max_tx = rfc.max_transmit;
2316

2317 2318 2319 2320 2321 2322 2323
			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
						chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
			rfc.max_pdu_size = cpu_to_le16(size);
			chan->remote_mps = size;
2324

2325 2326 2327 2328
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
2329

2330
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2331 2332 2333 2334

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

2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347
			if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
				chan->remote_id = efs.id;
				chan->remote_stype = efs.stype;
				chan->remote_msdu = le16_to_cpu(efs.msdu);
				chan->remote_flush_to =
						le32_to_cpu(efs.flush_to);
				chan->remote_acc_lat =
						le32_to_cpu(efs.acc_lat);
				chan->remote_sdu_itime =
					le32_to_cpu(efs.sdu_itime);
				l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
					sizeof(efs), (unsigned long) &efs);
			}
2348 2349 2350
			break;

		case L2CAP_MODE_STREAMING:
2351 2352 2353 2354 2355 2356 2357
			size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
						chan->conn->mtu -
						L2CAP_EXT_HDR_SIZE -
						L2CAP_SDULEN_SIZE -
						L2CAP_FCS_SIZE);
			rfc.max_pdu_size = cpu_to_le16(size);
			chan->remote_mps = size;
2358

2359
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2360 2361 2362 2363

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

2364 2365 2366
			break;

		default:
2367 2368
			result = L2CAP_CONF_UNACCEPT;

2369
			memset(&rfc, 0, sizeof(rfc));
2370
			rfc.mode = chan->mode;
2371
		}
2372

2373
		if (result == L2CAP_CONF_SUCCESS)
2374
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2375
	}
2376
	rsp->scid   = cpu_to_le16(chan->dcid);
2377 2378 2379 2380
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2381 2382
}

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

2392
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2393 2394 2395 2396 2397 2398 2399 2400

	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;
2401
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2402
			} else
2403 2404
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2405 2406 2407
			break;

		case L2CAP_CONF_FLUSH_TO:
2408
			chan->flush_to = val;
2409
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2410
							2, chan->flush_to);
2411 2412 2413 2414 2415 2416
			break;

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

2417
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2418
							rfc.mode != chan->mode)
2419 2420
				return -ECONNREFUSED;

2421
			chan->fcs = 0;
2422 2423 2424 2425

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2426 2427 2428 2429

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

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

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

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
					sizeof(efs), (unsigned long) &efs);
			break;
2446 2447 2448
		}
	}

2449
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2450 2451
		return -ECONNREFUSED;

2452
	chan->mode = rfc.mode;
2453

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

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

2471
		case L2CAP_MODE_STREAMING:
2472
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2473 2474 2475
		}
	}

2476
	req->dcid   = cpu_to_le16(chan->dcid);
2477 2478 2479 2480 2481
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2482
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2483 2484 2485 2486
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2487
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2488

2489
	rsp->scid   = cpu_to_le16(chan->dcid);
2490
	rsp->result = cpu_to_le16(result);
2491
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2492 2493 2494 2495

	return ptr - data;
}

2496
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2497 2498
{
	struct l2cap_conn_rsp rsp;
2499
	struct l2cap_conn *conn = chan->conn;
2500 2501
	u8 buf[128];

2502 2503
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2504 2505 2506 2507 2508
	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);

2509
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2510 2511 2512 2513 2514 2515 2516
		return;

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

2517
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2518 2519 2520 2521 2522
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2523
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2524

2525
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538
		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;
		}
	}

2539 2540 2541 2542 2543 2544 2545 2546 2547 2548
	/* Use sane default values in case a misbehaving remote device
	 * did not send an RFC option.
	 */
	rfc.mode = chan->mode;
	rfc.retrans_timeout = cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
	rfc.monitor_timeout = cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
	rfc.max_pdu_size = cpu_to_le16(chan->imtu);

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

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

2561 2562
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2563
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2564

2565
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2566 2567 2568 2569
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
2570
		cancel_delayed_work(&conn->info_timer);
2571 2572

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2573
		conn->info_ident = 0;
2574

2575 2576 2577 2578 2579 2580
		l2cap_conn_start(conn);
	}

	return 0;
}

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

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2590
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2591 2592 2593 2594

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

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

2601 2602
	parent = pchan->sk;

2603
	lock_sock(parent);
2604

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

L
Linus Torvalds 已提交
2613 2614 2615 2616
	result = L2CAP_CR_NO_MEM;

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

2621 2622
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2623 2624
		goto response;

2625 2626
	sk = chan->sk;

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

	hci_conn_hold(conn->hcon);

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

2641 2642
	bt_accept_enqueue(parent, sk);

2643
	l2cap_chan_add(conn, chan);
2644

2645
	dcid = chan->scid;
L
Linus Torvalds 已提交
2646

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

2649
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2650

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

response:
2675
	release_sock(parent);
L
Linus Torvalds 已提交
2676 2677

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

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

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

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

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

L
Linus Torvalds 已提交
2707 2708 2709 2710 2711 2712 2713
	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;
2714
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725
	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) {
2726
		chan = l2cap_get_chan_by_scid(conn, scid);
2727
		if (!chan)
2728
			return -EFAULT;
L
Linus Torvalds 已提交
2729
	} else {
2730
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2731
		if (!chan)
2732
			return -EFAULT;
L
Linus Torvalds 已提交
2733 2734
	}

2735 2736
	sk = chan->sk;

L
Linus Torvalds 已提交
2737 2738
	switch (result) {
	case L2CAP_CR_SUCCESS:
2739
		l2cap_state_change(chan, BT_CONFIG);
2740
		chan->ident = 0;
2741
		chan->dcid = dcid;
2742
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
2743

2744
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2745 2746
			break;

L
Linus Torvalds 已提交
2747
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2748 2749
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2750 2751 2752
		break;

	case L2CAP_CR_PEND:
2753
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2754 2755 2756
		break;

	default:
2757
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2758 2759 2760
		break;
	}

2761
	release_sock(sk);
L
Linus Torvalds 已提交
2762 2763 2764
	return 0;
}

2765
static inline void set_default_fcs(struct l2cap_chan *chan)
2766 2767 2768 2769
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2770
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2771
		chan->fcs = L2CAP_FCS_NONE;
2772
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
2773
		chan->fcs = L2CAP_FCS_CRC16;
2774 2775
}

2776
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2777 2778 2779 2780
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2781
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2782
	struct sock *sk;
2783
	int len;
L
Linus Torvalds 已提交
2784 2785 2786 2787 2788 2789

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

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

2790
	chan = l2cap_get_chan_by_scid(conn, dcid);
2791
	if (!chan)
L
Linus Torvalds 已提交
2792 2793
		return -ENOENT;

2794 2795
	sk = chan->sk;

2796
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
2797 2798 2799 2800 2801
		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);
2802 2803 2804

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2805
		goto unlock;
2806
	}
2807

2808
	/* Reject if config buffer is too small. */
2809
	len = cmd_len - sizeof(*req);
2810
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
2811
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2812
				l2cap_build_conf_rsp(chan, rsp,
2813 2814 2815 2816 2817
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2818 2819
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2820 2821 2822 2823

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2824
				l2cap_build_conf_rsp(chan, rsp,
2825
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2826 2827 2828 2829
		goto unlock;
	}

	/* Complete config. */
2830
	len = l2cap_parse_conf_req(chan, rsp);
2831
	if (len < 0) {
2832
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2833
		goto unlock;
2834
	}
L
Linus Torvalds 已提交
2835

2836
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2837
	chan->num_conf_rsp++;
2838 2839

	/* Reset config buffer. */
2840
	chan->conf_len = 0;
2841

2842
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
2843 2844
		goto unlock;

2845
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
2846
		set_default_fcs(chan);
2847

2848
		l2cap_state_change(chan, BT_CONNECTED);
2849

2850 2851
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2852
		skb_queue_head_init(&chan->tx_q);
2853
		if (chan->mode == L2CAP_MODE_ERTM)
2854
			l2cap_ertm_init(chan);
2855

2856
		l2cap_chan_ready(chan);
2857 2858 2859
		goto unlock;
	}

2860
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
2861
		u8 buf[64];
L
Linus Torvalds 已提交
2862
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2863 2864
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2865 2866
	}

2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877
	/* Got Conf Rsp PENDING from remote side and asume we sent
	   Conf Rsp PENDING in the code above */
	if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
			test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {

		/* check compatibility */

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

		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2878
					l2cap_build_conf_rsp(chan, rsp,
2879 2880 2881
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

L
Linus Torvalds 已提交
2882
unlock:
2883
	release_sock(sk);
L
Linus Torvalds 已提交
2884 2885 2886 2887 2888 2889 2890
	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;
2891
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2892
	struct sock *sk;
2893
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2894 2895 2896 2897 2898

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

2899 2900
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2901

2902
	chan = l2cap_get_chan_by_scid(conn, scid);
2903
	if (!chan)
L
Linus Torvalds 已提交
2904 2905
		return 0;

2906 2907
	sk = chan->sk;

L
Linus Torvalds 已提交
2908 2909
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2910
		l2cap_conf_rfc_get(chan, rsp->data, len);
2911
		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
2912 2913
		break;

2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932
	case L2CAP_CONF_PENDING:
		set_bit(CONF_REM_CONF_PEND, &chan->conf_state);

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

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

			/* check compatibility */

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

			l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2933
						l2cap_build_conf_rsp(chan, buf,
2934 2935 2936 2937
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

L
Linus Torvalds 已提交
2938
	case L2CAP_CONF_UNACCEPT:
2939
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2940 2941
			char req[64];

2942
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2943
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2944 2945 2946
				goto done;
			}

2947 2948
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2949 2950
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2951
			if (len < 0) {
2952
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2953 2954 2955 2956 2957
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2958
			chan->num_conf_req++;
2959 2960 2961
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2962 2963
		}

2964
	default:
2965
		sk->sk_err = ECONNRESET;
2966 2967
		__set_chan_timer(chan,
				msecs_to_jiffies(L2CAP_DISC_REJ_TIMEOUT));
2968
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2969 2970 2971 2972 2973 2974
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

2977
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
2978
		set_default_fcs(chan);
2979

2980
		l2cap_state_change(chan, BT_CONNECTED);
2981 2982
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2983
		skb_queue_head_init(&chan->tx_q);
2984
		if (chan->mode ==  L2CAP_MODE_ERTM)
2985
			l2cap_ertm_init(chan);
2986

2987
		l2cap_chan_ready(chan);
L
Linus Torvalds 已提交
2988 2989 2990
	}

done:
2991
	release_sock(sk);
L
Linus Torvalds 已提交
2992 2993 2994 2995 2996 2997 2998 2999
	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;
3000
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3001 3002 3003 3004 3005 3006 3007
	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);

3008
	chan = l2cap_get_chan_by_scid(conn, dcid);
3009
	if (!chan)
L
Linus Torvalds 已提交
3010 3011
		return 0;

3012 3013
	sk = chan->sk;

3014 3015
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
3016 3017 3018 3019
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

3020
	l2cap_chan_del(chan, ECONNRESET);
3021
	release_sock(sk);
L
Linus Torvalds 已提交
3022

3023
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
3024 3025 3026 3027 3028 3029 3030
	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;
3031
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3032 3033 3034 3035 3036 3037 3038
	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);

3039
	chan = l2cap_get_chan_by_scid(conn, scid);
3040
	if (!chan)
L
Linus Torvalds 已提交
3041 3042
		return 0;

3043 3044 3045
	sk = chan->sk;

	l2cap_chan_del(chan, 0);
3046
	release_sock(sk);
L
Linus Torvalds 已提交
3047

3048
	chan->ops->close(chan->data);
L
Linus Torvalds 已提交
3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060
	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);

3061 3062
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
3063
		u32 feat_mask = l2cap_feat_mask;
3064 3065 3066
		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);
3067
		if (!disable_ertm)
3068 3069
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
3070
		if (enable_hs)
3071 3072
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
3073

3074
		put_unaligned_le32(feat_mask, rsp->data);
3075 3076
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3077 3078 3079
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3080 3081 3082 3083 3084 3085

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

3086 3087
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3088
		memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3089 3090
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3091 3092 3093 3094 3095 3096 3097
	} 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 已提交
3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111

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

3112 3113 3114 3115 3116
	/* 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;

3117
	cancel_delayed_work(&conn->info_timer);
3118

3119 3120 3121 3122 3123 3124 3125 3126 3127
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

3128
	if (type == L2CAP_IT_FEAT_MASK) {
3129
		conn->feat_mask = get_unaligned_le32(rsp->data);
3130

3131
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145
			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) {
3146
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3147
		conn->info_ident = 0;
3148 3149 3150

		l2cap_conn_start(conn);
	}
3151

L
Linus Torvalds 已提交
3152 3153 3154
	return 0;
}

3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193
static inline int l2cap_create_channel_req(struct l2cap_conn *conn,
					struct l2cap_cmd_hdr *cmd, u16 cmd_len,
					void *data)
{
	struct l2cap_create_chan_req *req = data;
	struct l2cap_create_chan_rsp rsp;
	u16 psm, scid;

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

	if (!enable_hs)
		return -EINVAL;

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

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

	/* Placeholder: Always reject */
	rsp.dcid = 0;
	rsp.scid = cpu_to_le16(scid);
	rsp.result = L2CAP_CR_NO_MEM;
	rsp.status = L2CAP_CS_NO_INFO;

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

	return 0;
}

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

	return l2cap_connect_rsp(conn, cmd, data);
}

3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313
static void l2cap_send_move_chan_rsp(struct l2cap_conn *conn, u8 ident,
							u16 icid, u16 result)
{
	struct l2cap_move_chan_rsp rsp;

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

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

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

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

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

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

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

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

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

	BT_DBG("icid %d", icid);

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

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

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

	icid = le16_to_cpu(req->icid);

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

	if (!enable_hs)
		return -EINVAL;

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

	return 0;
}

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

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

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

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

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

	return 0;
}

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

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

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

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

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

	return 0;
}

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

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

	icid = le16_to_cpu(rsp->icid);

	BT_DBG("icid %d", icid);

	return 0;
}

3314
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341
							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;
3342
	int err;
3343 3344 3345 3346 3347 3348 3349 3350 3351

	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;
3352 3353
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3354 3355 3356 3357 3358 3359 3360
	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));
3361 3362 3363

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3364 3365 3366 3367 3368 3369 3370
		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);

3371 3372 3373
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3374 3375 3376
	return 0;
}

3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425
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;

3426 3427 3428 3429 3430 3431 3432 3433
	case L2CAP_CREATE_CHAN_REQ:
		err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
		break;

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

3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449
	case L2CAP_MOVE_CHAN_REQ:
		err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
		break;

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

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

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

3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466
	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:
3467
		return l2cap_conn_param_update_req(conn, cmd, data);
3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479

	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 已提交
3480 3481 3482 3483
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3484
	int err;
L
Linus Torvalds 已提交
3485 3486 3487 3488

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3489
		u16 cmd_len;
L
Linus Torvalds 已提交
3490 3491 3492 3493
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3494
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3495

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

3498
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3499 3500 3501 3502
			BT_DBG("corrupted command");
			break;
		}

3503 3504 3505 3506
		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 已提交
3507 3508

		if (err) {
3509
			struct l2cap_cmd_rej_unk rej;
3510 3511

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

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

3518 3519
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3520 3521 3522 3523 3524
	}

	kfree_skb(skb);
}

3525
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3526 3527
{
	u16 our_fcs, rcv_fcs;
3528 3529 3530 3531 3532 3533
	int hdr_size;

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

3535
	if (chan->fcs == L2CAP_FCS_CRC16) {
3536
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3537 3538 3539 3540
		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)
3541
			return -EBADMSG;
3542 3543 3544 3545
	}
	return 0;
}

3546
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3547
{
3548
	u32 control = 0;
3549

3550
	chan->frames_sent = 0;
3551

3552
	control |= __set_reqseq(chan, chan->buffer_seq);
3553

3554
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3555
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3556
		l2cap_send_sframe(chan, control);
3557
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3558 3559
	}

3560
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3561
		l2cap_retransmit_frames(chan);
3562

3563
	l2cap_ertm_send(chan);
3564

3565
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3566
			chan->frames_sent == 0) {
3567
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3568
		l2cap_send_sframe(chan, control);
3569 3570 3571
	}
}

3572
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3573 3574
{
	struct sk_buff *next_skb;
3575
	int tx_seq_offset, next_tx_seq_offset;
3576 3577 3578 3579

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

3580
	next_skb = skb_peek(&chan->srej_q);
3581

3582
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3583

3584
	while (next_skb) {
3585 3586 3587
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

3588 3589
		next_tx_seq_offset = __seq_offset(chan,
				bt_cb(next_skb)->tx_seq, chan->buffer_seq);
3590 3591

		if (next_tx_seq_offset > tx_seq_offset) {
3592
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3593
			return 0;
3594 3595
		}

3596
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3597 3598 3599 3600
			next_skb = NULL;
		else
			next_skb = skb_queue_next(&chan->srej_q, next_skb);
	}
3601

3602
	__skb_queue_tail(&chan->srej_q, skb);
3603 3604

	return 0;
3605 3606
}

3607 3608
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3609
{
3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625
	/* 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;
}

3626
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
3627 3628
{
	int err = -EINVAL;
3629

3630 3631
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
3632 3633
		if (chan->sdu)
			break;
3634

3635 3636
		err = chan->ops->recv(chan->data, skb);
		break;
3637

3638
	case L2CAP_SAR_START:
3639 3640
		if (chan->sdu)
			break;
3641

3642
		chan->sdu_len = get_unaligned_le16(skb->data);
3643
		skb_pull(skb, L2CAP_SDULEN_SIZE);
3644

3645 3646 3647 3648
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
3649

3650 3651
		if (skb->len >= chan->sdu_len)
			break;
3652

3653 3654
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
3655

3656 3657
		skb = NULL;
		err = 0;
3658 3659
		break;

3660
	case L2CAP_SAR_CONTINUE:
3661
		if (!chan->sdu)
3662
			break;
3663

3664 3665 3666
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3667

3668 3669
		if (chan->sdu->len >= chan->sdu_len)
			break;
3670

3671
		err = 0;
3672 3673
		break;

3674
	case L2CAP_SAR_END:
3675
		if (!chan->sdu)
3676
			break;
3677

3678 3679 3680
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
3681

3682 3683
		if (chan->sdu->len != chan->sdu_len)
			break;
3684

3685
		err = chan->ops->recv(chan->data, chan->sdu);
3686

3687 3688 3689 3690 3691
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
3692
		}
3693 3694 3695
		break;
	}

3696 3697 3698 3699 3700 3701 3702
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
3703

3704
	return err;
3705 3706
}

3707
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
3708
{
3709
	BT_DBG("chan %p, Enter local busy", chan);
3710

3711 3712
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);

3713
	__set_ack_timer(chan);
3714 3715 3716 3717
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
3718
	u32 control;
3719

3720
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
3721 3722
		goto done;

3723
	control = __set_reqseq(chan, chan->buffer_seq);
3724
	control |= __set_ctrl_poll(chan);
3725
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3726
	l2cap_send_sframe(chan, control);
3727
	chan->retry_count = 1;
3728

3729 3730
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
3731

3732
	set_bit(CONN_WAIT_F, &chan->conn_state);
3733 3734

done:
3735 3736
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
3737

3738
	BT_DBG("chan %p, Exit local busy", chan);
3739 3740
}

3741
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
3742
{
3743 3744 3745 3746 3747
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
3748 3749 3750
	}
}

3751
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
3752 3753
{
	struct sk_buff *skb;
3754
	u32 control;
3755

3756 3757 3758 3759
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

3760 3761 3762
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3763
		skb = skb_dequeue(&chan->srej_q);
3764
		control = __set_ctrl_sar(chan, bt_cb(skb)->sar);
3765
		err = l2cap_reassemble_sdu(chan, skb, control);
3766 3767 3768 3769 3770 3771

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

3772 3773
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
3774 3775 3776
	}
}

3777
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3778 3779
{
	struct srej_list *l, *tmp;
3780
	u32 control;
3781

3782
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3783 3784 3785 3786 3787
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
3788
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3789
		control |= __set_reqseq(chan, l->tx_seq);
3790
		l2cap_send_sframe(chan, control);
3791
		list_del(&l->list);
3792
		list_add_tail(&l->list, &chan->srej_l);
3793 3794 3795
	}
}

3796
static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
3797 3798
{
	struct srej_list *new;
3799
	u32 control;
3800

3801
	while (tx_seq != chan->expected_tx_seq) {
3802
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
3803
		control |= __set_reqseq(chan, chan->expected_tx_seq);
3804
		l2cap_send_sframe(chan, control);
3805 3806

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3807 3808 3809
		if (!new)
			return -ENOMEM;

3810
		new->tx_seq = chan->expected_tx_seq;
3811 3812 3813

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

3814
		list_add_tail(&new->list, &chan->srej_l);
3815
	}
3816 3817

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

	return 0;
3820 3821
}

3822
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
3823
{
3824
	u16 tx_seq = __get_txseq(chan, rx_control);
3825
	u16 req_seq = __get_reqseq(chan, rx_control);
3826
	u8 sar = __get_ctrl_sar(chan, rx_control);
3827
	int tx_seq_offset, expected_tx_seq_offset;
3828
	int num_to_ack = (chan->tx_win/6) + 1;
3829 3830
	int err = 0;

3831
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
3832
							tx_seq, rx_control);
3833

3834
	if (__is_ctrl_final(chan, rx_control) &&
3835
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
3836
		__clear_monitor_timer(chan);
3837
		if (chan->unacked_frames > 0)
3838
			__set_retrans_timer(chan);
3839
		clear_bit(CONN_WAIT_F, &chan->conn_state);
3840 3841
	}

3842 3843
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3844

3845
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3846 3847

	/* invalid tx_seq */
3848
	if (tx_seq_offset >= chan->tx_win) {
3849
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3850 3851 3852
		goto drop;
	}

3853 3854 3855
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
			l2cap_send_ack(chan);
3856
		goto drop;
3857
	}
3858

3859 3860 3861
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

3862
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3863
		struct srej_list *first;
3864

3865
		first = list_first_entry(&chan->srej_l,
3866 3867
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3868
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3869
			l2cap_check_srej_gap(chan, tx_seq);
3870 3871 3872 3873

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

3874
			if (list_empty(&chan->srej_l)) {
3875
				chan->buffer_seq = chan->buffer_seq_srej;
3876
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
3877
				l2cap_send_ack(chan);
3878
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3879 3880 3881
			}
		} else {
			struct srej_list *l;
3882 3883

			/* duplicated tx_seq */
3884
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3885
				goto drop;
3886

3887
			list_for_each_entry(l, &chan->srej_l, list) {
3888
				if (l->tx_seq == tx_seq) {
3889
					l2cap_resend_srejframe(chan, tx_seq);
3890 3891 3892
					return 0;
				}
			}
3893 3894 3895 3896 3897 3898

			err = l2cap_send_srejframe(chan, tx_seq);
			if (err < 0) {
				l2cap_send_disconn_req(chan->conn, chan, -err);
				return err;
			}
3899 3900
		}
	} else {
3901 3902
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
3903 3904 3905 3906 3907

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

3908
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
3909

3910
		BT_DBG("chan %p, Enter SREJ", chan);
3911

3912
		INIT_LIST_HEAD(&chan->srej_l);
3913
		chan->buffer_seq_srej = chan->buffer_seq;
3914

3915
		__skb_queue_head_init(&chan->srej_q);
3916
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3917

3918 3919 3920
		/* Set P-bit only if there are some I-frames to ack. */
		if (__clear_ack_timer(chan))
			set_bit(CONN_SEND_PBIT, &chan->conn_state);
3921

3922 3923 3924 3925 3926
		err = l2cap_send_srejframe(chan, tx_seq);
		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, -err);
			return err;
		}
3927
	}
3928 3929
	return 0;

3930
expected:
3931
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
3932

3933
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
3934 3935
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3936
		__skb_queue_tail(&chan->srej_q, skb);
3937 3938 3939
		return 0;
	}

3940
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
3941 3942
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

3943 3944 3945 3946
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
3947

3948
	if (__is_ctrl_final(chan, rx_control)) {
3949
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3950
			l2cap_retransmit_frames(chan);
3951 3952
	}

3953

3954 3955
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3956
		l2cap_send_ack(chan);
3957 3958
	else
		__set_ack_timer(chan);
3959

3960
	return 0;
3961 3962 3963 3964

drop:
	kfree_skb(skb);
	return 0;
3965 3966
}

3967
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
3968
{
3969
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
3970
				__get_reqseq(chan, rx_control), rx_control);
3971

3972
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
3973
	l2cap_drop_acked_frames(chan);
3974

3975
	if (__is_ctrl_poll(chan, rx_control)) {
3976 3977 3978
		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) &&
3979
					(chan->unacked_frames > 0))
3980
				__set_retrans_timer(chan);
3981

3982
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3983
			l2cap_send_srejtail(chan);
3984
		} else {
3985
			l2cap_send_i_or_rr_or_rnr(chan);
3986
		}
3987

3988
	} else if (__is_ctrl_final(chan, rx_control)) {
3989
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
3990

3991
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
3992
			l2cap_retransmit_frames(chan);
3993

3994
	} else {
3995
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
3996
				(chan->unacked_frames > 0))
3997
			__set_retrans_timer(chan);
3998

3999 4000
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4001
			l2cap_send_ack(chan);
4002
		else
4003
			l2cap_ertm_send(chan);
4004 4005
	}
}
4006

4007
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4008
{
4009
	u16 tx_seq = __get_reqseq(chan, rx_control);
4010

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

4013
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4014

4015 4016
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4017

4018
	if (__is_ctrl_final(chan, rx_control)) {
4019
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4020
			l2cap_retransmit_frames(chan);
4021
	} else {
4022
		l2cap_retransmit_frames(chan);
4023

4024 4025
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
4026 4027
	}
}
4028
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
4029
{
4030
	u16 tx_seq = __get_reqseq(chan, rx_control);
4031

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

4034
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4035

4036
	if (__is_ctrl_poll(chan, rx_control)) {
4037 4038
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
4039

4040
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4041
		l2cap_retransmit_one_frame(chan, tx_seq);
4042

4043
		l2cap_ertm_send(chan);
4044

4045
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4046
			chan->srej_save_reqseq = tx_seq;
4047
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4048
		}
4049
	} else if (__is_ctrl_final(chan, rx_control)) {
4050
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
4051
				chan->srej_save_reqseq == tx_seq)
4052
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4053
		else
4054
			l2cap_retransmit_one_frame(chan, tx_seq);
4055
	} else {
4056
		l2cap_retransmit_one_frame(chan, tx_seq);
4057
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4058
			chan->srej_save_reqseq = tx_seq;
4059
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4060
		}
4061 4062 4063
	}
}

4064
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4065
{
4066
	u16 tx_seq = __get_reqseq(chan, rx_control);
4067

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

4070
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4071 4072
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4073

4074
	if (__is_ctrl_poll(chan, rx_control))
4075
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4076

4077
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4078
		__clear_retrans_timer(chan);
4079
		if (__is_ctrl_poll(chan, rx_control))
4080
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4081
		return;
4082
	}
4083

4084
	if (__is_ctrl_poll(chan, rx_control)) {
4085
		l2cap_send_srejtail(chan);
4086 4087 4088 4089
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
4090 4091
}

4092
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4093
{
4094
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4095

4096
	if (__is_ctrl_final(chan, rx_control) &&
4097
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4098
		__clear_monitor_timer(chan);
4099
		if (chan->unacked_frames > 0)
4100
			__set_retrans_timer(chan);
4101
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4102 4103
	}

4104 4105
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
4106
		l2cap_data_channel_rrframe(chan, rx_control);
4107 4108
		break;

4109
	case L2CAP_SUPER_REJ:
4110
		l2cap_data_channel_rejframe(chan, rx_control);
4111
		break;
4112

4113
	case L2CAP_SUPER_SREJ:
4114
		l2cap_data_channel_srejframe(chan, rx_control);
4115 4116
		break;

4117
	case L2CAP_SUPER_RNR:
4118
		l2cap_data_channel_rnrframe(chan, rx_control);
4119 4120 4121
		break;
	}

4122
	kfree_skb(skb);
4123 4124 4125
	return 0;
}

4126
static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4127
{
4128
	u32 control;
4129
	u16 req_seq;
4130 4131
	int len, next_tx_seq_offset, req_seq_offset;

4132 4133
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
4134 4135 4136 4137 4138 4139 4140
	len = skb->len;

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

4144
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4145
		len -= L2CAP_SDULEN_SIZE;
4146

4147
	if (chan->fcs == L2CAP_FCS_CRC16)
4148
		len -= L2CAP_FCS_SIZE;
4149

4150
	if (len > chan->mps) {
4151
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4152 4153 4154
		goto drop;
	}

4155
	req_seq = __get_reqseq(chan, control);
4156

4157 4158 4159 4160
	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);
4161 4162 4163

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
4164
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4165 4166 4167
		goto drop;
	}

4168
	if (!__is_sframe(chan, control)) {
4169
		if (len < 0) {
4170
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4171 4172 4173
			goto drop;
		}

4174
		l2cap_data_channel_iframe(chan, control, skb);
4175 4176 4177
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
4178
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4179 4180 4181
			goto drop;
		}

4182
		l2cap_data_channel_sframe(chan, control, skb);
4183 4184 4185 4186 4187 4188 4189 4190 4191
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
4192 4193
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
4194
	struct l2cap_chan *chan;
4195
	struct sock *sk = NULL;
4196
	u32 control;
4197
	u16 tx_seq;
4198
	int len;
L
Linus Torvalds 已提交
4199

4200
	chan = l2cap_get_chan_by_scid(conn, cid);
4201
	if (!chan) {
L
Linus Torvalds 已提交
4202 4203 4204 4205
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

4206
	sk = chan->sk;
4207

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

4210
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4211 4212
		goto drop;

4213
	switch (chan->mode) {
4214 4215 4216 4217 4218
	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 已提交
4219

4220
		if (chan->imtu < skb->len)
4221
			goto drop;
L
Linus Torvalds 已提交
4222

4223
		if (!chan->ops->recv(chan->data, skb))
4224 4225 4226 4227
			goto done;
		break;

	case L2CAP_MODE_ERTM:
4228
		l2cap_ertm_data_rcv(chan, skb);
4229

4230
		goto done;
4231

4232
	case L2CAP_MODE_STREAMING:
4233 4234
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
4235 4236
		len = skb->len;

4237
		if (l2cap_check_fcs(chan, skb))
4238 4239
			goto drop;

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

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

4246
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4247 4248
			goto drop;

4249
		tx_seq = __get_txseq(chan, control);
4250

4251 4252 4253 4254 4255 4256
		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;
4257

4258 4259 4260
			/* TODO: Notify userland of missing data */
		}

4261
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
4262 4263 4264

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4265 4266 4267

		goto done;

4268
	default:
4269
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4270 4271
		break;
	}
L
Linus Torvalds 已提交
4272 4273 4274 4275 4276

drop:
	kfree_skb(skb);

done:
4277
	if (sk)
4278
		release_sock(sk);
4279

L
Linus Torvalds 已提交
4280 4281 4282
	return 0;
}

4283
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
4284
{
4285
	struct sock *sk = NULL;
4286
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4287

4288 4289
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
4290 4291
		goto drop;

4292 4293
	sk = chan->sk;

4294
	lock_sock(sk);
4295

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

4298
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4299 4300
		goto drop;

4301
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
4302 4303
		goto drop;

4304
	if (!chan->ops->recv(chan->data, skb))
L
Linus Torvalds 已提交
4305 4306 4307 4308 4309 4310
		goto done;

drop:
	kfree_skb(skb);

done:
4311
	if (sk)
4312
		release_sock(sk);
L
Linus Torvalds 已提交
4313 4314 4315
	return 0;
}

4316 4317
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
4318
	struct sock *sk = NULL;
4319
	struct l2cap_chan *chan;
4320

4321 4322
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
4323 4324
		goto drop;

4325 4326
	sk = chan->sk;

4327
	lock_sock(sk);
4328 4329 4330

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

4331
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4332 4333
		goto drop;

4334
	if (chan->imtu < skb->len)
4335 4336
		goto drop;

4337
	if (!chan->ops->recv(chan->data, skb))
4338 4339 4340 4341 4342 4343 4344
		goto done;

drop:
	kfree_skb(skb);

done:
	if (sk)
4345
		release_sock(sk);
4346 4347 4348
	return 0;
}

L
Linus Torvalds 已提交
4349 4350 4351
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4352 4353
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4354 4355 4356 4357 4358

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

4359 4360 4361 4362 4363
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4364 4365 4366
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4367
	case L2CAP_CID_LE_SIGNALING:
4368
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4369 4370 4371
		l2cap_sig_channel(conn, skb);
		break;

4372
	case L2CAP_CID_CONN_LESS:
4373
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
4374 4375 4376 4377
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4378 4379 4380 4381
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4382 4383 4384 4385 4386
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4387 4388 4389 4390 4391 4392 4393 4394
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

4395
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
L
Linus Torvalds 已提交
4396 4397
{
	int exact = 0, lm1 = 0, lm2 = 0;
4398
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4399 4400 4401 4402

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

	/* Find listening sockets and check their link_mode */
4403 4404 4405
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4406

4407
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4408 4409 4410
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4411
			lm1 |= HCI_LM_ACCEPT;
4412
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4413
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4414
			exact++;
4415 4416
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4417
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4418 4419
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4420
	}
4421
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4422 4423 4424 4425

	return exact ? lm1 : lm2;
}

4426
int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
L
Linus Torvalds 已提交
4427
{
4428 4429
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4430 4431 4432 4433 4434 4435
	BT_DBG("hcon %p bdaddr %s status %d", hcon, batostr(&hcon->dst), status);

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
4436
	} else
4437
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4438 4439 4440 4441

	return 0;
}

4442
int l2cap_disconn_ind(struct hci_conn *hcon)
4443 4444 4445 4446 4447
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4448
	if (!conn)
4449
		return HCI_ERROR_REMOTE_USER_TERM;
4450 4451 4452
	return conn->disc_reason;
}

4453
int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4454 4455 4456
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4457
	l2cap_conn_del(hcon, bt_to_errno(reason));
L
Linus Torvalds 已提交
4458 4459 4460
	return 0;
}

4461
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4462
{
4463
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4464 4465
		return;

4466
	if (encrypt == 0x00) {
4467
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4468
			__clear_chan_timer(chan);
4469 4470
			__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_ENC_TIMEOUT));
4471
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4472
			l2cap_chan_close(chan, ECONNREFUSED);
4473
	} else {
4474
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4475
			__clear_chan_timer(chan);
4476 4477 4478
	}
}

4479
int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4480
{
4481
	struct l2cap_conn *conn = hcon->l2cap_data;
4482
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4483

4484
	if (!conn)
L
Linus Torvalds 已提交
4485
		return 0;
4486

L
Linus Torvalds 已提交
4487 4488
	BT_DBG("conn %p", conn);

4489 4490
	if (hcon->type == LE_LINK) {
		smp_distribute_keys(conn, 0);
4491
		cancel_delayed_work(&conn->security_timer);
4492 4493
	}

4494
	rcu_read_lock();
L
Linus Torvalds 已提交
4495

4496
	list_for_each_entry_rcu(chan, &conn->chan_l, list) {
4497
		struct sock *sk = chan->sk;
4498

L
Linus Torvalds 已提交
4499 4500
		bh_lock_sock(sk);

4501 4502 4503 4504 4505
		BT_DBG("chan->scid %d", chan->scid);

		if (chan->scid == L2CAP_CID_LE_DATA) {
			if (!status && encrypt) {
				chan->sec_level = hcon->sec_level;
4506
				l2cap_chan_ready(chan);
4507 4508 4509 4510 4511 4512
			}

			bh_unlock_sock(sk);
			continue;
		}

4513
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4514 4515 4516 4517
			bh_unlock_sock(sk);
			continue;
		}

4518 4519
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4520
			l2cap_check_encryption(chan, encrypt);
4521 4522 4523 4524
			bh_unlock_sock(sk);
			continue;
		}

4525
		if (chan->state == BT_CONNECT) {
4526 4527
			if (!status) {
				struct l2cap_conn_req req;
4528 4529
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4530

4531
				chan->ident = l2cap_get_ident(conn);
4532
				set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
4533

4534
				l2cap_send_cmd(conn, chan->ident,
4535 4536
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
4537
				__clear_chan_timer(chan);
4538 4539
				__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_DISC_TIMEOUT));
4540
			}
4541
		} else if (chan->state == BT_CONNECT2) {
4542
			struct l2cap_conn_rsp rsp;
4543
			__u16 res, stat;
L
Linus Torvalds 已提交
4544

4545
			if (!status) {
4546 4547 4548 4549
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4550 4551
					if (parent)
						parent->sk_data_ready(parent, 0);
4552
				} else {
4553
					l2cap_state_change(chan, BT_CONFIG);
4554 4555 4556
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4557
			} else {
4558
				l2cap_state_change(chan, BT_DISCONN);
4559 4560
				__set_chan_timer(chan,
					msecs_to_jiffies(L2CAP_DISC_TIMEOUT));
4561 4562
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4563 4564
			}

4565 4566
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4567 4568
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4569 4570
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4571
		}
L
Linus Torvalds 已提交
4572 4573 4574 4575

		bh_unlock_sock(sk);
	}

4576
	rcu_read_unlock();
4577

L
Linus Torvalds 已提交
4578 4579 4580
	return 0;
}

4581
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
L
Linus Torvalds 已提交
4582 4583 4584
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4585 4586 4587 4588
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4589 4590 4591 4592
		goto drop;

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

4593
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4594
		struct l2cap_hdr *hdr;
4595
		struct l2cap_chan *chan;
4596
		u16 cid;
L
Linus Torvalds 已提交
4597 4598 4599 4600 4601 4602 4603 4604 4605 4606
		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);
		}

4607 4608
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4609 4610 4611 4612 4613 4614 4615
			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;
4616
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632

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

4633
		chan = l2cap_get_chan_by_scid(conn, cid);
4634

4635 4636
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4637

4638
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4639 4640
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4641
							chan->imtu);
4642
				release_sock(sk);
4643 4644 4645
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4646
			release_sock(sk);
4647
		}
4648

L
Linus Torvalds 已提交
4649
		/* Allocate skb for the complete frame (with header) */
4650 4651
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4652 4653
			goto drop;

4654
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4655
								skb->len);
L
Linus Torvalds 已提交
4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675
		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;
		}

4676
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4677
								skb->len);
L
Linus Torvalds 已提交
4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691
		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;
}

4692
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4693
{
4694
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4695

4696
	read_lock(&chan_list_lock);
L
Linus Torvalds 已提交
4697

4698 4699
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4700

4701
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4702 4703
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4704
					c->state, __le16_to_cpu(c->psm),
4705 4706
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4707
	}
L
Linus Torvalds 已提交
4708

4709
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4710

4711
	return 0;
L
Linus Torvalds 已提交
4712 4713
}

4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726
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 已提交
4727

4728
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4729 4730
{
	int err;
4731

4732
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4733 4734 4735
	if (err < 0)
		return err;

4736 4737 4738 4739 4740 4741
	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 已提交
4742 4743 4744 4745

	return 0;
}

4746
void l2cap_exit(void)
L
Linus Torvalds 已提交
4747
{
4748
	debugfs_remove(l2cap_debugfs);
4749
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4750 4751
}

4752 4753
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");