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

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

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

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

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

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

#include <linux/module.h>

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

#include <asm/unaligned.h>

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

59
bool disable_ertm;
60

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

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

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

75
/* ---- L2CAP channels ---- */
76

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

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

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

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

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

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

109
	return c;
110 111
}

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

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

123
static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
124
{
125
	struct l2cap_chan *c;
126

127 128
	list_for_each_entry(c, &chan_list, global_l) {
		if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
129
			return c;
130
	}
131
	return NULL;
132 133 134 135
}

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

138
	write_lock(&chan_list_lock);
139

140
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
141 142
		err = -EADDRINUSE;
		goto done;
143 144
	}

145 146 147 148 149 150 151 152 153
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

		err = -EINVAL;
		for (p = 0x1001; p < 0x1100; p += 2)
154
			if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
155 156 157 158 159 160
				chan->psm   = cpu_to_le16(p);
				chan->sport = cpu_to_le16(p);
				err = 0;
				break;
			}
	}
161

162
done:
163
	write_unlock(&chan_list_lock);
164
	return err;
165 166 167 168
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
169
	write_lock(&chan_list_lock);
170 171 172

	chan->scid = scid;

173
	write_unlock(&chan_list_lock);
174 175 176 177

	return 0;
}

178
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
179
{
180
	u16 cid = L2CAP_CID_DYN_START;
181

182
	for (; cid < L2CAP_CID_DYN_END; cid++) {
183
		if (!__l2cap_get_chan_by_scid(conn, cid))
184 185 186 187 188 189
			return cid;
	}

	return 0;
}

190
static void __l2cap_state_change(struct l2cap_chan *chan, int state)
191
{
192
	BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
193 194
						state_to_string(state));

195 196 197 198
	chan->state = state;
	chan->ops->state_change(chan->data, state);
}

199 200 201 202 203 204 205 206 207
static void l2cap_state_change(struct l2cap_chan *chan, int state)
{
	struct sock *sk = chan->sk;

	lock_sock(sk);
	__l2cap_state_change(chan, state);
	release_sock(sk);
}

208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
{
	struct sock *sk = chan->sk;

	sk->sk_err = err;
}

static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
{
	struct sock *sk = chan->sk;

	lock_sock(sk);
	__l2cap_chan_set_err(chan, err);
	release_sock(sk);
}

224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338
/* ---- L2CAP sequence number lists ---- */

/* For ERTM, ordered lists of sequence numbers must be tracked for
 * SREJ requests that are received and for frames that are to be
 * retransmitted. These seq_list functions implement a singly-linked
 * list in an array, where membership in the list can also be checked
 * in constant time. Items can also be added to the tail of the list
 * and removed from the head in constant time, without further memory
 * allocs or frees.
 */

static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
{
	size_t alloc_size, i;

	/* Allocated size is a power of 2 to map sequence numbers
	 * (which may be up to 14 bits) in to a smaller array that is
	 * sized for the negotiated ERTM transmit windows.
	 */
	alloc_size = roundup_pow_of_two(size);

	seq_list->list = kmalloc(sizeof(u16) * alloc_size, GFP_KERNEL);
	if (!seq_list->list)
		return -ENOMEM;

	seq_list->mask = alloc_size - 1;
	seq_list->head = L2CAP_SEQ_LIST_CLEAR;
	seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
	for (i = 0; i < alloc_size; i++)
		seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;

	return 0;
}

static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
{
	kfree(seq_list->list);
}

static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
					   u16 seq)
{
	/* Constant-time check for list membership */
	return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
}

static u16 l2cap_seq_list_remove(struct l2cap_seq_list *seq_list, u16 seq)
{
	u16 mask = seq_list->mask;

	if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) {
		/* In case someone tries to pop the head of an empty list */
		return L2CAP_SEQ_LIST_CLEAR;
	} else if (seq_list->head == seq) {
		/* Head can be removed in constant time */
		seq_list->head = seq_list->list[seq & mask];
		seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;

		if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
			seq_list->head = L2CAP_SEQ_LIST_CLEAR;
			seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
		}
	} else {
		/* Walk the list to find the sequence number */
		u16 prev = seq_list->head;
		while (seq_list->list[prev & mask] != seq) {
			prev = seq_list->list[prev & mask];
			if (prev == L2CAP_SEQ_LIST_TAIL)
				return L2CAP_SEQ_LIST_CLEAR;
		}

		/* Unlink the number from the list and clear it */
		seq_list->list[prev & mask] = seq_list->list[seq & mask];
		seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
		if (seq_list->tail == seq)
			seq_list->tail = prev;
	}
	return seq;
}

static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
{
	/* Remove the head in constant time */
	return l2cap_seq_list_remove(seq_list, seq_list->head);
}

static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
{
	if (seq_list->head != L2CAP_SEQ_LIST_CLEAR) {
		u16 i;
		for (i = 0; i <= seq_list->mask; i++)
			seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;

		seq_list->head = L2CAP_SEQ_LIST_CLEAR;
		seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
	}
}

static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
{
	u16 mask = seq_list->mask;

	/* All appends happen in constant time */

	if (seq_list->list[seq & mask] == L2CAP_SEQ_LIST_CLEAR) {
		if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
			seq_list->head = seq;
		else
			seq_list->list[seq_list->tail & mask] = seq;

		seq_list->tail = seq;
		seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
	}
}

339
static void l2cap_chan_timeout(struct work_struct *work)
340
{
341 342
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							chan_timer.work);
343
	struct l2cap_conn *conn = chan->conn;
344 345
	int reason;

346
	BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
347

348
	mutex_lock(&conn->chan_lock);
349
	l2cap_chan_lock(chan);
350

351
	if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
352
		reason = ECONNREFUSED;
353
	else if (chan->state == BT_CONNECT &&
354 355 356 357 358
					chan->sec_level != BT_SECURITY_SDP)
		reason = ECONNREFUSED;
	else
		reason = ETIMEDOUT;

359
	l2cap_chan_close(chan, reason);
360

361
	l2cap_chan_unlock(chan);
362

363
	chan->ops->close(chan->data);
364 365
	mutex_unlock(&conn->chan_lock);

366
	l2cap_chan_put(chan);
367 368
}

369
struct l2cap_chan *l2cap_chan_create(void)
370 371 372 373 374 375 376
{
	struct l2cap_chan *chan;

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

377 378
	mutex_init(&chan->lock);

379
	write_lock(&chan_list_lock);
380
	list_add(&chan->global_l, &chan_list);
381
	write_unlock(&chan_list_lock);
382

383
	INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
384

385 386
	chan->state = BT_OPEN;

387 388
	atomic_set(&chan->refcnt, 1);

389
	BT_DBG("chan %p", chan);
390

391 392 393
	return chan;
}

394
void l2cap_chan_destroy(struct l2cap_chan *chan)
395
{
396
	write_lock(&chan_list_lock);
397
	list_del(&chan->global_l);
398
	write_unlock(&chan_list_lock);
399

400
	l2cap_chan_put(chan);
401 402
}

403 404 405 406 407 408 409 410 411 412 413
void l2cap_chan_set_defaults(struct l2cap_chan *chan)
{
	chan->fcs  = L2CAP_FCS_CRC16;
	chan->max_tx = L2CAP_DEFAULT_MAX_TX;
	chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
	chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	chan->sec_level = BT_SECURITY_LOW;

	set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
}

414
static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
415
{
416
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
417
	       __le16_to_cpu(chan->psm), chan->dcid);
418

419
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
420

421
	chan->conn = conn;
422

423 424
	switch (chan->chan_type) {
	case L2CAP_CHAN_CONN_ORIENTED:
425 426
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
427
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
428 429
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
430 431
		} else {
			/* Alloc CID for connection-oriented socket */
432
			chan->scid = l2cap_alloc_cid(conn);
433
			chan->omtu = L2CAP_DEFAULT_MTU;
434
		}
435 436 437
		break;

	case L2CAP_CHAN_CONN_LESS:
438
		/* Connectionless socket */
439 440
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
441
		chan->omtu = L2CAP_DEFAULT_MTU;
442 443 444
		break;

	default:
445
		/* Raw socket can send/recv signalling messages only */
446 447
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
448
		chan->omtu = L2CAP_DEFAULT_MTU;
449 450
	}

451 452 453 454 455 456 457
	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;

458
	l2cap_chan_hold(chan);
459

460
	list_add(&chan->list, &conn->chan_l);
461 462
}

463
static void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
464 465 466
{
	mutex_lock(&conn->chan_lock);
	__l2cap_chan_add(conn, chan);
467
	mutex_unlock(&conn->chan_lock);
468 469
}

470
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
471
{
472
	struct sock *sk = chan->sk;
473
	struct l2cap_conn *conn = chan->conn;
474 475
	struct sock *parent = bt_sk(sk)->parent;

476
	__clear_chan_timer(chan);
477

478
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
479

480
	if (conn) {
481
		/* Delete from channel list */
482
		list_del(&chan->list);
483

484
		l2cap_chan_put(chan);
485

486
		chan->conn = NULL;
487 488 489
		hci_conn_put(conn->hcon);
	}

490 491
	lock_sock(sk);

492
	__l2cap_state_change(chan, BT_CLOSED);
493 494 495
	sock_set_flag(sk, SOCK_ZAPPED);

	if (err)
496
		__l2cap_chan_set_err(chan, err);
497 498 499 500 501 502

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

504 505
	release_sock(sk);

506 507
	if (!(test_bit(CONF_OUTPUT_DONE, &chan->conf_state) &&
			test_bit(CONF_INPUT_DONE, &chan->conf_state)))
508
		return;
509

510
	skb_queue_purge(&chan->tx_q);
511

512
	if (chan->mode == L2CAP_MODE_ERTM) {
513 514
		struct srej_list *l, *tmp;

515 516 517
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
518

519
		skb_queue_purge(&chan->srej_q);
520

521 522
		l2cap_seq_list_free(&chan->srej_list);
		l2cap_seq_list_free(&chan->retrans_list);
523
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
524 525 526 527
			list_del(&l->list);
			kfree(l);
		}
	}
528 529
}

530 531 532 533 534 535 536
static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

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

540
		l2cap_chan_lock(chan);
541
		__clear_chan_timer(chan);
542
		l2cap_chan_close(chan, ECONNRESET);
543
		l2cap_chan_unlock(chan);
544

545
		chan->ops->close(chan->data);
546
	}
547 548
}

549
void l2cap_chan_close(struct l2cap_chan *chan, int reason)
550 551 552 553
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

554 555
	BT_DBG("chan %p state %s sk %p", chan,
					state_to_string(chan->state), sk);
556

557
	switch (chan->state) {
558
	case BT_LISTEN:
559
		lock_sock(sk);
560
		l2cap_chan_cleanup_listen(sk);
561

562
		__l2cap_state_change(chan, BT_CLOSED);
563
		sock_set_flag(sk, SOCK_ZAPPED);
564
		release_sock(sk);
565 566 567 568
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
569
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
570
					conn->hcon->type == ACL_LINK) {
571
			__set_chan_timer(chan, sk->sk_sndtimeo);
572 573 574 575 576 577
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
578
		if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
579 580 581 582 583 584 585 586
					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;
587
			l2cap_state_change(chan, BT_DISCONN);
588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605

			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:
606
		lock_sock(sk);
607
		sock_set_flag(sk, SOCK_ZAPPED);
608
		release_sock(sk);
609 610 611 612
		break;
	}
}

613
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
614
{
615
	if (chan->chan_type == L2CAP_CHAN_RAW) {
616
		switch (chan->sec_level) {
617 618 619 620 621 622 623
		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;
		}
624
	} else if (chan->psm == cpu_to_le16(0x0001)) {
625 626
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
627

628
		if (chan->sec_level == BT_SECURITY_HIGH)
629
			return HCI_AT_NO_BONDING_MITM;
630
		else
631
			return HCI_AT_NO_BONDING;
632
	} else {
633
		switch (chan->sec_level) {
634
		case BT_SECURITY_HIGH:
635
			return HCI_AT_GENERAL_BONDING_MITM;
636
		case BT_SECURITY_MEDIUM:
637
			return HCI_AT_GENERAL_BONDING;
638
		default:
639
			return HCI_AT_NO_BONDING;
640
		}
641
	}
642 643 644
}

/* Service level security */
645
int l2cap_chan_check_security(struct l2cap_chan *chan)
646
{
647
	struct l2cap_conn *conn = chan->conn;
648 649
	__u8 auth_type;

650
	auth_type = l2cap_get_auth_type(chan);
651

652
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
653 654
}

655
static u8 l2cap_get_ident(struct l2cap_conn *conn)
656 657 658 659 660 661 662 663 664
{
	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.
	 */

665
	spin_lock(&conn->lock);
666 667 668 669 670 671

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

	id = conn->tx_ident;

672
	spin_unlock(&conn->lock);
673 674 675 676

	return id;
}

677
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
678 679
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
680
	u8 flags;
681 682 683 684

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

	if (!skb)
685
		return;
686

687 688 689 690 691
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

692
	bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
693
	skb->priority = HCI_PRIO_MAX;
694

695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710
	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;
711

712 713
	bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
	hci_send_acl(chan->conn->hchan, skb, flags);
714 715
}

716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775
static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
{
	control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
	control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;

	if (enh & L2CAP_CTRL_FRAME_TYPE) {
		/* S-Frame */
		control->sframe = 1;
		control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
		control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;

		control->sar = 0;
		control->txseq = 0;
	} else {
		/* I-Frame */
		control->sframe = 0;
		control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
		control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;

		control->poll = 0;
		control->super = 0;
	}
}

static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
{
	control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
	control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;

	if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
		/* S-Frame */
		control->sframe = 1;
		control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
		control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;

		control->sar = 0;
		control->txseq = 0;
	} else {
		/* I-Frame */
		control->sframe = 0;
		control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
		control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;

		control->poll = 0;
		control->super = 0;
	}
}

static inline void __unpack_control(struct l2cap_chan *chan,
				    struct sk_buff *skb)
{
	if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
		__unpack_extended_control(get_unaligned_le32(skb->data),
					  &bt_cb(skb)->control);
	} else {
		__unpack_enhanced_control(get_unaligned_le16(skb->data),
					  &bt_cb(skb)->control);
	}
}

776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813
static u32 __pack_extended_control(struct l2cap_ctrl *control)
{
	u32 packed;

	packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
	packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;

	if (control->sframe) {
		packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
		packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
		packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
	} else {
		packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
		packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
	}

	return packed;
}

static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
{
	u16 packed;

	packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
	packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;

	if (control->sframe) {
		packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
		packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
		packed |= L2CAP_CTRL_FRAME_TYPE;
	} else {
		packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
		packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
	}

	return packed;
}

814 815 816 817 818 819 820 821 822 823 824 825 826
static inline void __pack_control(struct l2cap_chan *chan,
				  struct l2cap_ctrl *control,
				  struct sk_buff *skb)
{
	if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
		put_unaligned_le32(__pack_extended_control(control),
				   skb->data + L2CAP_HDR_SIZE);
	} else {
		put_unaligned_le16(__pack_enhanced_control(control),
				   skb->data + L2CAP_HDR_SIZE);
	}
}

827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u32 control)
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
	struct l2cap_conn *conn = chan->conn;
	int count, hlen;

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

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

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

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

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

	control |= __set_sframe(chan);

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

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

	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
		return;

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

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

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

	skb->priority = HCI_PRIO_MAX;
	l2cap_do_send(chan, skb);
}

static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u32 control)
{
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
		set_bit(CONN_RNR_SENT, &chan->conn_state);
	} else
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);

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

	l2cap_send_sframe(chan, control);
}

889
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
890
{
891
	return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
892 893
}

894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
static void l2cap_send_conn_req(struct l2cap_chan *chan)
{
	struct l2cap_conn *conn = chan->conn;
	struct l2cap_conn_req req;

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

	chan->ident = l2cap_get_ident(conn);

	set_bit(CONF_CONNECT_PEND, &chan->conf_state);

	l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
}

909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931
static void l2cap_chan_ready(struct l2cap_chan *chan)
{
	struct sock *sk = chan->sk;
	struct sock *parent;

	lock_sock(sk);

	parent = bt_sk(sk)->parent;

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

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

	__l2cap_state_change(chan, BT_CONNECTED);
	sk->sk_state_change(sk);

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

	release_sock(sk);
}

932
static void l2cap_do_start(struct l2cap_chan *chan)
933
{
934
	struct l2cap_conn *conn = chan->conn;
935

936 937 938 939 940
	if (conn->hcon->type == LE_LINK) {
		l2cap_chan_ready(chan);
		return;
	}

941
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
942 943 944
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

945
		if (l2cap_chan_check_security(chan) &&
946 947
				__l2cap_no_conn_pending(chan))
			l2cap_send_conn_req(chan);
948 949 950 951 952 953 954
	} 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);

955
		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
956 957 958 959 960 961

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

962 963 964
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
965
	if (!disable_ertm)
966 967 968 969 970 971 972 973 974 975 976 977
		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;
	}
}

978
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
979
{
980
	struct sock *sk = chan->sk;
981 982
	struct l2cap_disconn_req req;

983 984 985
	if (!conn)
		return;

986
	if (chan->mode == L2CAP_MODE_ERTM) {
987 988 989
		__clear_retrans_timer(chan);
		__clear_monitor_timer(chan);
		__clear_ack_timer(chan);
990 991
	}

992 993
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
994 995
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
996

997
	lock_sock(sk);
998
	__l2cap_state_change(chan, BT_DISCONN);
999
	__l2cap_chan_set_err(chan, err);
1000
	release_sock(sk);
1001 1002
}

L
Linus Torvalds 已提交
1003
/* ---- L2CAP connections ---- */
1004 1005
static void l2cap_conn_start(struct l2cap_conn *conn)
{
1006
	struct l2cap_chan *chan, *tmp;
1007 1008 1009

	BT_DBG("conn %p", conn);

1010
	mutex_lock(&conn->chan_lock);
1011

1012
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1013
		struct sock *sk = chan->sk;
1014

1015
		l2cap_chan_lock(chan);
1016

1017
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1018
			l2cap_chan_unlock(chan);
1019 1020 1021
			continue;
		}

1022
		if (chan->state == BT_CONNECT) {
1023
			if (!l2cap_chan_check_security(chan) ||
1024
					!__l2cap_no_conn_pending(chan)) {
1025
				l2cap_chan_unlock(chan);
1026 1027
				continue;
			}
1028

1029 1030 1031
			if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
					&& test_bit(CONF_STATE2_DEVICE,
					&chan->conf_state)) {
1032
				l2cap_chan_close(chan, ECONNRESET);
1033
				l2cap_chan_unlock(chan);
1034
				continue;
1035
			}
1036

1037
			l2cap_send_conn_req(chan);
1038

1039
		} else if (chan->state == BT_CONNECT2) {
1040
			struct l2cap_conn_rsp rsp;
1041
			char buf[128];
1042 1043
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
1044

1045
			if (l2cap_chan_check_security(chan)) {
1046
				lock_sock(sk);
1047 1048 1049 1050
				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);
1051 1052
					if (parent)
						parent->sk_data_ready(parent, 0);
1053 1054

				} else {
1055
					__l2cap_state_change(chan, BT_CONFIG);
1056 1057 1058
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
1059
				release_sock(sk);
1060 1061 1062 1063 1064
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

1065 1066
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
1067

1068
			if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1069
					rsp.result != L2CAP_CR_SUCCESS) {
1070
				l2cap_chan_unlock(chan);
1071 1072 1073
				continue;
			}

1074
			set_bit(CONF_REQ_SENT, &chan->conf_state);
1075
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1076 1077
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
1078 1079
		}

1080
		l2cap_chan_unlock(chan);
1081 1082
	}

1083
	mutex_unlock(&conn->chan_lock);
1084 1085
}

1086
/* Find socket with cid and source/destination bdaddr.
1087 1088
 * Returns closest match, locked.
 */
1089
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid,
1090 1091
						    bdaddr_t *src,
						    bdaddr_t *dst)
1092
{
1093
	struct l2cap_chan *c, *c1 = NULL;
1094

1095
	read_lock(&chan_list_lock);
1096

1097 1098
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1099

1100
		if (state && c->state != state)
1101 1102
			continue;

1103
		if (c->scid == cid) {
1104 1105 1106
			int src_match, dst_match;
			int src_any, dst_any;

1107
			/* Exact match. */
1108 1109 1110
			src_match = !bacmp(&bt_sk(sk)->src, src);
			dst_match = !bacmp(&bt_sk(sk)->dst, dst);
			if (src_match && dst_match) {
1111 1112 1113
				read_unlock(&chan_list_lock);
				return c;
			}
1114 1115

			/* Closest match */
1116 1117 1118 1119
			src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
			dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
			if ((src_match && dst_any) || (src_any && dst_match) ||
			    (src_any && dst_any))
1120
				c1 = c;
1121 1122
		}
	}
1123

1124
	read_unlock(&chan_list_lock);
1125

1126
	return c1;
1127 1128 1129 1130
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
1131
	struct sock *parent, *sk;
1132
	struct l2cap_chan *chan, *pchan;
1133 1134 1135 1136

	BT_DBG("");

	/* Check if we have socket listening on cid */
1137
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
1138
					  conn->src, conn->dst);
1139
	if (!pchan)
1140 1141
		return;

1142 1143
	parent = pchan->sk;

1144
	lock_sock(parent);
1145

1146 1147 1148 1149 1150 1151
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

1152 1153
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
1154 1155
		goto clean;

1156
	sk = chan->sk;
1157

1158 1159 1160 1161 1162
	hci_conn_hold(conn->hcon);

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

1163 1164
	bt_accept_enqueue(parent, sk);

1165
	l2cap_chan_add(conn, chan);
1166

1167
	__set_chan_timer(chan, sk->sk_sndtimeo);
1168

1169
	__l2cap_state_change(chan, BT_CONNECTED);
1170 1171 1172
	parent->sk_data_ready(parent, 0);

clean:
1173
	release_sock(parent);
1174 1175
}

1176 1177
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
1178
	struct l2cap_chan *chan;
1179

1180
	BT_DBG("conn %p", conn);
1181

1182 1183 1184
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

1185 1186 1187
	if (conn->hcon->out && conn->hcon->type == LE_LINK)
		smp_conn_security(conn, conn->hcon->pending_sec_level);

1188
	mutex_lock(&conn->chan_lock);
1189

1190
	list_for_each_entry(chan, &conn->chan_l, list) {
1191

1192
		l2cap_chan_lock(chan);
1193

1194
		if (conn->hcon->type == LE_LINK) {
1195
			if (smp_conn_security(conn, chan->sec_level))
1196
				l2cap_chan_ready(chan);
1197

1198
		} else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1199
			struct sock *sk = chan->sk;
1200
			__clear_chan_timer(chan);
1201
			lock_sock(sk);
1202
			__l2cap_state_change(chan, BT_CONNECTED);
1203
			sk->sk_state_change(sk);
1204
			release_sock(sk);
1205

1206
		} else if (chan->state == BT_CONNECT)
1207
			l2cap_do_start(chan);
1208

1209
		l2cap_chan_unlock(chan);
1210
	}
1211

1212
	mutex_unlock(&conn->chan_lock);
1213 1214 1215 1216 1217
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
1218
	struct l2cap_chan *chan;
1219 1220 1221

	BT_DBG("conn %p", conn);

1222
	mutex_lock(&conn->chan_lock);
1223

1224
	list_for_each_entry(chan, &conn->chan_l, list) {
1225
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1226
			__l2cap_chan_set_err(chan, err);
1227 1228
	}

1229
	mutex_unlock(&conn->chan_lock);
1230 1231
}

1232
static void l2cap_info_timeout(struct work_struct *work)
1233
{
1234
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1235
							info_timer.work);
1236

1237
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1238
	conn->info_ident = 0;
1239

1240 1241 1242
	l2cap_conn_start(conn);
}

1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254
static void l2cap_conn_del(struct hci_conn *hcon, int err)
{
	struct l2cap_conn *conn = hcon->l2cap_data;
	struct l2cap_chan *chan, *l;

	if (!conn)
		return;

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

	kfree_skb(conn->rx_skb);

1255 1256
	mutex_lock(&conn->chan_lock);

1257 1258
	/* Kill channels */
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1259
		l2cap_chan_hold(chan);
1260 1261
		l2cap_chan_lock(chan);

1262
		l2cap_chan_del(chan, err);
1263 1264 1265

		l2cap_chan_unlock(chan);

1266
		chan->ops->close(chan->data);
1267
		l2cap_chan_put(chan);
1268 1269
	}

1270 1271
	mutex_unlock(&conn->chan_lock);

1272 1273
	hci_chan_del(conn->hchan);

1274
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1275
		cancel_delayed_work_sync(&conn->info_timer);
1276

1277
	if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1278
		cancel_delayed_work_sync(&conn->security_timer);
1279
		smp_chan_destroy(conn);
1280
	}
1281 1282 1283 1284 1285

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

1286
static void security_timeout(struct work_struct *work)
1287
{
1288 1289
	struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
						security_timer.work);
1290 1291 1292 1293

	l2cap_conn_del(conn->hcon, ETIMEDOUT);
}

L
Linus Torvalds 已提交
1294 1295
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
1296
	struct l2cap_conn *conn = hcon->l2cap_data;
1297
	struct hci_chan *hchan;
L
Linus Torvalds 已提交
1298

1299
	if (conn || status)
L
Linus Torvalds 已提交
1300 1301
		return conn;

1302 1303 1304 1305
	hchan = hci_chan_create(hcon);
	if (!hchan)
		return NULL;

1306
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
1307 1308
	if (!conn) {
		hci_chan_del(hchan);
L
Linus Torvalds 已提交
1309
		return NULL;
1310
	}
L
Linus Torvalds 已提交
1311 1312 1313

	hcon->l2cap_data = conn;
	conn->hcon = hcon;
1314
	conn->hchan = hchan;
L
Linus Torvalds 已提交
1315

1316
	BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1317

1318 1319 1320 1321 1322
	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 已提交
1323 1324 1325
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

1326 1327
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
1328
	spin_lock_init(&conn->lock);
1329
	mutex_init(&conn->chan_lock);
1330 1331

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

1333
	if (hcon->type == LE_LINK)
1334
		INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1335
	else
1336
		INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
D
Dave Young 已提交
1337

1338
	conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1339

L
Linus Torvalds 已提交
1340 1341 1342 1343 1344
	return conn;
}

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

1345
/* Find socket with psm and source / destination bdaddr.
L
Linus Torvalds 已提交
1346 1347
 * Returns closest match.
 */
1348 1349 1350
static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
						   bdaddr_t *src,
						   bdaddr_t *dst)
L
Linus Torvalds 已提交
1351
{
1352
	struct l2cap_chan *c, *c1 = NULL;
L
Linus Torvalds 已提交
1353

1354
	read_lock(&chan_list_lock);
1355

1356 1357
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
1358

1359
		if (state && c->state != state)
L
Linus Torvalds 已提交
1360 1361
			continue;

1362
		if (c->psm == psm) {
1363 1364 1365
			int src_match, dst_match;
			int src_any, dst_any;

L
Linus Torvalds 已提交
1366
			/* Exact match. */
1367 1368 1369
			src_match = !bacmp(&bt_sk(sk)->src, src);
			dst_match = !bacmp(&bt_sk(sk)->dst, dst);
			if (src_match && dst_match) {
1370
				read_unlock(&chan_list_lock);
1371 1372
				return c;
			}
L
Linus Torvalds 已提交
1373 1374

			/* Closest match */
1375 1376 1377 1378
			src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
			dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
			if ((src_match && dst_any) || (src_any && dst_match) ||
			    (src_any && dst_any))
1379
				c1 = c;
L
Linus Torvalds 已提交
1380 1381 1382
		}
	}

1383
	read_unlock(&chan_list_lock);
1384

1385
	return c1;
L
Linus Torvalds 已提交
1386 1387
}

1388 1389
int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
		       bdaddr_t *dst, u8 dst_type)
L
Linus Torvalds 已提交
1390
{
1391
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1392 1393 1394 1395
	bdaddr_t *src = &bt_sk(sk)->src;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1396
	__u8 auth_type;
1397
	int err;
L
Linus Torvalds 已提交
1398

1399 1400
	BT_DBG("%s -> %s (type %u) psm 0x%2.2x", batostr(src), batostr(dst),
	       dst_type, __le16_to_cpu(chan->psm));
L
Linus Torvalds 已提交
1401

1402 1403
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1404 1405
		return -EHOSTUNREACH;

1406
	hci_dev_lock(hdev);
L
Linus Torvalds 已提交
1407

1408
	l2cap_chan_lock(chan);
1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434

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

1435 1436
	lock_sock(sk);

1437 1438 1439 1440 1441 1442
	switch (sk->sk_state) {
	case BT_CONNECT:
	case BT_CONNECT2:
	case BT_CONFIG:
		/* Already connecting */
		err = 0;
1443
		release_sock(sk);
1444 1445 1446 1447 1448
		goto done;

	case BT_CONNECTED:
		/* Already connected */
		err = -EISCONN;
1449
		release_sock(sk);
1450 1451 1452 1453 1454 1455 1456 1457 1458
		goto done;

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

	default:
		err = -EBADFD;
1459
		release_sock(sk);
1460 1461 1462 1463
		goto done;
	}

	/* Set destination address and psm */
1464
	bacpy(&bt_sk(sk)->dst, dst);
1465 1466 1467

	release_sock(sk);

1468 1469
	chan->psm = psm;
	chan->dcid = cid;
L
Linus Torvalds 已提交
1470

1471
	auth_type = l2cap_get_auth_type(chan);
1472

1473
	if (chan->dcid == L2CAP_CID_LE_DATA)
1474
		hcon = hci_connect(hdev, LE_LINK, dst, dst_type,
1475
				   chan->sec_level, auth_type);
1476
	else
1477
		hcon = hci_connect(hdev, ACL_LINK, dst, dst_type,
1478
				   chan->sec_level, auth_type);
1479

1480 1481
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1482
		goto done;
1483
	}
L
Linus Torvalds 已提交
1484 1485 1486 1487

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1488
		err = -ENOMEM;
L
Linus Torvalds 已提交
1489 1490 1491
		goto done;
	}

1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503
	if (hcon->type == LE_LINK) {
		err = 0;

		if (!list_empty(&conn->chan_l)) {
			err = -EBUSY;
			hci_conn_put(hcon);
		}

		if (err)
			goto done;
	}

L
Linus Torvalds 已提交
1504 1505 1506
	/* Update source addr of the socket */
	bacpy(src, conn->src);

1507
	l2cap_chan_unlock(chan);
1508
	l2cap_chan_add(conn, chan);
1509
	l2cap_chan_lock(chan);
1510

1511
	l2cap_state_change(chan, BT_CONNECT);
1512
	__set_chan_timer(chan, sk->sk_sndtimeo);
L
Linus Torvalds 已提交
1513 1514

	if (hcon->state == BT_CONNECTED) {
1515
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1516
			__clear_chan_timer(chan);
1517
			if (l2cap_chan_check_security(chan))
1518
				l2cap_state_change(chan, BT_CONNECTED);
1519
		} else
1520
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1521 1522
	}

1523 1524
	err = 0;

L
Linus Torvalds 已提交
1525
done:
1526
	l2cap_chan_unlock(chan);
1527
	hci_dev_unlock(hdev);
L
Linus Torvalds 已提交
1528 1529 1530 1531
	hci_dev_put(hdev);
	return err;
}

1532
int __l2cap_wait_ack(struct sock *sk)
1533
{
1534
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1535 1536 1537 1538
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1539
	add_wait_queue(sk_sleep(sk), &wait);
1540 1541
	set_current_state(TASK_INTERRUPTIBLE);
	while (chan->unacked_frames > 0 && chan->conn) {
1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552
		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);
1553
		set_current_state(TASK_INTERRUPTIBLE);
1554 1555 1556 1557 1558 1559

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
1560
	remove_wait_queue(sk_sleep(sk), &wait);
1561 1562 1563
	return err;
}

1564
static void l2cap_monitor_timeout(struct work_struct *work)
1565
{
1566 1567
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							monitor_timer.work);
1568

1569
	BT_DBG("chan %p", chan);
1570

1571 1572
	l2cap_chan_lock(chan);

1573
	if (chan->retry_count >= chan->remote_max_tx) {
1574
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1575
		l2cap_chan_unlock(chan);
1576
		l2cap_chan_put(chan);
1577 1578 1579
		return;
	}

1580
	chan->retry_count++;
1581
	__set_monitor_timer(chan);
1582

1583
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1584
	l2cap_chan_unlock(chan);
1585
	l2cap_chan_put(chan);
1586 1587
}

1588
static void l2cap_retrans_timeout(struct work_struct *work)
1589
{
1590 1591
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							retrans_timer.work);
1592

1593
	BT_DBG("chan %p", chan);
1594

1595 1596
	l2cap_chan_lock(chan);

1597
	chan->retry_count = 1;
1598
	__set_monitor_timer(chan);
1599

1600
	set_bit(CONN_WAIT_F, &chan->conn_state);
1601

1602
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1603 1604

	l2cap_chan_unlock(chan);
1605
	l2cap_chan_put(chan);
1606 1607
}

1608
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1609
{
1610
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1611

1612
	while ((skb = skb_peek(&chan->tx_q)) &&
1613
			chan->unacked_frames) {
1614
		if (bt_cb(skb)->control.txseq == chan->expected_ack_seq)
1615
			break;
L
Linus Torvalds 已提交
1616

1617
		skb = skb_dequeue(&chan->tx_q);
1618
		kfree_skb(skb);
L
Linus Torvalds 已提交
1619

1620
		chan->unacked_frames--;
1621
	}
L
Linus Torvalds 已提交
1622

1623
	if (!chan->unacked_frames)
1624
		__clear_retrans_timer(chan);
1625
}
L
Linus Torvalds 已提交
1626

1627
static void l2cap_streaming_send(struct l2cap_chan *chan)
1628
{
1629
	struct sk_buff *skb;
1630 1631
	u32 control;
	u16 fcs;
1632

1633
	while ((skb = skb_dequeue(&chan->tx_q))) {
1634
		control = __get_control(chan, skb->data + L2CAP_HDR_SIZE);
1635
		control |= __set_txseq(chan, chan->next_tx_seq);
1636
		__put_control(chan, control, skb->data + L2CAP_HDR_SIZE);
1637

1638
		if (chan->fcs == L2CAP_FCS_CRC16) {
1639 1640 1641 1642
			fcs = crc16(0, (u8 *)skb->data,
						skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs,
					skb->data + skb->len - L2CAP_FCS_SIZE);
1643 1644
		}

1645
		l2cap_do_send(chan, skb);
1646

1647
		chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1648 1649 1650
	}
}

1651
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u16 tx_seq)
1652 1653
{
	struct sk_buff *skb, *tx_skb;
1654 1655
	u16 fcs;
	u32 control;
1656

1657
	skb = skb_peek(&chan->tx_q);
1658 1659
	if (!skb)
		return;
1660

1661
	while (bt_cb(skb)->control.txseq != tx_seq) {
1662
		if (skb_queue_is_last(&chan->tx_q, skb))
1663
			return;
1664

1665 1666
		skb = skb_queue_next(&chan->tx_q, skb);
	}
1667

1668 1669
	if (bt_cb(skb)->control.retries == chan->remote_max_tx &&
	    chan->remote_max_tx) {
1670
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1671 1672 1673 1674
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
1675
	bt_cb(skb)->control.retries++;
1676 1677

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

1680
	if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1681
		control |= __set_ctrl_final(chan);
1682

1683
	control |= __set_reqseq(chan, chan->buffer_seq);
1684
	control |= __set_txseq(chan, tx_seq);
1685

1686
	__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1687

1688
	if (chan->fcs == L2CAP_FCS_CRC16) {
1689 1690 1691 1692
		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);
1693 1694
	}

1695
	l2cap_do_send(chan, tx_skb);
1696 1697
}

1698
static int l2cap_ertm_send(struct l2cap_chan *chan)
1699 1700
{
	struct sk_buff *skb, *tx_skb;
1701 1702
	u16 fcs;
	u32 control;
1703
	int nsent = 0;
1704

1705
	if (chan->state != BT_CONNECTED)
1706
		return -ENOTCONN;
1707

1708
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1709

1710 1711
		if (bt_cb(skb)->control.retries == chan->remote_max_tx &&
		    chan->remote_max_tx) {
1712
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1713 1714 1715
			break;
		}

1716 1717
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1718
		bt_cb(skb)->control.retries++;
1719

1720
		control = __get_control(chan, tx_skb->data + L2CAP_HDR_SIZE);
1721
		control &= __get_sar_mask(chan);
1722

1723
		if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1724
			control |= __set_ctrl_final(chan);
1725

1726
		control |= __set_reqseq(chan, chan->buffer_seq);
1727
		control |= __set_txseq(chan, chan->next_tx_seq);
1728

1729
		__put_control(chan, control, tx_skb->data + L2CAP_HDR_SIZE);
1730

1731
		if (chan->fcs == L2CAP_FCS_CRC16) {
1732 1733 1734 1735
			fcs = crc16(0, (u8 *)skb->data,
						tx_skb->len - L2CAP_FCS_SIZE);
			put_unaligned_le16(fcs, skb->data +
						tx_skb->len - L2CAP_FCS_SIZE);
1736 1737
		}

1738
		l2cap_do_send(chan, tx_skb);
1739

1740
		__set_retrans_timer(chan);
1741

1742
		bt_cb(skb)->control.txseq = chan->next_tx_seq;
1743 1744

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

1746
		if (bt_cb(skb)->control.retries == 1) {
1747
			chan->unacked_frames++;
1748 1749 1750

			if (!nsent++)
				__clear_ack_timer(chan);
1751
		}
1752

1753
		chan->frames_sent++;
1754

1755 1756
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1757
		else
1758
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1759 1760
	}

1761 1762 1763
	return nsent;
}

1764
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1765 1766 1767
{
	int ret;

1768 1769
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1770

1771
	chan->next_tx_seq = chan->expected_ack_seq;
1772
	ret = l2cap_ertm_send(chan);
1773 1774 1775
	return ret;
}

1776
static void __l2cap_send_ack(struct l2cap_chan *chan)
1777
{
1778
	u32 control = 0;
1779

1780
	control |= __set_reqseq(chan, chan->buffer_seq);
1781

1782
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
1783
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
1784
		set_bit(CONN_RNR_SENT, &chan->conn_state);
1785
		l2cap_send_sframe(chan, control);
1786
		return;
1787
	}
1788

1789
	if (l2cap_ertm_send(chan) > 0)
1790 1791
		return;

1792
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
1793
	l2cap_send_sframe(chan, control);
1794 1795
}

1796 1797 1798 1799 1800 1801
static void l2cap_send_ack(struct l2cap_chan *chan)
{
	__clear_ack_timer(chan);
	__l2cap_send_ack(chan);
}

1802
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1803 1804
{
	struct srej_list *tail;
1805
	u32 control;
1806

1807
	control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
1808
	control |= __set_ctrl_final(chan);
1809

1810
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1811
	control |= __set_reqseq(chan, tail->tx_seq);
1812

1813
	l2cap_send_sframe(chan, control);
1814 1815
}

1816 1817 1818
static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
					 struct msghdr *msg, int len,
					 int count, struct sk_buff *skb)
1819
{
1820
	struct l2cap_conn *conn = chan->conn;
1821
	struct sk_buff **frag;
1822
	int sent = 0;
L
Linus Torvalds 已提交
1823

1824
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1825
		return -EFAULT;
L
Linus Torvalds 已提交
1826 1827 1828 1829 1830 1831 1832 1833 1834

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

1835
		*frag = chan->ops->alloc_skb(chan, count,
1836
					     msg->msg_flags & MSG_DONTWAIT);
1837

1838 1839
		if (IS_ERR(*frag))
			return PTR_ERR(*frag);
1840 1841
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1842

1843 1844
		(*frag)->priority = skb->priority;

L
Linus Torvalds 已提交
1845 1846 1847 1848 1849 1850 1851
		sent += count;
		len  -= count;

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

	return sent;
1852
}
L
Linus Torvalds 已提交
1853

1854 1855 1856
static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1857
{
1858
	struct l2cap_conn *conn = chan->conn;
1859
	struct sk_buff *skb;
1860
	int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
1861 1862
	struct l2cap_hdr *lh;

1863
	BT_DBG("chan %p len %d priority %u", chan, (int)len, priority);
1864 1865

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1866 1867

	skb = chan->ops->alloc_skb(chan, count + hlen,
1868 1869 1870
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1871

1872 1873
	skb->priority = priority;

1874 1875
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1876
	lh->cid = cpu_to_le16(chan->dcid);
1877
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1878
	put_unaligned(chan->psm, skb_put(skb, 2));
1879

1880
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1881 1882 1883 1884 1885 1886 1887
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1888 1889 1890
static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
						u32 priority)
1891
{
1892
	struct l2cap_conn *conn = chan->conn;
1893 1894 1895 1896
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

1897
	BT_DBG("chan %p len %d", chan, (int)len);
1898 1899

	count = min_t(unsigned int, (conn->mtu - hlen), len);
1900 1901

	skb = chan->ops->alloc_skb(chan, count + hlen,
1902 1903 1904
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1905

1906 1907
	skb->priority = priority;

1908 1909
	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1910
	lh->cid = cpu_to_le16(chan->dcid);
1911 1912
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

1913
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1914 1915 1916 1917 1918 1919 1920
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
	return skb;
}

1921 1922
static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
						struct msghdr *msg, size_t len,
1923
						u32 control, u16 sdulen)
1924
{
1925
	struct l2cap_conn *conn = chan->conn;
1926
	struct sk_buff *skb;
1927
	int err, count, hlen;
1928 1929
	struct l2cap_hdr *lh;

1930
	BT_DBG("chan %p len %d", chan, (int)len);
1931

1932 1933 1934
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1935 1936 1937 1938 1939
	if (test_bit(FLAG_EXT_CTRL, &chan->flags))
		hlen = L2CAP_EXT_HDR_SIZE;
	else
		hlen = L2CAP_ENH_HDR_SIZE;

1940
	if (sdulen)
1941
		hlen += L2CAP_SDULEN_SIZE;
1942

1943
	if (chan->fcs == L2CAP_FCS_CRC16)
1944
		hlen += L2CAP_FCS_SIZE;
1945

1946
	count = min_t(unsigned int, (conn->mtu - hlen), len);
1947 1948

	skb = chan->ops->alloc_skb(chan, count + hlen,
1949 1950 1951
				   msg->msg_flags & MSG_DONTWAIT);
	if (IS_ERR(skb))
		return skb;
1952 1953 1954

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1955
	lh->cid = cpu_to_le16(chan->dcid);
1956
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1957 1958 1959

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

1960
	if (sdulen)
1961
		put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
1962

1963
	err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
1964 1965 1966 1967
	if (unlikely(err < 0)) {
		kfree_skb(skb);
		return ERR_PTR(err);
	}
1968

1969
	if (chan->fcs == L2CAP_FCS_CRC16)
1970
		put_unaligned_le16(0, skb_put(skb, L2CAP_FCS_SIZE));
1971

1972
	bt_cb(skb)->control.retries = 0;
1973
	return skb;
L
Linus Torvalds 已提交
1974 1975
}

1976
static int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1977 1978 1979
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
1980
	u32 control;
1981 1982
	size_t size = 0;

1983
	skb_queue_head_init(&sar_queue);
1984
	control = __set_ctrl_sar(chan, L2CAP_SAR_START);
1985
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1986 1987 1988 1989
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1990 1991
	len -= chan->remote_mps;
	size += chan->remote_mps;
1992 1993 1994 1995

	while (len > 0) {
		size_t buflen;

1996
		if (len > chan->remote_mps) {
1997
			control = __set_ctrl_sar(chan, L2CAP_SAR_CONTINUE);
1998
			buflen = chan->remote_mps;
1999
		} else {
2000
			control = __set_ctrl_sar(chan, L2CAP_SAR_END);
2001 2002 2003
			buflen = len;
		}

2004
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
2005 2006 2007 2008 2009 2010 2011 2012 2013
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
2014 2015 2016
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
2017 2018 2019 2020

	return size;
}

2021 2022
int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
								u32 priority)
2023 2024
{
	struct sk_buff *skb;
2025
	u32 control;
2026 2027 2028
	int err;

	/* Connectionless channel */
2029
	if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2030
		skb = l2cap_create_connless_pdu(chan, msg, len, priority);
2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044
		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 */
2045
		skb = l2cap_create_basic_pdu(chan, msg, len, priority);
2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056
		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) {
2057
			control = __set_ctrl_sar(chan, L2CAP_SAR_UNSEGMENTED);
2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080
			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;
		}

2081 2082
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
				test_bit(CONN_WAIT_F, &chan->conn_state)) {
2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100
			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 已提交
2101 2102 2103 2104
/* 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;
2105
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2106 2107 2108

	BT_DBG("conn %p", conn);

2109
	mutex_lock(&conn->chan_lock);
2110

2111
	list_for_each_entry(chan, &conn->chan_l, list) {
2112
		struct sock *sk = chan->sk;
2113
		if (chan->chan_type != L2CAP_CHAN_RAW)
L
Linus Torvalds 已提交
2114 2115 2116 2117 2118
			continue;

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

2123
		if (chan->ops->recv(chan->data, nskb))
L
Linus Torvalds 已提交
2124 2125
			kfree_skb(nskb);
	}
2126

2127
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138
}

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

2139 2140
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
2141 2142 2143 2144 2145 2146 2147 2148 2149

	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);
2150
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2151 2152 2153 2154 2155

	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 已提交
2156 2157 2158 2159

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
2160
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210

	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:
2211
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
2212 2213 2214
		break;

	case 4:
2215
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241
		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:
2242
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
2243 2244 2245
		break;

	case 4:
2246
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
2247 2248 2249 2250 2251 2252 2253 2254 2255 2256
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

2257 2258 2259 2260
static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
{
	struct l2cap_conf_efs efs;

2261
	switch (chan->mode) {
2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287
	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);
}

2288
static void l2cap_ack_timeout(struct work_struct *work)
2289
{
2290 2291
	struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
							ack_timer.work);
2292

2293 2294
	BT_DBG("chan %p", chan);

2295 2296
	l2cap_chan_lock(chan);

2297
	__l2cap_send_ack(chan);
2298 2299

	l2cap_chan_unlock(chan);
2300 2301

	l2cap_chan_put(chan);
2302 2303
}

2304
static inline int l2cap_ertm_init(struct l2cap_chan *chan)
2305
{
2306 2307
	int err;

2308 2309
	chan->next_tx_seq = 0;
	chan->expected_tx_seq = 0;
2310
	chan->expected_ack_seq = 0;
2311
	chan->unacked_frames = 0;
2312
	chan->buffer_seq = 0;
2313 2314
	chan->num_acked = 0;
	chan->frames_sent = 0;
2315 2316 2317 2318 2319 2320 2321 2322 2323 2324
	chan->last_acked_seq = 0;
	chan->sdu = NULL;
	chan->sdu_last_frag = NULL;
	chan->sdu_len = 0;

	if (chan->mode != L2CAP_MODE_ERTM)
		return 0;

	chan->rx_state = L2CAP_RX_STATE_RECV;
	chan->tx_state = L2CAP_TX_STATE_XMIT;
2325

2326 2327 2328
	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);
2329

2330
	skb_queue_head_init(&chan->srej_q);
2331
	skb_queue_head_init(&chan->tx_q);
2332

2333
	INIT_LIST_HEAD(&chan->srej_l);
2334 2335 2336 2337 2338
	err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
	if (err < 0)
		return err;

	return l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
2339 2340
}

2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353
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;
	}
}

2354 2355 2356 2357 2358
static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
}

2359 2360 2361 2362 2363
static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
{
	return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
}

2364 2365 2366
static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
{
	if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
2367
						__l2cap_ews_supported(chan)) {
2368 2369
		/* use extended control field */
		set_bit(FLAG_EXT_CTRL, &chan->flags);
2370 2371
		chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
	} else {
2372 2373
		chan->tx_win = min_t(u16, chan->tx_win,
						L2CAP_DEFAULT_TX_WINDOW);
2374 2375
		chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
	}
2376 2377
}

2378
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2379 2380
{
	struct l2cap_conf_req *req = data;
2381
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
2382
	void *ptr = req->data;
2383
	u16 size;
L
Linus Torvalds 已提交
2384

2385
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2386

2387
	if (chan->num_conf_req || chan->num_conf_rsp)
2388 2389
		goto done;

2390
	switch (chan->mode) {
2391 2392
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2393
		if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
2394 2395
			break;

2396 2397 2398
		if (__l2cap_efs_supported(chan))
			set_bit(FLAG_EFS_ENABLE, &chan->flags);

2399
		/* fall through */
2400
	default:
2401
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
2402 2403 2404 2405
		break;
	}

done:
2406 2407
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2408

2409
	switch (chan->mode) {
2410
	case L2CAP_MODE_BASIC:
2411 2412
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
2413 2414
			break;

2415 2416 2417 2418 2419 2420 2421
		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;

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

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
2428
		rfc.max_transmit    = chan->max_tx;
2429 2430
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
2431 2432 2433 2434 2435 2436

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

2438 2439 2440 2441
		l2cap_txwin_setup(chan);

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

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

2446 2447 2448
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2449
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2450 2451
			break;

2452
		if (chan->fcs == L2CAP_FCS_NONE ||
2453
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2454 2455
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2456
		}
2457 2458 2459 2460

		if (test_bit(FLAG_EXT_CTRL, &chan->flags))
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
								chan->tx_win);
2461 2462 2463 2464 2465 2466 2467 2468
		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;
2469 2470 2471 2472 2473 2474

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

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

2479 2480 2481
		if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
			l2cap_add_opt_efs(&ptr, chan);

2482
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
2483 2484
			break;

2485
		if (chan->fcs == L2CAP_FCS_NONE ||
2486
				test_bit(CONF_NO_FCS_RECV, &chan->conf_state)) {
2487 2488
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
2489
		}
2490 2491
		break;
	}
L
Linus Torvalds 已提交
2492

2493
	req->dcid  = cpu_to_le16(chan->dcid);
2494
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
2495 2496 2497 2498

	return ptr - data;
}

2499
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
2500
{
2501 2502
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
2503 2504
	void *req = chan->conf_req;
	int len = chan->conf_len;
2505 2506
	int type, hint, olen;
	unsigned long val;
2507
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2508 2509
	struct l2cap_conf_efs efs;
	u8 remote_efs = 0;
2510
	u16 mtu = L2CAP_DEFAULT_MTU;
2511
	u16 result = L2CAP_CONF_SUCCESS;
2512
	u16 size;
L
Linus Torvalds 已提交
2513

2514
	BT_DBG("chan %p", chan);
2515

2516 2517
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
2518

2519
		hint  = type & L2CAP_CONF_HINT;
2520
		type &= L2CAP_CONF_MASK;
2521 2522 2523

		switch (type) {
		case L2CAP_CONF_MTU:
2524
			mtu = val;
2525 2526 2527
			break;

		case L2CAP_CONF_FLUSH_TO:
2528
			chan->flush_to = val;
2529 2530 2531 2532 2533
			break;

		case L2CAP_CONF_QOS:
			break;

2534 2535 2536 2537 2538
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

2539 2540
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
2541
				set_bit(CONF_NO_FCS_RECV, &chan->conf_state);
2542
			break;
2543

2544 2545 2546 2547
		case L2CAP_CONF_EFS:
			remote_efs = 1;
			if (olen == sizeof(efs))
				memcpy(&efs, (void *) val, olen);
2548 2549
			break;

2550 2551 2552
		case L2CAP_CONF_EWS:
			if (!enable_hs)
				return -ECONNREFUSED;
2553

2554 2555
			set_bit(FLAG_EXT_CTRL, &chan->flags);
			set_bit(CONF_EWS_RECV, &chan->conf_state);
2556
			chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
2557
			chan->remote_tx_win = val;
2558 2559
			break;

2560 2561 2562 2563 2564 2565 2566 2567 2568 2569
		default:
			if (hint)
				break;

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

2570
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
2571 2572
		goto done;

2573
	switch (chan->mode) {
2574 2575
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
2576
		if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
2577
			chan->mode = l2cap_select_mode(rfc.mode,
2578
					chan->conn->feat_mask);
2579 2580 2581
			break;
		}

2582 2583 2584 2585 2586 2587 2588
		if (remote_efs) {
			if (__l2cap_efs_supported(chan))
				set_bit(FLAG_EFS_ENABLE, &chan->flags);
			else
				return -ECONNREFUSED;
		}

2589
		if (chan->mode != rfc.mode)
2590
			return -ECONNREFUSED;
2591

2592 2593 2594 2595
		break;
	}

done:
2596
	if (chan->mode != rfc.mode) {
2597
		result = L2CAP_CONF_UNACCEPT;
2598
		rfc.mode = chan->mode;
2599

2600
		if (chan->num_conf_rsp == 1)
2601 2602 2603 2604 2605 2606
			return -ECONNREFUSED;

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

2607 2608 2609 2610
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

2611 2612 2613
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
2614
			chan->omtu = mtu;
2615
			set_bit(CONF_MTU_DONE, &chan->conf_state);
2616
		}
2617
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
2618

2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629
		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,
2630
							sizeof(efs),
2631
							(unsigned long) &efs);
2632
			} else {
2633
				/* Send PENDING Conf Rsp */
2634 2635
				result = L2CAP_CONF_PENDING;
				set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
2636 2637 2638
			}
		}

2639 2640
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
2641
			chan->fcs = L2CAP_FCS_NONE;
2642
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2643 2644 2645
			break;

		case L2CAP_MODE_ERTM:
2646 2647 2648 2649
			if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
				chan->remote_tx_win = rfc.txwin_size;
			else
				rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
2650

2651
			chan->remote_max_tx = rfc.max_transmit;
2652

2653 2654 2655 2656 2657 2658 2659
			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;
2660

2661
			rfc.retrans_timeout =
2662
				__constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
2663
			rfc.monitor_timeout =
2664
				__constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
2665

2666
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2667 2668 2669 2670

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

2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683
			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);
			}
2684 2685 2686
			break;

		case L2CAP_MODE_STREAMING:
2687 2688 2689 2690 2691 2692 2693
			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;
2694

2695
			set_bit(CONF_MODE_DONE, &chan->conf_state);
2696 2697 2698 2699

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

2700 2701 2702
			break;

		default:
2703 2704
			result = L2CAP_CONF_UNACCEPT;

2705
			memset(&rfc, 0, sizeof(rfc));
2706
			rfc.mode = chan->mode;
2707
		}
2708

2709
		if (result == L2CAP_CONF_SUCCESS)
2710
			set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
2711
	}
2712
	rsp->scid   = cpu_to_le16(chan->dcid);
2713 2714 2715 2716
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2717 2718
}

2719
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2720 2721 2722 2723 2724
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
2725
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
2726
	struct l2cap_conf_efs efs;
2727

2728
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2729 2730 2731 2732 2733 2734 2735 2736

	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;
2737
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2738
			} else
2739 2740
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2741 2742 2743
			break;

		case L2CAP_CONF_FLUSH_TO:
2744
			chan->flush_to = val;
2745
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2746
							2, chan->flush_to);
2747 2748 2749 2750 2751 2752
			break;

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

2753
			if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
2754
							rfc.mode != chan->mode)
2755 2756
				return -ECONNREFUSED;

2757
			chan->fcs = 0;
2758 2759 2760 2761

			l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
					sizeof(rfc), (unsigned long) &rfc);
			break;
2762 2763 2764 2765

		case L2CAP_CONF_EWS:
			chan->tx_win = min_t(u16, val,
						L2CAP_DEFAULT_EXT_WINDOW);
2766 2767
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
							chan->tx_win);
2768
			break;
2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781

		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;
2782 2783 2784
		}
	}

2785
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2786 2787
		return -ECONNREFUSED;

2788
	chan->mode = rfc.mode;
2789

2790
	if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
2791 2792
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2793 2794 2795
			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);
2796 2797 2798 2799 2800 2801 2802 2803 2804

			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);
			}
2805
			break;
2806

2807
		case L2CAP_MODE_STREAMING:
2808
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2809 2810 2811
		}
	}

2812
	req->dcid   = cpu_to_le16(chan->dcid);
2813 2814 2815 2816 2817
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2818
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2819 2820 2821 2822
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2823
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2824

2825
	rsp->scid   = cpu_to_le16(chan->dcid);
2826
	rsp->result = cpu_to_le16(result);
2827
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2828 2829 2830 2831

	return ptr - data;
}

2832
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2833 2834
{
	struct l2cap_conn_rsp rsp;
2835
	struct l2cap_conn *conn = chan->conn;
2836 2837
	u8 buf[128];

2838 2839
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2840 2841 2842 2843 2844
	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);

2845
	if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
2846 2847 2848 2849 2850 2851 2852
		return;

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

2853
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2854 2855 2856 2857 2858
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2859
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2860

2861
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874
		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;
		}
	}

2875 2876 2877 2878 2879 2880 2881 2882 2883 2884
	/* 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");

2885 2886 2887
done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2888 2889 2890
		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);
2891 2892
		break;
	case L2CAP_MODE_STREAMING:
2893
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2894 2895 2896
	}
}

2897 2898
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
2899
	struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
2900

2901
	if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
2902 2903 2904 2905
		return 0;

	if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
					cmd->ident == conn->info_ident) {
2906
		cancel_delayed_work(&conn->info_timer);
2907 2908

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2909
		conn->info_ident = 0;
2910

2911 2912 2913 2914 2915 2916
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2917 2918 2919 2920
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;
2921
	struct l2cap_chan *chan = NULL, *pchan;
2922
	struct sock *parent, *sk = NULL;
2923
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2924 2925

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2926
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2927

2928
	BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
L
Linus Torvalds 已提交
2929 2930

	/* Check if we have socket listening on psm */
2931
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src, conn->dst);
2932
	if (!pchan) {
L
Linus Torvalds 已提交
2933 2934 2935 2936
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2937 2938
	parent = pchan->sk;

2939
	mutex_lock(&conn->chan_lock);
2940
	lock_sock(parent);
2941

2942 2943 2944
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2945
		conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
2946 2947 2948 2949
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2950 2951 2952 2953
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2954
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2955 2956 2957
		goto response;
	}

2958 2959
	chan = pchan->ops->new_connection(pchan->data);
	if (!chan)
L
Linus Torvalds 已提交
2960 2961
		goto response;

2962 2963
	sk = chan->sk;

L
Linus Torvalds 已提交
2964
	/* Check if we already have channel with that dcid */
2965
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
L
Linus Torvalds 已提交
2966
		sock_set_flag(sk, SOCK_ZAPPED);
2967
		chan->ops->close(chan->data);
L
Linus Torvalds 已提交
2968 2969 2970 2971 2972 2973 2974
		goto response;
	}

	hci_conn_hold(conn->hcon);

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

2978 2979
	bt_accept_enqueue(parent, sk);

2980
	__l2cap_chan_add(conn, chan);
2981

2982
	dcid = chan->scid;
L
Linus Torvalds 已提交
2983

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

2986
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2987

2988
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2989
		if (l2cap_chan_check_security(chan)) {
2990
			if (bt_sk(sk)->defer_setup) {
2991
				__l2cap_state_change(chan, BT_CONNECT2);
2992 2993 2994 2995
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
2996
				__l2cap_state_change(chan, BT_CONFIG);
2997 2998 2999
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
3000
		} else {
3001
			__l2cap_state_change(chan, BT_CONNECT2);
3002 3003 3004 3005
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
3006
		__l2cap_state_change(chan, BT_CONNECT2);
3007 3008
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
3009 3010 3011
	}

response:
3012
	release_sock(parent);
3013
	mutex_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
3014 3015

sendresp:
3016 3017 3018 3019
	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 已提交
3020
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
3021 3022 3023 3024 3025 3026 3027 3028

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

3029
		schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3030 3031 3032 3033 3034

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

3035
	if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3036 3037
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
3038
		set_bit(CONF_REQ_SENT, &chan->conf_state);
3039
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3040 3041
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
3042 3043
	}

L
Linus Torvalds 已提交
3044 3045 3046 3047 3048 3049 3050
	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;
3051
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3052
	u8 req[128];
3053
	int err;
L
Linus Torvalds 已提交
3054 3055 3056 3057 3058 3059

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

3060 3061
	BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
						dcid, scid, result, status);
L
Linus Torvalds 已提交
3062

3063 3064
	mutex_lock(&conn->chan_lock);

L
Linus Torvalds 已提交
3065
	if (scid) {
3066 3067 3068 3069 3070
		chan = __l2cap_get_chan_by_scid(conn, scid);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
3071
	} else {
3072 3073 3074 3075 3076
		chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
		if (!chan) {
			err = -EFAULT;
			goto unlock;
		}
L
Linus Torvalds 已提交
3077 3078
	}

3079 3080
	err = 0;

3081
	l2cap_chan_lock(chan);
3082

L
Linus Torvalds 已提交
3083 3084
	switch (result) {
	case L2CAP_CR_SUCCESS:
3085
		l2cap_state_change(chan, BT_CONFIG);
3086
		chan->ident = 0;
3087
		chan->dcid = dcid;
3088
		clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
3089

3090
		if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3091 3092
			break;

L
Linus Torvalds 已提交
3093
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3094 3095
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
3096 3097 3098
		break;

	case L2CAP_CR_PEND:
3099
		set_bit(CONF_CONNECT_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
3100 3101 3102
		break;

	default:
3103
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
3104 3105 3106
		break;
	}

3107
	l2cap_chan_unlock(chan);
3108 3109 3110 3111 3112

unlock:
	mutex_unlock(&conn->chan_lock);

	return err;
L
Linus Torvalds 已提交
3113 3114
}

3115
static inline void set_default_fcs(struct l2cap_chan *chan)
3116 3117 3118 3119
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
3120
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
3121
		chan->fcs = L2CAP_FCS_NONE;
3122
	else if (!test_bit(CONF_NO_FCS_RECV, &chan->conf_state))
3123
		chan->fcs = L2CAP_FCS_CRC16;
3124 3125
}

3126
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
3127 3128 3129 3130
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
3131
	struct l2cap_chan *chan;
3132
	int len, err = 0;
L
Linus Torvalds 已提交
3133 3134 3135 3136 3137 3138

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

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

3139
	chan = l2cap_get_chan_by_scid(conn, dcid);
3140
	if (!chan)
L
Linus Torvalds 已提交
3141 3142
		return -ENOENT;

3143
	l2cap_chan_lock(chan);
3144

3145
	if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
3146 3147 3148 3149 3150
		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);
3151 3152 3153

		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
3154
		goto unlock;
3155
	}
3156

3157
	/* Reject if config buffer is too small. */
3158
	len = cmd_len - sizeof(*req);
3159
	if (len < 0 || chan->conf_len + len > sizeof(chan->conf_req)) {
3160
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3161
				l2cap_build_conf_rsp(chan, rsp,
3162 3163 3164 3165 3166
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
3167 3168
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
3169 3170 3171 3172

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3173
				l2cap_build_conf_rsp(chan, rsp,
3174
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
3175 3176 3177 3178
		goto unlock;
	}

	/* Complete config. */
3179
	len = l2cap_parse_conf_req(chan, rsp);
3180
	if (len < 0) {
3181
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
3182
		goto unlock;
3183
	}
L
Linus Torvalds 已提交
3184

3185
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
3186
	chan->num_conf_rsp++;
3187 3188

	/* Reset config buffer. */
3189
	chan->conf_len = 0;
3190

3191
	if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
3192 3193
		goto unlock;

3194
	if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
3195
		set_default_fcs(chan);
3196

3197
		l2cap_state_change(chan, BT_CONNECTED);
3198

3199 3200
		if (chan->mode == L2CAP_MODE_ERTM ||
		    chan->mode == L2CAP_MODE_STREAMING)
3201 3202 3203 3204 3205 3206
			err = l2cap_ertm_init(chan);

		if (err < 0)
			l2cap_send_disconn_req(chan->conn, chan, -err);
		else
			l2cap_chan_ready(chan);
3207

3208 3209 3210
		goto unlock;
	}

3211
	if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
3212
		u8 buf[64];
L
Linus Torvalds 已提交
3213
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3214 3215
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
3216 3217
	}

3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228
	/* 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,
3229
					l2cap_build_conf_rsp(chan, rsp,
3230 3231 3232
					L2CAP_CONF_SUCCESS, 0x0000), rsp);
	}

L
Linus Torvalds 已提交
3233
unlock:
3234
	l2cap_chan_unlock(chan);
3235
	return err;
L
Linus Torvalds 已提交
3236 3237 3238 3239 3240 3241
}

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;
3242
	struct l2cap_chan *chan;
3243
	int len = le16_to_cpu(cmd->len) - sizeof(*rsp);
3244
	int err = 0;
L
Linus Torvalds 已提交
3245 3246 3247 3248 3249

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

3250 3251
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
	       result, len);
L
Linus Torvalds 已提交
3252

3253
	chan = l2cap_get_chan_by_scid(conn, scid);
3254
	if (!chan)
L
Linus Torvalds 已提交
3255 3256
		return 0;

3257
	l2cap_chan_lock(chan);
3258

L
Linus Torvalds 已提交
3259 3260
	switch (result) {
	case L2CAP_CONF_SUCCESS:
3261
		l2cap_conf_rfc_get(chan, rsp->data, len);
3262
		clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
L
Linus Torvalds 已提交
3263 3264
		break;

3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283
	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,
3284
						l2cap_build_conf_rsp(chan, buf,
3285 3286 3287 3288
						L2CAP_CONF_SUCCESS, 0x0000), buf);
		}
		goto done;

L
Linus Torvalds 已提交
3289
	case L2CAP_CONF_UNACCEPT:
3290
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
3291 3292
			char req[64];

3293
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
3294
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
3295 3296 3297
				goto done;
			}

3298 3299
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
3300 3301
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
3302
			if (len < 0) {
3303
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
3304 3305 3306 3307 3308
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
3309
			chan->num_conf_req++;
3310 3311 3312
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
3313 3314
		}

3315
	default:
3316
		l2cap_chan_set_err(chan, ECONNRESET);
3317

3318
		__set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
3319
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
3320 3321 3322 3323 3324 3325
		goto done;
	}

	if (flags & 0x01)
		goto done;

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

3328
	if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
3329
		set_default_fcs(chan);
3330

3331
		l2cap_state_change(chan, BT_CONNECTED);
3332 3333
		if (chan->mode == L2CAP_MODE_ERTM ||
		    chan->mode == L2CAP_MODE_STREAMING)
3334
			err = l2cap_ertm_init(chan);
3335

3336 3337 3338 3339
		if (err < 0)
			l2cap_send_disconn_req(chan->conn, chan, -err);
		else
			l2cap_chan_ready(chan);
L
Linus Torvalds 已提交
3340 3341 3342
	}

done:
3343
	l2cap_chan_unlock(chan);
3344
	return err;
L
Linus Torvalds 已提交
3345 3346 3347 3348 3349 3350 3351
}

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;
3352
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3353 3354 3355 3356 3357 3358 3359
	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);

3360 3361 3362 3363 3364
	mutex_lock(&conn->chan_lock);

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

3368 3369
	l2cap_chan_lock(chan);

3370 3371
	sk = chan->sk;

3372 3373
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
3374 3375
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

3376
	lock_sock(sk);
L
Linus Torvalds 已提交
3377
	sk->sk_shutdown = SHUTDOWN_MASK;
3378
	release_sock(sk);
L
Linus Torvalds 已提交
3379

3380
	l2cap_chan_hold(chan);
3381
	l2cap_chan_del(chan, ECONNRESET);
3382 3383

	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
3384

3385
	chan->ops->close(chan->data);
3386
	l2cap_chan_put(chan);
3387 3388 3389

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3390 3391 3392 3393 3394 3395 3396
	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;
3397
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3398 3399 3400 3401 3402 3403

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

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

3404 3405 3406 3407 3408
	mutex_lock(&conn->chan_lock);

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

3412
	l2cap_chan_lock(chan);
3413

3414
	l2cap_chan_hold(chan);
3415
	l2cap_chan_del(chan, 0);
3416 3417

	l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
3418

3419
	chan->ops->close(chan->data);
3420
	l2cap_chan_put(chan);
3421 3422 3423

	mutex_unlock(&conn->chan_lock);

L
Linus Torvalds 已提交
3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435
	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);

3436 3437
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
3438
		u32 feat_mask = l2cap_feat_mask;
3439 3440 3441
		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);
3442
		if (!disable_ertm)
3443 3444
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
3445
		if (enable_hs)
3446 3447
			feat_mask |= L2CAP_FEAT_EXT_FLOW
						| L2CAP_FEAT_EXT_WINDOW;
3448

3449
		put_unaligned_le32(feat_mask, rsp->data);
3450 3451
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3452 3453 3454
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
3455 3456 3457 3458 3459 3460

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

3461 3462
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
3463
		memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
3464 3465
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
3466 3467 3468 3469 3470 3471 3472
	} 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 已提交
3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486

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

3487 3488 3489 3490 3491
	/* 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;

3492
	cancel_delayed_work(&conn->info_timer);
3493

3494 3495 3496 3497 3498 3499 3500 3501 3502
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

3503 3504
	switch (type) {
	case L2CAP_IT_FEAT_MASK:
3505
		conn->feat_mask = get_unaligned_le32(rsp->data);
3506

3507
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520
			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);
		}
3521 3522 3523 3524
		break;

	case L2CAP_IT_FIXED_CHAN:
		conn->fixed_chan_mask = rsp->data[0];
3525
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3526
		conn->info_ident = 0;
3527 3528

		l2cap_conn_start(conn);
3529
		break;
3530
	}
3531

L
Linus Torvalds 已提交
3532 3533 3534
	return 0;
}

3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556
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);
3557 3558
	rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
	rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573

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

3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693
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;
}

3694
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721
							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;
3722
	int err;
3723 3724 3725 3726 3727 3728 3729 3730 3731

	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;
3732 3733
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
3734 3735 3736 3737 3738 3739 3740
	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));
3741 3742 3743

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
3744 3745 3746 3747 3748 3749 3750
		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);

3751 3752 3753
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

3754 3755 3756
	return 0;
}

3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805
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;

3806 3807 3808 3809 3810 3811 3812 3813
	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;

3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829
	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;

3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846
	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:
3847
		return l2cap_conn_param_update_req(conn, cmd, data);
3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859

	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 已提交
3860 3861 3862 3863
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
3864
	int err;
L
Linus Torvalds 已提交
3865 3866 3867 3868

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
3869
		u16 cmd_len;
L
Linus Torvalds 已提交
3870 3871 3872 3873
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

3874
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
3875

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

3878
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
3879 3880 3881 3882
			BT_DBG("corrupted command");
			break;
		}

3883 3884 3885 3886
		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 已提交
3887 3888

		if (err) {
3889
			struct l2cap_cmd_rej_unk rej;
3890 3891

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

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

3898 3899
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
3900 3901 3902 3903 3904
	}

	kfree_skb(skb);
}

3905
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
3906 3907
{
	u16 our_fcs, rcv_fcs;
3908 3909 3910 3911 3912 3913
	int hdr_size;

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

3915
	if (chan->fcs == L2CAP_FCS_CRC16) {
3916
		skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
3917 3918 3919 3920
		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)
3921
			return -EBADMSG;
3922 3923 3924 3925
	}
	return 0;
}

3926
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
3927
{
3928
	u32 control = 0;
3929

3930
	chan->frames_sent = 0;
3931

3932
	control |= __set_reqseq(chan, chan->buffer_seq);
3933

3934
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
3935
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RNR);
3936
		l2cap_send_sframe(chan, control);
3937
		set_bit(CONN_RNR_SENT, &chan->conn_state);
3938 3939
	}

3940
	if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
3941
		l2cap_retransmit_frames(chan);
3942

3943
	l2cap_ertm_send(chan);
3944

3945
	if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
3946
			chan->frames_sent == 0) {
3947
		control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
3948
		l2cap_send_sframe(chan, control);
3949 3950 3951
	}
}

3952
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u16 tx_seq, u8 sar)
3953 3954
{
	struct sk_buff *next_skb;
3955
	int tx_seq_offset, next_tx_seq_offset;
3956

3957 3958
	bt_cb(skb)->control.txseq = tx_seq;
	bt_cb(skb)->control.sar = sar;
3959

3960
	next_skb = skb_peek(&chan->srej_q);
3961

3962
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
3963

3964
	while (next_skb) {
3965
		if (bt_cb(next_skb)->control.txseq == tx_seq)
3966 3967
			return -EINVAL;

3968
		next_tx_seq_offset = __seq_offset(chan,
3969
			bt_cb(next_skb)->control.txseq, chan->buffer_seq);
3970 3971

		if (next_tx_seq_offset > tx_seq_offset) {
3972
			__skb_queue_before(&chan->srej_q, next_skb, skb);
3973
			return 0;
3974 3975
		}

3976
		if (skb_queue_is_last(&chan->srej_q, next_skb))
3977 3978 3979 3980
			next_skb = NULL;
		else
			next_skb = skb_queue_next(&chan->srej_q, next_skb);
	}
3981

3982
	__skb_queue_tail(&chan->srej_q, skb);
3983 3984

	return 0;
3985 3986
}

3987 3988
static void append_skb_frag(struct sk_buff *skb,
			struct sk_buff *new_frag, struct sk_buff **last_frag)
3989
{
3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005
	/* 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;
}

4006
static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u32 control)
4007 4008
{
	int err = -EINVAL;
4009

4010 4011
	switch (__get_ctrl_sar(chan, control)) {
	case L2CAP_SAR_UNSEGMENTED:
4012 4013
		if (chan->sdu)
			break;
4014

4015 4016
		err = chan->ops->recv(chan->data, skb);
		break;
4017

4018
	case L2CAP_SAR_START:
4019 4020
		if (chan->sdu)
			break;
4021

4022
		chan->sdu_len = get_unaligned_le16(skb->data);
4023
		skb_pull(skb, L2CAP_SDULEN_SIZE);
4024

4025 4026 4027 4028
		if (chan->sdu_len > chan->imtu) {
			err = -EMSGSIZE;
			break;
		}
4029

4030 4031
		if (skb->len >= chan->sdu_len)
			break;
4032

4033 4034
		chan->sdu = skb;
		chan->sdu_last_frag = skb;
4035

4036 4037
		skb = NULL;
		err = 0;
4038 4039
		break;

4040
	case L2CAP_SAR_CONTINUE:
4041
		if (!chan->sdu)
4042
			break;
4043

4044 4045 4046
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
4047

4048 4049
		if (chan->sdu->len >= chan->sdu_len)
			break;
4050

4051
		err = 0;
4052 4053
		break;

4054
	case L2CAP_SAR_END:
4055
		if (!chan->sdu)
4056
			break;
4057

4058 4059 4060
		append_skb_frag(chan->sdu, skb,
				&chan->sdu_last_frag);
		skb = NULL;
4061

4062 4063
		if (chan->sdu->len != chan->sdu_len)
			break;
4064

4065
		err = chan->ops->recv(chan->data, chan->sdu);
4066

4067 4068 4069 4070 4071
		if (!err) {
			/* Reassembly complete */
			chan->sdu = NULL;
			chan->sdu_last_frag = NULL;
			chan->sdu_len = 0;
4072
		}
4073 4074 4075
		break;
	}

4076 4077 4078 4079 4080 4081 4082
	if (err) {
		kfree_skb(skb);
		kfree_skb(chan->sdu);
		chan->sdu = NULL;
		chan->sdu_last_frag = NULL;
		chan->sdu_len = 0;
	}
4083

4084
	return err;
4085 4086
}

4087
static void l2cap_ertm_enter_local_busy(struct l2cap_chan *chan)
4088
{
4089
	BT_DBG("chan %p, Enter local busy", chan);
4090

4091
	set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
4092
	l2cap_seq_list_clear(&chan->srej_list);
4093

4094
	__set_ack_timer(chan);
4095 4096 4097 4098
}

static void l2cap_ertm_exit_local_busy(struct l2cap_chan *chan)
{
4099
	u32 control;
4100

4101
	if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
4102 4103
		goto done;

4104
	control = __set_reqseq(chan, chan->buffer_seq);
4105
	control |= __set_ctrl_poll(chan);
4106
	control |= __set_ctrl_super(chan, L2CAP_SUPER_RR);
4107
	l2cap_send_sframe(chan, control);
4108
	chan->retry_count = 1;
4109

4110 4111
	__clear_retrans_timer(chan);
	__set_monitor_timer(chan);
4112

4113
	set_bit(CONN_WAIT_F, &chan->conn_state);
4114 4115

done:
4116 4117
	clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
	clear_bit(CONN_RNR_SENT, &chan->conn_state);
4118

4119
	BT_DBG("chan %p, Exit local busy", chan);
4120 4121
}

4122
void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
4123
{
4124 4125 4126 4127 4128
	if (chan->mode == L2CAP_MODE_ERTM) {
		if (busy)
			l2cap_ertm_enter_local_busy(chan);
		else
			l2cap_ertm_exit_local_busy(chan);
4129 4130 4131
	}
}

4132
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u16 tx_seq)
4133 4134
{
	struct sk_buff *skb;
4135
	u32 control;
4136

4137 4138 4139 4140
	while ((skb = skb_peek(&chan->srej_q)) &&
			!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		int err;

4141
		if (bt_cb(skb)->control.txseq != tx_seq)
4142 4143
			break;

4144
		skb = skb_dequeue(&chan->srej_q);
4145
		control = __set_ctrl_sar(chan, bt_cb(skb)->control.sar);
4146
		err = l2cap_reassemble_sdu(chan, skb, control);
4147 4148 4149 4150 4151 4152

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

4153 4154
		chan->buffer_seq_srej = __next_seq(chan, chan->buffer_seq_srej);
		tx_seq = __next_seq(chan, tx_seq);
4155 4156 4157
	}
}

4158
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u16 tx_seq)
4159 4160
{
	struct srej_list *l, *tmp;
4161
	u32 control;
4162

4163
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
4164 4165 4166 4167 4168
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
4169
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
4170
		control |= __set_reqseq(chan, l->tx_seq);
4171
		l2cap_send_sframe(chan, control);
4172
		list_del(&l->list);
4173
		list_add_tail(&l->list, &chan->srej_l);
4174 4175 4176
	}
}

4177
static int l2cap_send_srejframe(struct l2cap_chan *chan, u16 tx_seq)
4178 4179
{
	struct srej_list *new;
4180
	u32 control;
4181

4182
	while (tx_seq != chan->expected_tx_seq) {
4183
		control = __set_ctrl_super(chan, L2CAP_SUPER_SREJ);
4184
		control |= __set_reqseq(chan, chan->expected_tx_seq);
4185
		l2cap_seq_list_append(&chan->srej_list, chan->expected_tx_seq);
4186
		l2cap_send_sframe(chan, control);
4187 4188

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
4189 4190 4191
		if (!new)
			return -ENOMEM;

4192
		new->tx_seq = chan->expected_tx_seq;
4193 4194 4195

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

4196
		list_add_tail(&new->list, &chan->srej_l);
4197
	}
4198 4199

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

	return 0;
4202 4203
}

4204
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4205
{
4206
	u16 tx_seq = __get_txseq(chan, rx_control);
4207
	u16 req_seq = __get_reqseq(chan, rx_control);
4208
	u8 sar = __get_ctrl_sar(chan, rx_control);
4209
	int tx_seq_offset, expected_tx_seq_offset;
4210
	int num_to_ack = (chan->tx_win/6) + 1;
4211 4212
	int err = 0;

4213
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%8.8x", chan, skb->len,
4214
							tx_seq, rx_control);
4215

4216
	if (__is_ctrl_final(chan, rx_control) &&
4217
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4218
		__clear_monitor_timer(chan);
4219
		if (chan->unacked_frames > 0)
4220
			__set_retrans_timer(chan);
4221
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4222 4223
	}

4224 4225
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
4226

4227
	tx_seq_offset = __seq_offset(chan, tx_seq, chan->buffer_seq);
4228 4229

	/* invalid tx_seq */
4230
	if (tx_seq_offset >= chan->tx_win) {
4231
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4232 4233 4234
		goto drop;
	}

4235 4236 4237
	if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
		if (!test_bit(CONN_RNR_SENT, &chan->conn_state))
			l2cap_send_ack(chan);
4238
		goto drop;
4239
	}
4240

4241 4242 4243
	if (tx_seq == chan->expected_tx_seq)
		goto expected;

4244
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4245
		struct srej_list *first;
4246

4247
		first = list_first_entry(&chan->srej_l,
4248 4249
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
4250
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4251
			l2cap_check_srej_gap(chan, tx_seq);
4252 4253 4254 4255

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

4256
			if (list_empty(&chan->srej_l)) {
4257
				chan->buffer_seq = chan->buffer_seq_srej;
4258
				clear_bit(CONN_SREJ_SENT, &chan->conn_state);
4259
				l2cap_send_ack(chan);
4260
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
4261 4262 4263
			}
		} else {
			struct srej_list *l;
4264 4265

			/* duplicated tx_seq */
4266
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
4267
				goto drop;
4268

4269
			list_for_each_entry(l, &chan->srej_l, list) {
4270
				if (l->tx_seq == tx_seq) {
4271
					l2cap_resend_srejframe(chan, tx_seq);
4272 4273 4274
					return 0;
				}
			}
4275 4276 4277 4278 4279 4280

			err = l2cap_send_srejframe(chan, tx_seq);
			if (err < 0) {
				l2cap_send_disconn_req(chan->conn, chan, -err);
				return err;
			}
4281 4282
		}
	} else {
4283 4284
		expected_tx_seq_offset = __seq_offset(chan,
				chan->expected_tx_seq, chan->buffer_seq);
4285 4286 4287 4288 4289

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

4290
		set_bit(CONN_SREJ_SENT, &chan->conn_state);
4291

4292
		BT_DBG("chan %p, Enter SREJ", chan);
4293

4294
		INIT_LIST_HEAD(&chan->srej_l);
4295
		chan->buffer_seq_srej = chan->buffer_seq;
4296

4297
		__skb_queue_head_init(&chan->srej_q);
4298
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
4299

4300 4301 4302
		/* 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);
4303

4304 4305 4306 4307 4308
		err = l2cap_send_srejframe(chan, tx_seq);
		if (err < 0) {
			l2cap_send_disconn_req(chan->conn, chan, -err);
			return err;
		}
4309
	}
4310 4311
	return 0;

4312
expected:
4313
	chan->expected_tx_seq = __next_seq(chan, chan->expected_tx_seq);
4314

4315
	if (test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4316 4317
		bt_cb(skb)->control.txseq = tx_seq;
		bt_cb(skb)->control.sar = sar;
4318
		__skb_queue_tail(&chan->srej_q, skb);
4319 4320 4321
		return 0;
	}

4322
	err = l2cap_reassemble_sdu(chan, skb, rx_control);
4323 4324
	chan->buffer_seq = __next_seq(chan, chan->buffer_seq);

4325 4326 4327 4328
	if (err < 0) {
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
		return err;
	}
4329

4330
	if (__is_ctrl_final(chan, rx_control)) {
4331
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4332
			l2cap_retransmit_frames(chan);
4333 4334
	}

4335

4336 4337
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
4338
		l2cap_send_ack(chan);
4339 4340
	else
		__set_ack_timer(chan);
4341

4342
	return 0;
4343 4344 4345 4346

drop:
	kfree_skb(skb);
	return 0;
4347 4348
}

4349
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u32 rx_control)
4350
{
4351
	BT_DBG("chan %p, req_seq %d ctrl 0x%8.8x", chan,
4352
				__get_reqseq(chan, rx_control), rx_control);
4353

4354
	chan->expected_ack_seq = __get_reqseq(chan, rx_control);
4355
	l2cap_drop_acked_frames(chan);
4356

4357
	if (__is_ctrl_poll(chan, rx_control)) {
4358 4359 4360
		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) &&
4361
					(chan->unacked_frames > 0))
4362
				__set_retrans_timer(chan);
4363

4364
			clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4365
			l2cap_send_srejtail(chan);
4366
		} else {
4367
			l2cap_send_i_or_rr_or_rnr(chan);
4368
		}
4369

4370
	} else if (__is_ctrl_final(chan, rx_control)) {
4371
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4372

4373
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4374
			l2cap_retransmit_frames(chan);
4375

4376
	} else {
4377
		if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
4378
				(chan->unacked_frames > 0))
4379
			__set_retrans_timer(chan);
4380

4381 4382
		clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
		if (test_bit(CONN_SREJ_SENT, &chan->conn_state))
4383
			l2cap_send_ack(chan);
4384
		else
4385
			l2cap_ertm_send(chan);
4386 4387
	}
}
4388

4389
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u32 rx_control)
4390
{
4391
	u16 tx_seq = __get_reqseq(chan, rx_control);
4392

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

4395
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4396

4397 4398
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4399

4400
	if (__is_ctrl_final(chan, rx_control)) {
4401
		if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
4402
			l2cap_retransmit_frames(chan);
4403
	} else {
4404
		l2cap_retransmit_frames(chan);
4405

4406 4407
		if (test_bit(CONN_WAIT_F, &chan->conn_state))
			set_bit(CONN_REJ_ACT, &chan->conn_state);
4408 4409
	}
}
4410
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u32 rx_control)
4411
{
4412
	u16 tx_seq = __get_reqseq(chan, rx_control);
4413

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

4416
	clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4417

4418
	if (__is_ctrl_poll(chan, rx_control)) {
4419 4420
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
4421

4422
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4423
		l2cap_retransmit_one_frame(chan, tx_seq);
4424

4425
		l2cap_ertm_send(chan);
4426

4427
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4428
			chan->srej_save_reqseq = tx_seq;
4429
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4430
		}
4431
	} else if (__is_ctrl_final(chan, rx_control)) {
4432
		if (test_bit(CONN_SREJ_ACT, &chan->conn_state) &&
4433
				chan->srej_save_reqseq == tx_seq)
4434
			clear_bit(CONN_SREJ_ACT, &chan->conn_state);
4435
		else
4436
			l2cap_retransmit_one_frame(chan, tx_seq);
4437
	} else {
4438
		l2cap_retransmit_one_frame(chan, tx_seq);
4439
		if (test_bit(CONN_WAIT_F, &chan->conn_state)) {
4440
			chan->srej_save_reqseq = tx_seq;
4441
			set_bit(CONN_SREJ_ACT, &chan->conn_state);
4442
		}
4443 4444 4445
	}
}

4446
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u32 rx_control)
4447
{
4448
	u16 tx_seq = __get_reqseq(chan, rx_control);
4449

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

4452
	set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
4453 4454
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
4455

4456
	if (__is_ctrl_poll(chan, rx_control))
4457
		set_bit(CONN_SEND_FBIT, &chan->conn_state);
4458

4459
	if (!test_bit(CONN_SREJ_SENT, &chan->conn_state)) {
4460
		__clear_retrans_timer(chan);
4461
		if (__is_ctrl_poll(chan, rx_control))
4462
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
4463
		return;
4464
	}
4465

4466
	if (__is_ctrl_poll(chan, rx_control)) {
4467
		l2cap_send_srejtail(chan);
4468 4469 4470 4471
	} else {
		rx_control = __set_ctrl_super(chan, L2CAP_SUPER_RR);
		l2cap_send_sframe(chan, rx_control);
	}
4472 4473
}

4474
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u32 rx_control, struct sk_buff *skb)
4475
{
4476
	BT_DBG("chan %p rx_control 0x%8.8x len %d", chan, rx_control, skb->len);
4477

4478
	if (__is_ctrl_final(chan, rx_control) &&
4479
			test_bit(CONN_WAIT_F, &chan->conn_state)) {
4480
		__clear_monitor_timer(chan);
4481
		if (chan->unacked_frames > 0)
4482
			__set_retrans_timer(chan);
4483
		clear_bit(CONN_WAIT_F, &chan->conn_state);
4484 4485
	}

4486 4487
	switch (__get_ctrl_super(chan, rx_control)) {
	case L2CAP_SUPER_RR:
4488
		l2cap_data_channel_rrframe(chan, rx_control);
4489 4490
		break;

4491
	case L2CAP_SUPER_REJ:
4492
		l2cap_data_channel_rejframe(chan, rx_control);
4493
		break;
4494

4495
	case L2CAP_SUPER_SREJ:
4496
		l2cap_data_channel_srejframe(chan, rx_control);
4497 4498
		break;

4499
	case L2CAP_SUPER_RNR:
4500
		l2cap_data_channel_rnrframe(chan, rx_control);
4501 4502 4503
		break;
	}

4504
	kfree_skb(skb);
4505 4506 4507
	return 0;
}

4508
static int l2cap_ertm_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
4509
{
4510
	u32 control;
4511
	u16 req_seq;
4512 4513
	int len, next_tx_seq_offset, req_seq_offset;

4514 4515
	__unpack_control(chan, skb);

4516 4517
	control = __get_control(chan, skb->data);
	skb_pull(skb, __ctrl_size(chan));
4518 4519 4520 4521 4522 4523 4524
	len = skb->len;

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

4528
	if (__is_sar_start(chan, control) && !__is_sframe(chan, control))
4529
		len -= L2CAP_SDULEN_SIZE;
4530

4531
	if (chan->fcs == L2CAP_FCS_CRC16)
4532
		len -= L2CAP_FCS_SIZE;
4533

4534
	if (len > chan->mps) {
4535
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4536 4537 4538
		goto drop;
	}

4539
	req_seq = __get_reqseq(chan, control);
4540

4541 4542 4543 4544
	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);
4545 4546 4547

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
4548
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4549 4550 4551
		goto drop;
	}

4552
	if (!__is_sframe(chan, control)) {
4553
		if (len < 0) {
4554
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4555 4556 4557
			goto drop;
		}

4558
		l2cap_data_channel_iframe(chan, control, skb);
4559 4560 4561
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
4562
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4563 4564 4565
			goto drop;
		}

4566
		l2cap_data_channel_sframe(chan, control, skb);
4567 4568 4569 4570 4571 4572 4573 4574 4575
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
4576 4577
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
4578
	struct l2cap_chan *chan;
4579
	u32 control;
4580
	u16 tx_seq;
4581
	int len;
L
Linus Torvalds 已提交
4582

4583
	chan = l2cap_get_chan_by_scid(conn, cid);
4584
	if (!chan) {
L
Linus Torvalds 已提交
4585
		BT_DBG("unknown cid 0x%4.4x", cid);
4586
		/* Drop packet and return */
4587
		kfree_skb(skb);
4588
		return 0;
L
Linus Torvalds 已提交
4589 4590
	}

4591
	l2cap_chan_lock(chan);
4592

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

4595
	if (chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4596 4597
		goto drop;

4598
	switch (chan->mode) {
4599 4600 4601 4602 4603
	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 已提交
4604

4605
		if (chan->imtu < skb->len)
4606
			goto drop;
L
Linus Torvalds 已提交
4607

4608
		if (!chan->ops->recv(chan->data, skb))
4609 4610 4611 4612
			goto done;
		break;

	case L2CAP_MODE_ERTM:
4613
		l2cap_ertm_data_rcv(chan, skb);
4614

4615
		goto done;
4616

4617
	case L2CAP_MODE_STREAMING:
4618 4619
		control = __get_control(chan, skb->data);
		skb_pull(skb, __ctrl_size(chan));
4620 4621
		len = skb->len;

4622
		if (l2cap_check_fcs(chan, skb))
4623 4624
			goto drop;

4625
		if (__is_sar_start(chan, control))
4626
			len -= L2CAP_SDULEN_SIZE;
4627

4628
		if (chan->fcs == L2CAP_FCS_CRC16)
4629
			len -= L2CAP_FCS_SIZE;
4630

4631
		if (len > chan->mps || len < 0 || __is_sframe(chan, control))
4632 4633
			goto drop;

4634
		tx_seq = __get_txseq(chan, control);
4635

4636 4637 4638 4639 4640 4641
		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;
4642

4643 4644 4645
			/* TODO: Notify userland of missing data */
		}

4646
		chan->expected_tx_seq = __next_seq(chan, tx_seq);
4647 4648 4649

		if (l2cap_reassemble_sdu(chan, skb, control) == -EMSGSIZE)
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
4650 4651 4652

		goto done;

4653
	default:
4654
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
4655 4656
		break;
	}
L
Linus Torvalds 已提交
4657 4658 4659 4660 4661

drop:
	kfree_skb(skb);

done:
4662
	l2cap_chan_unlock(chan);
4663

L
Linus Torvalds 已提交
4664 4665 4666
	return 0;
}

4667
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
4668
{
4669
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4670

4671
	chan = l2cap_global_chan_by_psm(0, psm, conn->src, conn->dst);
4672
	if (!chan)
L
Linus Torvalds 已提交
4673 4674
		goto drop;

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

4677
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
L
Linus Torvalds 已提交
4678 4679
		goto drop;

4680
	if (chan->imtu < skb->len)
L
Linus Torvalds 已提交
4681 4682
		goto drop;

4683
	if (!chan->ops->recv(chan->data, skb))
4684
		return 0;
L
Linus Torvalds 已提交
4685 4686 4687 4688 4689 4690 4691

drop:
	kfree_skb(skb);

	return 0;
}

4692 4693
static inline int l2cap_att_channel(struct l2cap_conn *conn, u16 cid,
				    struct sk_buff *skb)
4694
{
4695
	struct l2cap_chan *chan;
4696

4697
	chan = l2cap_global_chan_by_scid(0, cid, conn->src, conn->dst);
4698
	if (!chan)
4699 4700
		goto drop;

4701
	BT_DBG("chan %p, len %d", chan, skb->len);
4702

4703
	if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
4704 4705
		goto drop;

4706
	if (chan->imtu < skb->len)
4707 4708
		goto drop;

4709
	if (!chan->ops->recv(chan->data, skb))
4710
		return 0;
4711 4712 4713 4714 4715 4716 4717

drop:
	kfree_skb(skb);

	return 0;
}

L
Linus Torvalds 已提交
4718 4719 4720
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
4721 4722
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
4723 4724 4725 4726 4727

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

4728 4729 4730 4731 4732
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
4733 4734 4735
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
4736
	case L2CAP_CID_LE_SIGNALING:
4737
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
4738 4739 4740
		l2cap_sig_channel(conn, skb);
		break;

4741
	case L2CAP_CID_CONN_LESS:
4742
		psm = get_unaligned((__le16 *) skb->data);
L
Linus Torvalds 已提交
4743 4744 4745 4746
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

4747 4748 4749 4750
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

4751 4752 4753 4754 4755
	case L2CAP_CID_SMP:
		if (smp_sig_channel(conn, skb))
			l2cap_conn_del(conn->hcon, EACCES);
		break;

L
Linus Torvalds 已提交
4756 4757 4758 4759 4760 4761 4762 4763
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

4764
int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
L
Linus Torvalds 已提交
4765 4766
{
	int exact = 0, lm1 = 0, lm2 = 0;
4767
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4768 4769 4770 4771

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

	/* Find listening sockets and check their link_mode */
4772 4773 4774
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4775

4776
		if (c->state != BT_LISTEN)
L
Linus Torvalds 已提交
4777 4778 4779
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
4780
			lm1 |= HCI_LM_ACCEPT;
4781
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4782
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
4783
			exact++;
4784 4785
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
4786
			if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
4787 4788
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
4789
	}
4790
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
4791 4792 4793 4794

	return exact ? lm1 : lm2;
}

4795
int l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
L
Linus Torvalds 已提交
4796
{
4797 4798
	struct l2cap_conn *conn;

L
Linus Torvalds 已提交
4799 4800 4801 4802 4803 4804
	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);
4805
	} else
4806
		l2cap_conn_del(hcon, bt_to_errno(status));
L
Linus Torvalds 已提交
4807 4808 4809 4810

	return 0;
}

4811
int l2cap_disconn_ind(struct hci_conn *hcon)
4812 4813 4814 4815 4816
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

4817
	if (!conn)
4818
		return HCI_ERROR_REMOTE_USER_TERM;
4819 4820 4821
	return conn->disc_reason;
}

4822
int l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
L
Linus Torvalds 已提交
4823 4824 4825
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4826
	l2cap_conn_del(hcon, bt_to_errno(reason));
L
Linus Torvalds 已提交
4827 4828 4829
	return 0;
}

4830
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4831
{
4832
	if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
4833 4834
		return;

4835
	if (encrypt == 0x00) {
4836
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4837
			__set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
4838
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4839
			l2cap_chan_close(chan, ECONNREFUSED);
4840
	} else {
4841
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4842
			__clear_chan_timer(chan);
4843 4844 4845
	}
}

4846
int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4847
{
4848
	struct l2cap_conn *conn = hcon->l2cap_data;
4849
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4850

4851
	if (!conn)
L
Linus Torvalds 已提交
4852
		return 0;
4853

L
Linus Torvalds 已提交
4854 4855
	BT_DBG("conn %p", conn);

4856
	if (hcon->type == LE_LINK) {
4857 4858
		if (!status && encrypt)
			smp_distribute_keys(conn, 0);
4859
		cancel_delayed_work(&conn->security_timer);
4860 4861
	}

4862
	mutex_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4863

4864
	list_for_each_entry(chan, &conn->chan_l, list) {
4865
		l2cap_chan_lock(chan);
L
Linus Torvalds 已提交
4866

4867 4868 4869 4870 4871
		BT_DBG("chan->scid %d", chan->scid);

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

4875
			l2cap_chan_unlock(chan);
4876 4877 4878
			continue;
		}

4879
		if (test_bit(CONF_CONNECT_PEND, &chan->conf_state)) {
4880
			l2cap_chan_unlock(chan);
4881 4882 4883
			continue;
		}

4884 4885
		if (!status && (chan->state == BT_CONNECTED ||
						chan->state == BT_CONFIG)) {
4886
			l2cap_check_encryption(chan, encrypt);
4887
			l2cap_chan_unlock(chan);
4888 4889 4890
			continue;
		}

4891
		if (chan->state == BT_CONNECT) {
4892
			if (!status) {
4893
				l2cap_send_conn_req(chan);
4894
			} else {
4895
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4896
			}
4897
		} else if (chan->state == BT_CONNECT2) {
4898
			struct sock *sk = chan->sk;
4899
			struct l2cap_conn_rsp rsp;
4900
			__u16 res, stat;
L
Linus Torvalds 已提交
4901

4902 4903
			lock_sock(sk);

4904
			if (!status) {
4905 4906 4907 4908
				if (bt_sk(sk)->defer_setup) {
					struct sock *parent = bt_sk(sk)->parent;
					res = L2CAP_CR_PEND;
					stat = L2CAP_CS_AUTHOR_PEND;
4909 4910
					if (parent)
						parent->sk_data_ready(parent, 0);
4911
				} else {
4912
					__l2cap_state_change(chan, BT_CONFIG);
4913 4914 4915
					res = L2CAP_CR_SUCCESS;
					stat = L2CAP_CS_NO_INFO;
				}
4916
			} else {
4917
				__l2cap_state_change(chan, BT_DISCONN);
4918
				__set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
4919 4920
				res = L2CAP_CR_SEC_BLOCK;
				stat = L2CAP_CS_NO_INFO;
4921 4922
			}

4923 4924
			release_sock(sk);

4925 4926
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4927 4928
			rsp.result = cpu_to_le16(res);
			rsp.status = cpu_to_le16(stat);
4929 4930
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4931
		}
L
Linus Torvalds 已提交
4932

4933
		l2cap_chan_unlock(chan);
L
Linus Torvalds 已提交
4934 4935
	}

4936
	mutex_unlock(&conn->chan_lock);
4937

L
Linus Torvalds 已提交
4938 4939 4940
	return 0;
}

4941
int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
L
Linus Torvalds 已提交
4942 4943 4944
{
	struct l2cap_conn *conn = hcon->l2cap_data;

4945 4946 4947 4948
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4949 4950 4951 4952
		goto drop;

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

4953
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4954
		struct l2cap_hdr *hdr;
4955
		struct l2cap_chan *chan;
4956
		u16 cid;
L
Linus Torvalds 已提交
4957 4958 4959 4960 4961 4962 4963 4964 4965 4966
		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);
		}

4967 4968
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4969 4970 4971 4972 4973 4974 4975
			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;
4976
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992

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

4993
		chan = l2cap_get_chan_by_scid(conn, cid);
4994

4995 4996
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4997
			lock_sock(sk);
4998

4999
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
5000 5001
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
5002
							chan->imtu);
5003
				release_sock(sk);
5004 5005 5006
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
5007
			release_sock(sk);
5008
		}
5009

L
Linus Torvalds 已提交
5010
		/* Allocate skb for the complete frame (with header) */
5011 5012
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
5013 5014
			goto drop;

5015
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5016
								skb->len);
L
Linus Torvalds 已提交
5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036
		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;
		}

5037
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
5038
								skb->len);
L
Linus Torvalds 已提交
5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052
		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;
}

5053
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
5054
{
5055
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
5056

5057
	read_lock(&chan_list_lock);
L
Linus Torvalds 已提交
5058

5059 5060
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
5061

5062
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
5063 5064
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
5065
					c->state, __le16_to_cpu(c->psm),
5066 5067
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
5068
	}
L
Linus Torvalds 已提交
5069

5070
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
5071

5072
	return 0;
L
Linus Torvalds 已提交
5073 5074
}

5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087
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 已提交
5088

5089
int __init l2cap_init(void)
L
Linus Torvalds 已提交
5090 5091
{
	int err;
5092

5093
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
5094 5095 5096
	if (err < 0)
		return err;

5097 5098 5099 5100 5101 5102
	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 已提交
5103 5104 5105 5106

	return 0;
}

5107
void l2cap_exit(void)
L
Linus Torvalds 已提交
5108
{
5109
	debugfs_remove(l2cap_debugfs);
5110
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
5111 5112
}

5113 5114
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");