l2cap_core.c 106.4 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 221 222
	BT_DBG("%p %s -> %s", chan, state_to_string(chan->state),
						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 %d", chan, 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
	BT_DBG("chan %p state %d socket %p", chan, chan->state, sk->sk_socket);
417

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

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

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

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

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

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

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

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

508
	auth_type = l2cap_get_auth_type(chan);
509

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

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

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

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

	id = conn->tx_ident;

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

	return id;
}

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

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

	if (!skb)
543
		return;
544

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

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

553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568
	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;
569

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

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

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

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

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

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

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

	control |= __set_sframe(chan);
597

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

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

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

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

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

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

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

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

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

633
	l2cap_send_sframe(chan, control);
634 635
}

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

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

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

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

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

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

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

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

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

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

697 698 699
	if (!conn)
		return;

700 701
	sk = chan->sk;

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

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

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

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

	BT_DBG("conn %p", conn);

724
	rcu_read_lock();
725

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

729 730
		bh_lock_sock(sk);

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

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

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

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

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

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

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

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

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

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

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

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

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

		bh_unlock_sock(sk);
	}

806
	rcu_read_unlock();
807 808
}

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

816
	read_lock(&chan_list_lock);
817

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

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

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

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

837
	read_unlock(&chan_list_lock);
838

839
	return c1;
840 841 842 843
}

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

	BT_DBG("");

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

855 856
	parent = pchan->sk;

857
	lock_sock(parent);
858

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

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

869
	sk = chan->sk;
870

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

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

876 877
	bt_accept_enqueue(parent, sk);

878
	l2cap_chan_add(conn, chan);
879

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

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

clean:
886
	release_sock(parent);
887 888
}

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

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

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

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

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

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

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

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

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

918
	rcu_read_lock();
919

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

923
		bh_lock_sock(sk);
924

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

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

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

937
		bh_unlock_sock(sk);
938
	}
939

940
	rcu_read_unlock();
941 942 943 944 945
}

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

	BT_DBG("conn %p", conn);

950
	rcu_read_lock();
951

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

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

959
	rcu_read_unlock();
960 961
}

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

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

970 971 972
	l2cap_conn_start(conn);
}

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

995 996
	hci_chan_del(conn->hchan);

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

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

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

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

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

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

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

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

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

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

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

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

1049 1050
	conn->feat_mask = 0;

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

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

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

1060
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1061

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

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

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

1074
	read_lock(&chan_list_lock);
1075

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

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

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

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

1095
	read_unlock(&chan_list_lock);
1096

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

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

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

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

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

1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169
	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 */
1170
	bacpy(&bt_sk(sk)->dst, dst);
1171 1172
	chan->psm = psm;
	chan->dcid = cid;
L
Linus Torvalds 已提交
1173

1174
	auth_type = l2cap_get_auth_type(chan);
1175

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

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

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

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

1198 1199
	l2cap_chan_add(conn, chan);

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

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

1212 1213
	err = 0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1329
		l2cap_do_send(chan, skb);
1330

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

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

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

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

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

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

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

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

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

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

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

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

1379
	l2cap_do_send(chan, tx_skb);
1380 1381
}

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

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

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

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

1400 1401
		tx_skb = skb_clone(skb, GFP_ATOMIC);

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

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

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

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

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

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

1422
		l2cap_do_send(chan, tx_skb);
1423

1424
		__set_retrans_timer(chan);
1425

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

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

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

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

1437
		chan->frames_sent++;
1438

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

1445 1446 1447
	return nsent;
}

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

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

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

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

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

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

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

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

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

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

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

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

1497
	l2cap_send_sframe(chan, control);
1498 1499
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1555 1556
	skb->priority = priority;

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

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

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

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

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

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

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

1590 1591
	skb->priority = priority;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	while (len > 0) {
		size_t buflen;

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

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

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

	return size;
}

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

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

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

	BT_DBG("conn %p", conn);

1794 1795 1796
	rcu_read_lock();

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

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

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

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

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

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

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

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

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

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

	case 4:
1900
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1901 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
		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:
1927
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1928 1929 1930
		break;

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

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

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

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

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

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

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

	l2cap_chan_put(chan);
1985 1986
}

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

1995 1996 1997
	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);
1998

1999
	skb_queue_head_init(&chan->srej_q);
2000

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2101 2102 2103 2104
		l2cap_txwin_setup(chan);

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

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

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

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

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

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

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

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

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

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

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

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

	return ptr - data;
}

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

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

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

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

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

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

		case L2CAP_CONF_QOS:
			break;

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

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

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

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

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

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

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

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

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

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

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

2255 2256 2257 2258
		break;
	}

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

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

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

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

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

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

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

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

2314
			chan->remote_max_tx = rfc.max_transmit;
2315

2316 2317 2318 2319 2320 2321 2322
			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;
2323

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

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

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

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

		case L2CAP_MODE_STREAMING:
2350 2351 2352 2353 2354 2355 2356
			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;
2357

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

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

2363 2364 2365
			break;

		default:
2366 2367
			result = L2CAP_CONF_UNACCEPT;

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

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

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

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

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

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

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

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

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

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

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

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

		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;
2445 2446 2447
		}
	}

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

2451
	chan->mode = rfc.mode;
2452

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

			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);
			}
2468
			break;
2469

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

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

	return ptr - data;
}

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

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

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

	return ptr - data;
}

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

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

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

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

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

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

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

2538 2539 2540 2541 2542 2543 2544 2545 2546 2547
	/* 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");

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

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

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

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

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

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

	return 0;
}

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

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

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

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

2600 2601
	parent = pchan->sk;

2602
	lock_sock(parent);
2603

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

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

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

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

2624 2625
	sk = chan->sk;

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

	hci_conn_hold(conn->hcon);

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

2640 2641
	bt_accept_enqueue(parent, sk);

2642
	l2cap_chan_add(conn, chan);
2643

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

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

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

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

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

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

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

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

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

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

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

2734 2735
	sk = chan->sk;

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

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

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

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

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

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

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

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

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

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

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

2793 2794
	sk = chan->sk;

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

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

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

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

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

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

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

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

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

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

2847
		l2cap_state_change(chan, BT_CONNECTED);
2848

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

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

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

2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876
	/* 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,
2877
					l2cap_build_conf_rsp(chan, rsp,
2878 2879 2880
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

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

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

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

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

2905 2906
	sk = chan->sk;

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

2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931
	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,
2932
						l2cap_build_conf_rsp(chan, buf,
2933 2934 2935 2936
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

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

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

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

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

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

	if (flags & 0x01)
		goto done;

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

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

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

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

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

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

3011 3012
	sk = chan->sk;

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

	sk->sk_shutdown = SHUTDOWN_MASK;

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

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

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

3042 3043 3044
	sk = chan->sk;

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

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

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

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

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

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

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

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

3116
	cancel_delayed_work(&conn->info_timer);
3117

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

		l2cap_conn_start(conn);

		return 0;
	}

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

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

		l2cap_conn_start(conn);
	}
3150

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

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

3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 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
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;
}

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

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

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

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

3373 3374 3375
	return 0;
}

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

3425 3426 3427 3428 3429 3430 3431 3432
	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;

3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448
	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;

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

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

	l2cap_raw_recv(conn, skb);

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

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

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

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

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

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

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

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

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

	kfree_skb(skb);
}

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

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

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

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

3549
	chan->frames_sent = 0;
3550

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

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

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

3562
	l2cap_ertm_send(chan);
3563

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

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

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

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

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

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

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

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

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

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

	return 0;
3604 3605
}

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

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

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

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

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

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

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

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

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

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

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

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

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

3670
		err = 0;
3671 3672
		break;

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

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

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

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

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

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

3703
	return err;
3704 3705
}

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

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

3712
	__set_ack_timer(chan);
3713 3714 3715 3716
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	return 0;
3819 3820
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3917 3918 3919
		/* 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);
3920

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

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

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

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

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

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

3952

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

3959
	return 0;
3960 3961 3962 3963

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4042
		l2cap_ertm_send(chan);
4043

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

4154
	req_seq = __get_reqseq(chan, control);
4155

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

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

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

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

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

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

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

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

4205
	sk = chan->sk;
4206

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

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

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

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

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

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

4229
		goto done;
4230

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

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

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

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

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

4248
		tx_seq = __get_txseq(chan, control);
4249

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

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

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

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

		goto done;

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

drop:
	kfree_skb(skb);

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

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

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

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

4291 4292
	sk = chan->sk;

4293
	lock_sock(sk);
4294

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

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

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

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

drop:
	kfree_skb(skb);

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

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

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

4324 4325
	sk = chan->sk;

4326
	lock_sock(sk);
4327 4328 4329

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

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

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

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

drop:
	kfree_skb(skb);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	return exact ? lm1 : lm2;
}

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

L
Linus Torvalds 已提交
4429 4430 4431 4432 4433 4434
	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);
4435
	} else
4436
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4437 4438 4439 4440

	return 0;
}

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

	BT_DBG("hcon %p", hcon);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

			bh_unlock_sock(sk);
			continue;
		}

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

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

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

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

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

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

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

		bh_unlock_sock(sk);
	}

4575
	rcu_read_unlock();
4576

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

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

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

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

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

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

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

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

4632
		chan = l2cap_get_chan_by_scid(conn, cid);
4633

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

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

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

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

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

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

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

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

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

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

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

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

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

4731
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4732 4733 4734
	if (err < 0)
		return err;

4735 4736 4737 4738 4739 4740
	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 已提交
4741 4742 4743 4744

	return 0;
}

4745
void l2cap_exit(void)
L
Linus Torvalds 已提交
4746
{
4747
	debugfs_remove(l2cap_debugfs);
4748
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4749 4750
}

4751 4752
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");