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

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

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

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

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

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

#include <linux/module.h>

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

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

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
#include <net/bluetooth/l2cap.h>

58
int disable_ertm;
59

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

63 64
static struct workqueue_struct *_busy_wq;

65
struct bt_sock_list l2cap_sk_list = {
66
	.lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
L
Linus Torvalds 已提交
67 68
};

69 70
static void l2cap_busy_work(struct work_struct *work);

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

75 76
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);

77
/* ---- L2CAP channels ---- */
78
static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
79
{
80
	struct l2cap_chan *c;
81 82

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

88 89
}

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

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

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

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_scid(conn, cid);
109 110
	if (c)
		bh_lock_sock(c->sk);
111
	read_unlock(&conn->chan_lock);
112
	return c;
113 114
}

115
static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
116
{
117
	struct l2cap_chan *c;
118 119

	list_for_each_entry(c, &conn->chan_l, list) {
120
		if (c->ident == ident)
121
			return c;
122
	}
123
	return NULL;
124 125
}

126
static inline struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn, u8 ident)
127
{
128
	struct l2cap_chan *c;
129 130 131

	read_lock(&conn->chan_lock);
	c = __l2cap_get_chan_by_ident(conn, ident);
132 133
	if (c)
		bh_lock_sock(c->sk);
134
	read_unlock(&conn->chan_lock);
135
	return c;
136 137
}

138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
struct sock *__l2cap_get_sock_by_addr(__le16 psm, bdaddr_t *src)
{
	struct sock *sk;
	struct hlist_node *node;
	sk_for_each(sk, node, &l2cap_sk_list.head) {
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;

		if (chan->sport == psm && !bacmp(&bt_sk(sk)->src, src))
			goto found;
	}

	sk = NULL;
found:
	return sk;
}

int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
{
	write_lock_bh(&l2cap_sk_list.lock);

	if (__l2cap_get_sock_by_addr(psm, src)) {
		write_unlock_bh(&l2cap_sk_list.lock);
		return -EADDRINUSE;
	}

	chan->psm = psm;
	chan->sport = psm;

	write_unlock_bh(&l2cap_sk_list.lock);

	return 0;
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
	write_lock_bh(&l2cap_sk_list.lock);

	chan->scid = scid;

	write_unlock_bh(&l2cap_sk_list.lock);

	return 0;
}

182
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
183
{
184
	u16 cid = L2CAP_CID_DYN_START;
185

186
	for (; cid < L2CAP_CID_DYN_END; cid++) {
187
		if (!__l2cap_get_chan_by_scid(conn, cid))
188 189 190 191 192 193
			return cid;
	}

	return 0;
}

194
struct l2cap_chan *l2cap_chan_alloc(struct sock *sk)
195 196 197 198 199 200 201 202 203 204 205 206
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

	return chan;
}

207 208 209 210 211
void l2cap_chan_free(struct l2cap_chan *chan)
{
	kfree(chan);
}

212
static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
213
{
214
	struct sock *sk = chan->sk;
215

216
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
217
			chan->psm, chan->dcid);
218

219 220
	conn->disc_reason = 0x13;

221
	chan->conn = conn;
222

223
	if (sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM) {
224 225
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
226
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
227 228
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
229 230
		} else {
			/* Alloc CID for connection-oriented socket */
231
			chan->scid = l2cap_alloc_cid(conn);
232
			chan->omtu = L2CAP_DEFAULT_MTU;
233
		}
234 235
	} else if (sk->sk_type == SOCK_DGRAM) {
		/* Connectionless socket */
236 237
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
238
		chan->omtu = L2CAP_DEFAULT_MTU;
239 240
	} else {
		/* Raw socket can send/recv signalling messages only */
241 242
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
243
		chan->omtu = L2CAP_DEFAULT_MTU;
244 245
	}

246 247 248
	sock_hold(sk);

	list_add(&chan->list, &conn->chan_l);
249 250
}

251
/* Delete channel.
252
 * Must be called on the locked socket. */
253
void l2cap_chan_del(struct l2cap_chan *chan, int err)
254
{
255
	struct sock *sk = chan->sk;
256
	struct l2cap_conn *conn = chan->conn;
257 258 259 260
	struct sock *parent = bt_sk(sk)->parent;

	l2cap_sock_clear_timer(sk);

261
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
262

263
	if (conn) {
264 265 266 267 268 269
		/* Delete from channel list */
		write_lock_bh(&conn->chan_lock);
		list_del(&chan->list);
		write_unlock_bh(&conn->chan_lock);
		__sock_put(sk);

270
		chan->conn = NULL;
271 272 273
		hci_conn_put(conn->hcon);
	}

274
	sk->sk_state = BT_CLOSED;
275 276 277 278 279 280 281 282 283 284
	sock_set_flag(sk, SOCK_ZAPPED);

	if (err)
		sk->sk_err = err;

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

286 287
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE &&
			chan->conf_state & L2CAP_CONF_INPUT_DONE))
288
		return;
289

290
	skb_queue_purge(&chan->tx_q);
291

292
	if (chan->mode == L2CAP_MODE_ERTM) {
293 294
		struct srej_list *l, *tmp;

295 296 297
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
298

299 300
		skb_queue_purge(&chan->srej_q);
		skb_queue_purge(&chan->busy_q);
301

302
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
303 304 305 306
			list_del(&l->list);
			kfree(l);
		}
	}
307 308
}

309
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
310
{
311 312
	struct sock *sk = chan->sk;

313
	if (sk->sk_type == SOCK_RAW) {
314
		switch (chan->sec_level) {
315 316 317 318 319 320 321
		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;
		}
322
	} else if (chan->psm == cpu_to_le16(0x0001)) {
323 324
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
325

326
		if (chan->sec_level == BT_SECURITY_HIGH)
327
			return HCI_AT_NO_BONDING_MITM;
328
		else
329
			return HCI_AT_NO_BONDING;
330
	} else {
331
		switch (chan->sec_level) {
332
		case BT_SECURITY_HIGH:
333
			return HCI_AT_GENERAL_BONDING_MITM;
334
		case BT_SECURITY_MEDIUM:
335
			return HCI_AT_GENERAL_BONDING;
336
		default:
337
			return HCI_AT_NO_BONDING;
338
		}
339
	}
340 341 342
}

/* Service level security */
343
static inline int l2cap_check_security(struct l2cap_chan *chan)
344
{
345
	struct l2cap_conn *conn = chan->conn;
346 347
	__u8 auth_type;

348
	auth_type = l2cap_get_auth_type(chan);
349

350
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
351 352
}

353
u8 l2cap_get_ident(struct l2cap_conn *conn)
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
{
	u8 id;

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

	spin_lock_bh(&conn->lock);

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

	id = conn->tx_ident;

	spin_unlock_bh(&conn->lock);

	return id;
}

375
void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
376 377
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
378
	u8 flags;
379 380 381 382

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

	if (!skb)
383
		return;
384

385 386 387 388 389 390
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(conn->hcon, skb, flags);
391 392
}

393
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
394 395 396
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
397
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
398
	struct l2cap_conn *conn = chan->conn;
399
	struct sock *sk = (struct sock *)pi;
400
	int count, hlen = L2CAP_HDR_SIZE + 2;
401
	u8 flags;
402

403 404 405
	if (sk->sk_state != BT_CONNECTED)
		return;

406
	if (chan->fcs == L2CAP_FCS_CRC16)
407
		hlen += 2;
408

409
	BT_DBG("chan %p, control 0x%2.2x", chan, control);
410

411
	count = min_t(unsigned int, conn->mtu, hlen);
412 413
	control |= L2CAP_CTRL_FRAME_TYPE;

414
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
415
		control |= L2CAP_CTRL_FINAL;
416
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
417 418
	}

419
	if (chan->conn_state & L2CAP_CONN_SEND_PBIT) {
420
		control |= L2CAP_CTRL_POLL;
421
		chan->conn_state &= ~L2CAP_CONN_SEND_PBIT;
422 423
	}

424 425
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
426
		return;
427 428

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
429
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
430
	lh->cid = cpu_to_le16(chan->dcid);
431 432
	put_unaligned_le16(control, skb_put(skb, 2));

433
	if (chan->fcs == L2CAP_FCS_CRC16) {
434 435 436 437
		u16 fcs = crc16(0, (u8 *)lh, count - 2);
		put_unaligned_le16(fcs, skb_put(skb, 2));
	}

438 439 440 441 442
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

443
	hci_send_acl(chan->conn->hcon, skb, flags);
444 445
}

446
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
447
{
448
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
449
		control |= L2CAP_SUPER_RCV_NOT_READY;
450
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
451
	} else
452 453
		control |= L2CAP_SUPER_RCV_READY;

454
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
455

456
	l2cap_send_sframe(chan, control);
457 458
}

459
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
460
{
461
	return !(chan->conf_state & L2CAP_CONF_CONNECT_PEND);
462 463
}

464
static void l2cap_do_start(struct l2cap_chan *chan)
465
{
466
	struct l2cap_conn *conn = chan->conn;
467 468

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
469 470 471
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

472 473
		if (l2cap_check_security(chan) &&
				__l2cap_no_conn_pending(chan)) {
474
			struct l2cap_conn_req req;
475 476
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
477

478
			chan->ident = l2cap_get_ident(conn);
479
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
480

481 482
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
483
		}
484 485 486 487 488 489 490 491 492 493 494 495 496 497 498
	} else {
		struct l2cap_info_req req;
		req.type = cpu_to_le16(L2CAP_IT_FEAT_MASK);

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

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

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

499 500 501
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
502
	if (!disable_ertm)
503 504 505 506 507 508 509 510 511 512 513 514
		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;
	}
}

515
void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
516
{
517
	struct sock *sk;
518 519
	struct l2cap_disconn_req req;

520 521 522
	if (!conn)
		return;

523 524
	sk = chan->sk;

525
	if (chan->mode == L2CAP_MODE_ERTM) {
526 527 528
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
529 530
	}

531 532
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
533 534
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
535 536

	sk->sk_state = BT_DISCONN;
537
	sk->sk_err = err;
538 539
}

L
Linus Torvalds 已提交
540
/* ---- L2CAP connections ---- */
541 542
static void l2cap_conn_start(struct l2cap_conn *conn)
{
543
	struct l2cap_chan *chan, *tmp;
544 545 546

	BT_DBG("conn %p", conn);

547
	read_lock(&conn->chan_lock);
548

549
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
550
		struct sock *sk = chan->sk;
551

552 553
		bh_lock_sock(sk);

554 555
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
556 557 558 559 560
			bh_unlock_sock(sk);
			continue;
		}

		if (sk->sk_state == BT_CONNECT) {
561
			struct l2cap_conn_req req;
562

563
			if (!l2cap_check_security(chan) ||
564
					!__l2cap_no_conn_pending(chan)) {
565 566 567
				bh_unlock_sock(sk);
				continue;
			}
568

569
			if (!l2cap_mode_supported(chan->mode,
570
					conn->feat_mask)
571
					&& chan->conf_state &
572
					L2CAP_CONF_STATE2_DEVICE) {
573 574 575 576 577
				/* __l2cap_sock_close() calls list_del(chan)
				 * so release the lock */
				read_unlock_bh(&conn->chan_lock);
				 __l2cap_sock_close(sk, ECONNRESET);
				read_lock_bh(&conn->chan_lock);
578 579
				bh_unlock_sock(sk);
				continue;
580
			}
581

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

585
			chan->ident = l2cap_get_ident(conn);
586
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
587

588 589
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
590

591 592
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
593
			char buf[128];
594 595
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
596

597
			if (l2cap_check_security(chan)) {
598 599 600 601 602 603 604 605 606 607 608
				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);
					parent->sk_data_ready(parent, 0);

				} else {
					sk->sk_state = BT_CONFIG;
					rsp.result = cpu_to_le16(L2CAP_CR_SUCCESS);
					rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
				}
609 610 611 612 613
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

614 615
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
616

617
			if (chan->conf_state & L2CAP_CONF_REQ_SENT ||
618 619 620 621 622
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

623
			chan->conf_state |= L2CAP_CONF_REQ_SENT;
624
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
625 626
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
627 628 629 630 631
		}

		bh_unlock_sock(sk);
	}

632
	read_unlock(&conn->chan_lock);
633 634
}

635 636 637 638 639
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
static struct sock *l2cap_get_sock_by_scid(int state, __le16 cid, bdaddr_t *src)
{
640
	struct sock *sk = NULL, *sk1 = NULL;
641 642 643 644 645
	struct hlist_node *node;

	read_lock(&l2cap_sk_list.lock);

	sk_for_each(sk, node, &l2cap_sk_list.head) {
646 647
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;

648 649 650
		if (state && sk->sk_state != state)
			continue;

651
		if (chan->scid == cid) {
652 653 654 655 656 657 658 659 660
			/* Exact match. */
			if (!bacmp(&bt_sk(sk)->src, src))
				break;

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
				sk1 = sk;
		}
	}
661

662 663
	read_unlock(&l2cap_sk_list.lock);

664
	return node ? sk : sk1;
665 666 667 668
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
669
	struct sock *parent, *sk;
670
	struct l2cap_chan *chan;
671 672 673 674 675 676 677 678 679

	BT_DBG("");

	/* Check if we have socket listening on cid */
	parent = l2cap_get_sock_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
							conn->src);
	if (!parent)
		return;

680 681
	bh_lock_sock(parent);

682 683 684 685 686 687 688 689 690 691
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		goto clean;
	}

	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
	if (!sk)
		goto clean;

692 693 694 695 696 697
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		l2cap_sock_kill(sk);
		goto clean;
	}

698 699
	l2cap_pi(sk)->chan = chan;

700
	write_lock_bh(&conn->chan_lock);
701 702 703 704

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
705

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

709 710
	bt_accept_enqueue(parent, sk);

711 712
	__l2cap_chan_add(conn, chan);

713 714 715 716 717
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

	sk->sk_state = BT_CONNECTED;
	parent->sk_data_ready(parent, 0);

718
	write_unlock_bh(&conn->chan_lock);
719 720 721 722 723

clean:
	bh_unlock_sock(parent);
}

724 725
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
726
	struct l2cap_chan *chan;
727

728
	BT_DBG("conn %p", conn);
729

730 731 732
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

733
	read_lock(&conn->chan_lock);
734

735
	list_for_each_entry(chan, &conn->chan_l, list) {
736
		struct sock *sk = chan->sk;
737

738
		bh_lock_sock(sk);
739

740 741 742 743 744 745
		if (conn->hcon->type == LE_LINK) {
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		}

746 747
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
748 749 750 751
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		} else if (sk->sk_state == BT_CONNECT)
752
			l2cap_do_start(chan);
753

754
		bh_unlock_sock(sk);
755
	}
756

757
	read_unlock(&conn->chan_lock);
758 759 760 761 762
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
763
	struct l2cap_chan *chan;
764 765 766

	BT_DBG("conn %p", conn);

767
	read_lock(&conn->chan_lock);
768

769
	list_for_each_entry(chan, &conn->chan_l, list) {
770
		struct sock *sk = chan->sk;
771

772
		if (chan->force_reliable)
773 774 775
			sk->sk_err = err;
	}

776
	read_unlock(&conn->chan_lock);
777 778 779 780 781 782
}

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

783
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
784
	conn->info_ident = 0;
785

786 787 788
	l2cap_conn_start(conn);
}

L
Linus Torvalds 已提交
789 790
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
791
	struct l2cap_conn *conn = hcon->l2cap_data;
L
Linus Torvalds 已提交
792

793
	if (conn || status)
L
Linus Torvalds 已提交
794 795
		return conn;

796 797
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
	if (!conn)
L
Linus Torvalds 已提交
798 799 800 801 802
		return NULL;

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

803 804
	BT_DBG("hcon %p conn %p", hcon, conn);

805 806 807 808 809
	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 已提交
810 811 812
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

813 814
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
815
	spin_lock_init(&conn->lock);
816 817 818
	rwlock_init(&conn->chan_lock);

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

820 821
	if (hcon->type != LE_LINK)
		setup_timer(&conn->info_timer, l2cap_info_timeout,
D
Dave Young 已提交
822 823
						(unsigned long) conn);

824 825
	conn->disc_reason = 0x13;

L
Linus Torvalds 已提交
826 827 828
	return conn;
}

829
static void l2cap_conn_del(struct hci_conn *hcon, int err)
L
Linus Torvalds 已提交
830
{
831
	struct l2cap_conn *conn = hcon->l2cap_data;
832
	struct l2cap_chan *chan, *l;
L
Linus Torvalds 已提交
833 834
	struct sock *sk;

835 836
	if (!conn)
		return;
L
Linus Torvalds 已提交
837 838 839

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

840
	kfree_skb(conn->rx_skb);
L
Linus Torvalds 已提交
841 842

	/* Kill channels */
843
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
844
		sk = chan->sk;
L
Linus Torvalds 已提交
845
		bh_lock_sock(sk);
846
		l2cap_chan_del(chan, err);
L
Linus Torvalds 已提交
847 848 849 850
		bh_unlock_sock(sk);
		l2cap_sock_kill(sk);
	}

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

L
Linus Torvalds 已提交
854 855 856 857
	hcon->l2cap_data = NULL;
	kfree(conn);
}

858
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
L
Linus Torvalds 已提交
859
{
860
	write_lock_bh(&conn->chan_lock);
861
	__l2cap_chan_add(conn, chan);
862
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
863 864 865 866 867 868 869
}

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

/* Find socket with psm and source bdaddr.
 * Returns closest match.
 */
870
static struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
L
Linus Torvalds 已提交
871 872 873 874
{
	struct sock *sk = NULL, *sk1 = NULL;
	struct hlist_node *node;

875 876
	read_lock(&l2cap_sk_list.lock);

L
Linus Torvalds 已提交
877
	sk_for_each(sk, node, &l2cap_sk_list.head) {
878 879
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;

L
Linus Torvalds 已提交
880 881 882
		if (state && sk->sk_state != state)
			continue;

883
		if (chan->psm == psm) {
L
Linus Torvalds 已提交
884 885 886 887 888 889 890 891 892 893 894
			/* Exact match. */
			if (!bacmp(&bt_sk(sk)->src, src))
				break;

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
				sk1 = sk;
		}
	}

	read_unlock(&l2cap_sk_list.lock);
895 896

	return node ? sk : sk1;
L
Linus Torvalds 已提交
897 898
}

899
int l2cap_chan_connect(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
900
{
901
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
902 903 904 905 906
	bdaddr_t *src = &bt_sk(sk)->src;
	bdaddr_t *dst = &bt_sk(sk)->dst;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
907
	__u8 auth_type;
908
	int err;
L
Linus Torvalds 已提交
909

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

913 914
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
915 916 917 918
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

919
	auth_type = l2cap_get_auth_type(chan);
920

921
	if (chan->dcid == L2CAP_CID_LE_DATA)
922
		hcon = hci_connect(hdev, LE_LINK, dst,
923
					chan->sec_level, auth_type);
924 925
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
926
					chan->sec_level, auth_type);
927

928 929
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
930
		goto done;
931
	}
L
Linus Torvalds 已提交
932 933 934 935

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
936
		err = -ENOMEM;
L
Linus Torvalds 已提交
937 938 939 940 941 942
		goto done;
	}

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

943 944
	l2cap_chan_add(conn, chan);

L
Linus Torvalds 已提交
945 946 947 948
	sk->sk_state = BT_CONNECT;
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

	if (hcon->state == BT_CONNECTED) {
949 950
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
L
Linus Torvalds 已提交
951
			l2cap_sock_clear_timer(sk);
952
			if (l2cap_check_security(chan))
953
				sk->sk_state = BT_CONNECTED;
954
		} else
955
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
956 957
	}

958 959
	err = 0;

L
Linus Torvalds 已提交
960 961 962 963 964 965
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

966
int __l2cap_wait_ack(struct sock *sk)
967
{
968
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
969 970 971 972
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

973
	add_wait_queue(sk_sleep(sk), &wait);
974
	while ((chan->unacked_frames > 0 && chan->conn)) {
975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993
		set_current_state(TASK_INTERRUPTIBLE);

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

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
994
	remove_wait_queue(sk_sleep(sk), &wait);
995 996 997
	return err;
}

998 999
static void l2cap_monitor_timeout(unsigned long arg)
{
1000 1001
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1002

1003
	BT_DBG("chan %p", chan);
1004

1005
	bh_lock_sock(sk);
1006
	if (chan->retry_count >= chan->remote_max_tx) {
1007
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1008
		bh_unlock_sock(sk);
1009 1010 1011
		return;
	}

1012
	chan->retry_count++;
1013 1014
	__mod_monitor_timer();

1015
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1016
	bh_unlock_sock(sk);
1017 1018 1019 1020
}

static void l2cap_retrans_timeout(unsigned long arg)
{
1021 1022
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1023

1024
	BT_DBG("chan %p", chan);
1025

1026
	bh_lock_sock(sk);
1027
	chan->retry_count = 1;
1028 1029
	__mod_monitor_timer();

1030
	chan->conn_state |= L2CAP_CONN_WAIT_F;
1031

1032
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1033
	bh_unlock_sock(sk);
1034 1035
}

1036
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1037
{
1038
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1039

1040
	while ((skb = skb_peek(&chan->tx_q)) &&
1041
			chan->unacked_frames) {
1042
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1043
			break;
L
Linus Torvalds 已提交
1044

1045
		skb = skb_dequeue(&chan->tx_q);
1046
		kfree_skb(skb);
L
Linus Torvalds 已提交
1047

1048
		chan->unacked_frames--;
1049
	}
L
Linus Torvalds 已提交
1050

1051
	if (!chan->unacked_frames)
1052
		del_timer(&chan->retrans_timer);
1053
}
L
Linus Torvalds 已提交
1054

1055
void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1056
{
1057
	struct hci_conn *hcon = chan->conn->hcon;
1058
	u16 flags;
1059

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

1062
	if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1063 1064 1065 1066 1067
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(hcon, skb, flags);
1068 1069
}

1070
void l2cap_streaming_send(struct l2cap_chan *chan)
1071
{
1072
	struct sk_buff *skb;
1073
	u16 control, fcs;
1074

1075
	while ((skb = skb_dequeue(&chan->tx_q))) {
1076
		control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1077
		control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1078
		put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1079

1080
		if (chan->fcs == L2CAP_FCS_CRC16) {
1081 1082
			fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
			put_unaligned_le16(fcs, skb->data + skb->len - 2);
1083 1084
		}

1085
		l2cap_do_send(chan, skb);
1086

1087
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1088 1089 1090
	}
}

1091
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1092 1093 1094 1095
{
	struct sk_buff *skb, *tx_skb;
	u16 control, fcs;

1096
	skb = skb_peek(&chan->tx_q);
1097 1098
	if (!skb)
		return;
1099

1100 1101
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1102 1103
			break;

1104
		if (skb_queue_is_last(&chan->tx_q, skb))
1105
			return;
1106

1107
	} while ((skb = skb_queue_next(&chan->tx_q, skb)));
1108

1109 1110
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1111
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1112 1113 1114 1115 1116 1117
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
	control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1118
	control &= L2CAP_CTRL_SAR;
1119

1120
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1121
		control |= L2CAP_CTRL_FINAL;
1122
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1123
	}
1124

1125
	control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1126
			| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1127

1128 1129
	put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1130
	if (chan->fcs == L2CAP_FCS_CRC16) {
1131 1132 1133 1134
		fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
		put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
	}

1135
	l2cap_do_send(chan, tx_skb);
1136 1137
}

1138
int l2cap_ertm_send(struct l2cap_chan *chan)
1139 1140
{
	struct sk_buff *skb, *tx_skb;
1141
	struct sock *sk = chan->sk;
1142
	u16 control, fcs;
1143
	int nsent = 0;
1144

1145 1146
	if (sk->sk_state != BT_CONNECTED)
		return -ENOTCONN;
1147

1148
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1149

1150 1151
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1152
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1153 1154 1155
			break;
		}

1156 1157
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1158 1159
		bt_cb(skb)->retries++;

1160
		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1161 1162
		control &= L2CAP_CTRL_SAR;

1163
		if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1164
			control |= L2CAP_CTRL_FINAL;
1165
			chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1166
		}
1167 1168
		control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
				| (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1169 1170
		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1171

1172
		if (chan->fcs == L2CAP_FCS_CRC16) {
1173 1174 1175 1176
			fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
			put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
		}

1177
		l2cap_do_send(chan, tx_skb);
1178

1179
		__mod_retrans_timer();
1180

1181 1182
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1183

1184
		if (bt_cb(skb)->retries == 1)
1185
			chan->unacked_frames++;
1186

1187
		chan->frames_sent++;
1188

1189 1190
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1191
		else
1192
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1193 1194

		nsent++;
1195 1196
	}

1197 1198 1199
	return nsent;
}

1200
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1201 1202 1203
{
	int ret;

1204 1205
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1206

1207
	chan->next_tx_seq = chan->expected_ack_seq;
1208
	ret = l2cap_ertm_send(chan);
1209 1210 1211
	return ret;
}

1212
static void l2cap_send_ack(struct l2cap_chan *chan)
1213 1214 1215
{
	u16 control = 0;

1216
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1217

1218
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
1219
		control |= L2CAP_SUPER_RCV_NOT_READY;
1220 1221
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
		l2cap_send_sframe(chan, control);
1222
		return;
1223
	}
1224

1225
	if (l2cap_ertm_send(chan) > 0)
1226 1227 1228
		return;

	control |= L2CAP_SUPER_RCV_READY;
1229
	l2cap_send_sframe(chan, control);
1230 1231
}

1232
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1233 1234 1235 1236 1237 1238 1239
{
	struct srej_list *tail;
	u16 control;

	control = L2CAP_SUPER_SELECT_REJECT;
	control |= L2CAP_CTRL_FINAL;

1240
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1241 1242
	control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;

1243
	l2cap_send_sframe(chan, control);
1244 1245
}

1246 1247
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
1248
	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1249 1250
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1251

1252
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1253
		return -EFAULT;
L
Linus Torvalds 已提交
1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264

	sent += count;
	len  -= count;

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

		*frag = bt_skb_send_alloc(sk, count, msg->msg_flags & MSG_DONTWAIT, &err);
		if (!*frag)
1265
			return err;
1266 1267
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1268 1269 1270 1271 1272 1273 1274 1275

		sent += count;
		len  -= count;

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

	return sent;
1276
}
L
Linus Torvalds 已提交
1277

1278
struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1279
{
1280
	struct sock *sk = chan->sk;
1281
	struct l2cap_conn *conn = chan->conn;
1282 1283 1284 1285 1286 1287 1288 1289 1290 1291
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE + 2;
	struct l2cap_hdr *lh;

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

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1292
		return ERR_PTR(err);
1293 1294 1295

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1296
	lh->cid = cpu_to_le16(chan->dcid);
1297
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1298
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1299 1300 1301 1302 1303 1304 1305 1306 1307

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

1308
struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1309
{
1310
	struct sock *sk = chan->sk;
1311
	struct l2cap_conn *conn = chan->conn;
1312 1313 1314 1315 1316 1317 1318 1319 1320 1321
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE;
	struct l2cap_hdr *lh;

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

	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1322
		return ERR_PTR(err);
1323 1324 1325

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1326
	lh->cid = cpu_to_le16(chan->dcid);
1327 1328 1329 1330 1331 1332 1333 1334 1335 1336
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));

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

1337
struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1338
{
1339
	struct sock *sk = chan->sk;
1340
	struct l2cap_conn *conn = chan->conn;
1341 1342 1343 1344 1345 1346
	struct sk_buff *skb;
	int err, count, hlen = L2CAP_HDR_SIZE + 2;
	struct l2cap_hdr *lh;

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

1347 1348 1349
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1350 1351 1352
	if (sdulen)
		hlen += 2;

1353
	if (chan->fcs == L2CAP_FCS_CRC16)
1354 1355
		hlen += 2;

1356 1357 1358 1359
	count = min_t(unsigned int, (conn->mtu - hlen), len);
	skb = bt_skb_send_alloc(sk, count + hlen,
			msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
1360
		return ERR_PTR(err);
1361 1362 1363

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1364
	lh->cid = cpu_to_le16(chan->dcid);
1365 1366
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(control, skb_put(skb, 2));
1367 1368
	if (sdulen)
		put_unaligned_le16(sdulen, skb_put(skb, 2));
1369 1370 1371 1372 1373 1374

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

1376
	if (chan->fcs == L2CAP_FCS_CRC16)
1377 1378
		put_unaligned_le16(0, skb_put(skb, 2));

1379
	bt_cb(skb)->retries = 0;
1380
	return skb;
L
Linus Torvalds 已提交
1381 1382
}

1383
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1384 1385 1386 1387 1388 1389
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
	u16 control;
	size_t size = 0;

1390
	skb_queue_head_init(&sar_queue);
1391
	control = L2CAP_SDU_START;
1392
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1393 1394 1395 1396
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1397 1398
	len -= chan->remote_mps;
	size += chan->remote_mps;
1399 1400 1401 1402

	while (len > 0) {
		size_t buflen;

1403
		if (len > chan->remote_mps) {
1404
			control = L2CAP_SDU_CONTINUE;
1405
			buflen = chan->remote_mps;
1406
		} else {
1407
			control = L2CAP_SDU_END;
1408 1409 1410
			buflen = len;
		}

1411
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1412 1413 1414 1415 1416 1417 1418 1419 1420
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1421 1422 1423
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1424 1425 1426 1427

	return size;
}

L
Linus Torvalds 已提交
1428 1429 1430
static void l2cap_chan_ready(struct sock *sk)
{
	struct sock *parent = bt_sk(sk)->parent;
1431
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
L
Linus Torvalds 已提交
1432 1433 1434

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

1435
	chan->conf_state = 0;
L
Linus Torvalds 已提交
1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455
	l2cap_sock_clear_timer(sk);

	if (!parent) {
		/* Outgoing channel.
		 * Wake up socket sleeping on connect.
		 */
		sk->sk_state = BT_CONNECTED;
		sk->sk_state_change(sk);
	} else {
		/* Incoming channel.
		 * Wake up socket sleeping on accept.
		 */
		parent->sk_data_ready(parent, 0);
	}
}

/* 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;
1456
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1457 1458 1459

	BT_DBG("conn %p", conn);

1460 1461
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1462
		struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1463 1464 1465 1466 1467 1468
		if (sk->sk_type != SOCK_RAW)
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1469 1470
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1471 1472 1473 1474 1475
			continue;

		if (sock_queue_rcv_skb(sk, nskb))
			kfree_skb(nskb);
	}
1476
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487
}

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

1488 1489
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1490 1491 1492 1493 1494 1495 1496 1497 1498

	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);
1499
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1500 1501 1502 1503 1504

	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 已提交
1505 1506 1507 1508

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1509
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559

	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:
1560
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1561 1562 1563
		break;

	case 4:
1564
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590
		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:
1591
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1592 1593 1594
		break;

	case 4:
1595
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1596 1597 1598 1599 1600 1601 1602 1603 1604 1605
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1606 1607
static void l2cap_ack_timeout(unsigned long arg)
{
1608
	struct l2cap_chan *chan = (void *) arg;
1609

1610 1611 1612
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1613 1614
}

1615
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1616
{
1617 1618
	struct sock *sk = chan->sk;

1619
	chan->expected_ack_seq = 0;
1620
	chan->unacked_frames = 0;
1621
	chan->buffer_seq = 0;
1622 1623
	chan->num_acked = 0;
	chan->frames_sent = 0;
1624

1625 1626 1627 1628 1629
	setup_timer(&chan->retrans_timer, l2cap_retrans_timeout,
							(unsigned long) chan);
	setup_timer(&chan->monitor_timer, l2cap_monitor_timeout,
							(unsigned long) chan);
	setup_timer(&chan->ack_timer, l2cap_ack_timeout, (unsigned long) chan);
1630

1631 1632
	skb_queue_head_init(&chan->srej_q);
	skb_queue_head_init(&chan->busy_q);
1633

1634 1635
	INIT_LIST_HEAD(&chan->srej_l);

1636
	INIT_WORK(&chan->busy_work, l2cap_busy_work);
1637 1638

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1639 1640
}

1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653
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;
	}
}

1654
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1655 1656
{
	struct l2cap_conf_req *req = data;
1657
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
1658 1659
	void *ptr = req->data;

1660
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1661

1662
	if (chan->num_conf_req || chan->num_conf_rsp)
1663 1664
		goto done;

1665
	switch (chan->mode) {
1666 1667
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1668
		if (chan->conf_state & L2CAP_CONF_STATE2_DEVICE)
1669 1670
			break;

1671
		/* fall through */
1672
	default:
1673
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1674 1675 1676 1677
		break;
	}

done:
1678 1679
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1680

1681
	switch (chan->mode) {
1682
	case L2CAP_MODE_BASIC:
1683 1684
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1685 1686
			break;

1687 1688 1689 1690 1691 1692 1693
		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;

1694 1695
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
1696 1697 1698 1699
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
1700 1701
		rfc.txwin_size      = chan->tx_win;
		rfc.max_transmit    = chan->max_tx;
1702 1703
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1704
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1705 1706
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1707

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

1711
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1712 1713
			break;

1714
		if (chan->fcs == L2CAP_FCS_NONE ||
1715
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1716 1717
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1718
		}
1719 1720 1721 1722 1723 1724 1725 1726
		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;
1727
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1728 1729
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1730

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

1734
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1735 1736
			break;

1737
		if (chan->fcs == L2CAP_FCS_NONE ||
1738
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1739 1740
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1741
		}
1742 1743
		break;
	}
L
Linus Torvalds 已提交
1744

1745
	req->dcid  = cpu_to_le16(chan->dcid);
1746
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
1747 1748 1749 1750

	return ptr - data;
}

1751
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1752
{
1753 1754
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
1755 1756
	void *req = chan->conf_req;
	int len = chan->conf_len;
1757 1758
	int type, hint, olen;
	unsigned long val;
1759
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1760
	u16 mtu = L2CAP_DEFAULT_MTU;
1761
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
1762

1763
	BT_DBG("chan %p", chan);
1764

1765 1766
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
1767

1768
		hint  = type & L2CAP_CONF_HINT;
1769
		type &= L2CAP_CONF_MASK;
1770 1771 1772

		switch (type) {
		case L2CAP_CONF_MTU:
1773
			mtu = val;
1774 1775 1776
			break;

		case L2CAP_CONF_FLUSH_TO:
1777
			chan->flush_to = val;
1778 1779 1780 1781 1782
			break;

		case L2CAP_CONF_QOS:
			break;

1783 1784 1785 1786 1787
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

1788 1789
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
1790
				chan->conf_state |= L2CAP_CONF_NO_FCS_RECV;
1791 1792 1793

			break;

1794 1795 1796 1797 1798 1799 1800 1801 1802 1803
		default:
			if (hint)
				break;

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

1804
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
1805 1806
		goto done;

1807
	switch (chan->mode) {
1808 1809
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1810
		if (!(chan->conf_state & L2CAP_CONF_STATE2_DEVICE)) {
1811
			chan->mode = l2cap_select_mode(rfc.mode,
1812
					chan->conn->feat_mask);
1813 1814 1815
			break;
		}

1816
		if (chan->mode != rfc.mode)
1817
			return -ECONNREFUSED;
1818

1819 1820 1821 1822
		break;
	}

done:
1823
	if (chan->mode != rfc.mode) {
1824
		result = L2CAP_CONF_UNACCEPT;
1825
		rfc.mode = chan->mode;
1826

1827
		if (chan->num_conf_rsp == 1)
1828 1829 1830 1831 1832 1833 1834
			return -ECONNREFUSED;

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


1835 1836 1837 1838
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

1839 1840 1841
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
1842
			chan->omtu = mtu;
1843
			chan->conf_state |= L2CAP_CONF_MTU_DONE;
1844
		}
1845
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
1846

1847 1848
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
1849
			chan->fcs = L2CAP_FCS_NONE;
1850
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1851 1852 1853
			break;

		case L2CAP_MODE_ERTM:
1854 1855
			chan->remote_tx_win = rfc.txwin_size;
			chan->remote_max_tx = rfc.max_transmit;
1856

1857 1858
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1859

1860
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1861

1862 1863 1864 1865
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
1866

1867
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1868 1869 1870 1871

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

1872 1873 1874
			break;

		case L2CAP_MODE_STREAMING:
1875 1876
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1877

1878
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1879

1880
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1881 1882 1883 1884

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

1885 1886 1887
			break;

		default:
1888 1889
			result = L2CAP_CONF_UNACCEPT;

1890
			memset(&rfc, 0, sizeof(rfc));
1891
			rfc.mode = chan->mode;
1892
		}
1893

1894
		if (result == L2CAP_CONF_SUCCESS)
1895
			chan->conf_state |= L2CAP_CONF_OUTPUT_DONE;
1896
	}
1897
	rsp->scid   = cpu_to_le16(chan->dcid);
1898 1899 1900 1901
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
1902 1903
}

1904
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
1905 1906 1907 1908 1909 1910 1911
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

1912
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
1913 1914 1915 1916 1917 1918 1919 1920

	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;
1921
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
1922
			} else
1923 1924
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1925 1926 1927
			break;

		case L2CAP_CONF_FLUSH_TO:
1928
			chan->flush_to = val;
1929
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
1930
							2, chan->flush_to);
1931 1932 1933 1934 1935 1936
			break;

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

1937
			if ((chan->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
1938
							rfc.mode != chan->mode)
1939 1940
				return -ECONNREFUSED;

1941
			chan->fcs = 0;
1942 1943 1944 1945 1946 1947 1948

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

1949
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
1950 1951
		return -ECONNREFUSED;

1952
	chan->mode = rfc.mode;
1953

1954 1955 1956
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
1957 1958 1959
			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);
1960 1961
			break;
		case L2CAP_MODE_STREAMING:
1962
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
1963 1964 1965
		}
	}

1966
	req->dcid   = cpu_to_le16(chan->dcid);
1967 1968 1969 1970 1971
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

1972
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
1973 1974 1975 1976
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

1977
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1978

1979
	rsp->scid   = cpu_to_le16(chan->dcid);
1980
	rsp->result = cpu_to_le16(result);
1981
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
1982 1983 1984 1985

	return ptr - data;
}

1986
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
1987 1988
{
	struct l2cap_conn_rsp rsp;
1989
	struct l2cap_conn *conn = chan->conn;
1990 1991
	u8 buf[128];

1992 1993
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
1994 1995 1996 1997 1998
	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);

1999
	if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2000 2001
		return;

2002
	chan->conf_state |= L2CAP_CONF_REQ_SENT;
2003 2004 2005 2006 2007
	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

2008
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2009 2010 2011 2012 2013
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2014
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2015

2016
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032
		return;

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

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

done:
	switch (rfc.mode) {
	case L2CAP_MODE_ERTM:
2033 2034 2035
		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);
2036 2037
		break;
	case L2CAP_MODE_STREAMING:
2038
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2039 2040 2041
	}
}

2042 2043 2044 2045 2046 2047 2048 2049 2050 2051
static inline int l2cap_command_rej(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_cmd_rej *rej = (struct l2cap_cmd_rej *) data;

	if (rej->reason != 0x0000)
		return 0;

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

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2054
		conn->info_ident = 0;
2055

2056 2057 2058 2059 2060 2061
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2062 2063 2064 2065
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;
2066
	struct l2cap_chan *chan = NULL;
2067
	struct sock *parent, *sk = NULL;
2068
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2069 2070

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2071
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2072 2073 2074 2075 2076 2077 2078 2079 2080 2081

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

	/* Check if we have socket listening on psm */
	parent = l2cap_get_sock_by_psm(BT_LISTEN, psm, conn->src);
	if (!parent) {
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2082 2083
	bh_lock_sock(parent);

2084 2085 2086
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2087
		conn->disc_reason = 0x05;
2088 2089 2090 2091
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2092 2093 2094 2095
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2096
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2097 2098 2099
		goto response;
	}

2100
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
L
Linus Torvalds 已提交
2101 2102 2103
	if (!sk)
		goto response;

2104 2105 2106 2107 2108 2109
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		l2cap_sock_kill(sk);
		goto response;
	}

2110 2111
	l2cap_pi(sk)->chan = chan;

2112
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2113 2114

	/* Check if we already have channel with that dcid */
2115 2116
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2117 2118 2119 2120 2121 2122 2123 2124 2125 2126
		sock_set_flag(sk, SOCK_ZAPPED);
		l2cap_sock_kill(sk);
		goto response;
	}

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
	bacpy(&bt_sk(sk)->src, conn->src);
	bacpy(&bt_sk(sk)->dst, conn->dst);
2127 2128
	chan->psm  = psm;
	chan->dcid = scid;
L
Linus Torvalds 已提交
2129

2130 2131
	bt_accept_enqueue(parent, sk);

2132 2133
	__l2cap_chan_add(conn, chan);

2134
	dcid = chan->scid;
L
Linus Torvalds 已提交
2135 2136 2137

	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

2138
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2139

2140
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2141
		if (l2cap_check_security(chan)) {
2142 2143 2144 2145 2146 2147 2148 2149 2150 2151
			if (bt_sk(sk)->defer_setup) {
				sk->sk_state = BT_CONNECT2;
				result = L2CAP_CR_PEND;
				status = L2CAP_CS_AUTHOR_PEND;
				parent->sk_data_ready(parent, 0);
			} else {
				sk->sk_state = BT_CONFIG;
				result = L2CAP_CR_SUCCESS;
				status = L2CAP_CS_NO_INFO;
			}
2152 2153 2154 2155 2156 2157 2158 2159 2160
		} else {
			sk->sk_state = BT_CONNECT2;
			result = L2CAP_CR_PEND;
			status = L2CAP_CS_AUTHEN_PEND;
		}
	} else {
		sk->sk_state = BT_CONNECT2;
		result = L2CAP_CR_PEND;
		status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2161 2162
	}

2163
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2164 2165 2166 2167 2168

response:
	bh_unlock_sock(parent);

sendresp:
2169 2170 2171 2172
	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 已提交
2173
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188

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

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

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

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

2189
	if (chan && !(chan->conf_state & L2CAP_CONF_REQ_SENT) &&
2190 2191
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2192
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2193
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2194 2195
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2196 2197
	}

L
Linus Torvalds 已提交
2198 2199 2200 2201 2202 2203 2204
	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;
2205
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216
	struct sock *sk;
	u8 req[128];

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

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

	if (scid) {
2217
		chan = l2cap_get_chan_by_scid(conn, scid);
2218
		if (!chan)
2219
			return -EFAULT;
L
Linus Torvalds 已提交
2220
	} else {
2221
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2222
		if (!chan)
2223
			return -EFAULT;
L
Linus Torvalds 已提交
2224 2225
	}

2226 2227
	sk = chan->sk;

L
Linus Torvalds 已提交
2228 2229 2230
	switch (result) {
	case L2CAP_CR_SUCCESS:
		sk->sk_state = BT_CONFIG;
2231
		chan->ident = 0;
2232
		chan->dcid = dcid;
2233
		chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2234

2235
		if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2236 2237
			break;

2238
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2239

L
Linus Torvalds 已提交
2240
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2241 2242
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2243 2244 2245
		break;

	case L2CAP_CR_PEND:
2246
		chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
2247 2248 2249
		break;

	default:
2250 2251 2252 2253 2254 2255 2256 2257
		/* don't delete l2cap channel if sk is owned by user */
		if (sock_owned_by_user(sk)) {
			sk->sk_state = BT_DISCONN;
			l2cap_sock_clear_timer(sk);
			l2cap_sock_set_timer(sk, HZ / 5);
			break;
		}

2258
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2259 2260 2261 2262 2263 2264 2265
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2266
static inline void set_default_fcs(struct l2cap_chan *chan)
2267
{
2268 2269
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);

2270 2271 2272
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2273
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2274
		chan->fcs = L2CAP_FCS_NONE;
2275
	else if (!(pi->chan->conf_state & L2CAP_CONF_NO_FCS_RECV))
2276
		chan->fcs = L2CAP_FCS_CRC16;
2277 2278
}

2279
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2280 2281 2282 2283
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2284
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2285
	struct sock *sk;
2286
	int len;
L
Linus Torvalds 已提交
2287 2288 2289 2290 2291 2292

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

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

2293
	chan = l2cap_get_chan_by_scid(conn, dcid);
2294
	if (!chan)
L
Linus Torvalds 已提交
2295 2296
		return -ENOENT;

2297 2298
	sk = chan->sk;

2299 2300 2301 2302 2303 2304
	if (sk->sk_state != BT_CONFIG) {
		struct l2cap_cmd_rej rej;

		rej.reason = cpu_to_le16(0x0002);
		l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
				sizeof(rej), &rej);
2305
		goto unlock;
2306
	}
2307

2308
	/* Reject if config buffer is too small. */
2309
	len = cmd_len - sizeof(*req);
2310
	if (chan->conf_len + len > sizeof(chan->conf_req)) {
2311
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2312
				l2cap_build_conf_rsp(chan, rsp,
2313 2314 2315 2316 2317
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2318 2319
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2320 2321 2322 2323

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2324
				l2cap_build_conf_rsp(chan, rsp,
2325
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2326 2327 2328 2329
		goto unlock;
	}

	/* Complete config. */
2330
	len = l2cap_parse_conf_req(chan, rsp);
2331
	if (len < 0) {
2332
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2333
		goto unlock;
2334
	}
L
Linus Torvalds 已提交
2335

2336
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2337
	chan->num_conf_rsp++;
2338 2339

	/* Reset config buffer. */
2340
	chan->conf_len = 0;
2341

2342
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE))
2343 2344
		goto unlock;

2345
	if (chan->conf_state & L2CAP_CONF_INPUT_DONE) {
2346
		set_default_fcs(chan);
2347

L
Linus Torvalds 已提交
2348
		sk->sk_state = BT_CONNECTED;
2349

2350 2351
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2352
		skb_queue_head_init(&chan->tx_q);
2353
		if (chan->mode == L2CAP_MODE_ERTM)
2354
			l2cap_ertm_init(chan);
2355

L
Linus Torvalds 已提交
2356
		l2cap_chan_ready(sk);
2357 2358 2359
		goto unlock;
	}

2360
	if (!(chan->conf_state & L2CAP_CONF_REQ_SENT)) {
2361
		u8 buf[64];
2362
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
L
Linus Torvalds 已提交
2363
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2364 2365
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376
	}

unlock:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_config_rsp(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
	u16 scid, flags, result;
2377
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2378
	struct sock *sk;
2379
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2380 2381 2382 2383 2384

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

2385 2386
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2387

2388
	chan = l2cap_get_chan_by_scid(conn, scid);
2389
	if (!chan)
L
Linus Torvalds 已提交
2390 2391
		return 0;

2392 2393
	sk = chan->sk;

L
Linus Torvalds 已提交
2394 2395
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2396
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2397 2398 2399
		break;

	case L2CAP_CONF_UNACCEPT:
2400
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2401 2402
			char req[64];

2403
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2404
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2405 2406 2407
				goto done;
			}

2408 2409
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2410 2411
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2412
			if (len < 0) {
2413
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2414 2415 2416 2417 2418
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2419
			chan->num_conf_req++;
2420 2421 2422
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2423 2424
		}

2425
	default:
2426
		sk->sk_err = ECONNRESET;
L
Linus Torvalds 已提交
2427
		l2cap_sock_set_timer(sk, HZ * 5);
2428
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2429 2430 2431 2432 2433 2434
		goto done;
	}

	if (flags & 0x01)
		goto done;

2435
	chan->conf_state |= L2CAP_CONF_INPUT_DONE;
L
Linus Torvalds 已提交
2436

2437
	if (chan->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2438
		set_default_fcs(chan);
2439

L
Linus Torvalds 已提交
2440
		sk->sk_state = BT_CONNECTED;
2441 2442
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2443
		skb_queue_head_init(&chan->tx_q);
2444
		if (chan->mode ==  L2CAP_MODE_ERTM)
2445
			l2cap_ertm_init(chan);
2446

L
Linus Torvalds 已提交
2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459
		l2cap_chan_ready(sk);
	}

done:
	bh_unlock_sock(sk);
	return 0;
}

static inline int l2cap_disconnect_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u8 *data)
{
	struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
	struct l2cap_disconn_rsp rsp;
	u16 dcid, scid;
2460
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2461 2462 2463 2464 2465 2466 2467
	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);

2468
	chan = l2cap_get_chan_by_scid(conn, dcid);
2469
	if (!chan)
L
Linus Torvalds 已提交
2470 2471
		return 0;

2472 2473
	sk = chan->sk;

2474 2475
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2476 2477 2478 2479
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2480 2481 2482 2483 2484 2485 2486 2487 2488
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
		sk->sk_state = BT_DISCONN;
		l2cap_sock_clear_timer(sk);
		l2cap_sock_set_timer(sk, HZ / 5);
		bh_unlock_sock(sk);
		return 0;
	}

2489
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2490 2491 2492 2493 2494 2495 2496 2497 2498 2499
	bh_unlock_sock(sk);

	l2cap_sock_kill(sk);
	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;
2500
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2501 2502 2503 2504 2505 2506 2507
	struct sock *sk;

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

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

2508
	chan = l2cap_get_chan_by_scid(conn, scid);
2509
	if (!chan)
L
Linus Torvalds 已提交
2510 2511
		return 0;

2512 2513
	sk = chan->sk;

2514 2515 2516 2517 2518 2519 2520 2521 2522
	/* don't delete l2cap channel if sk is owned by user */
	if (sock_owned_by_user(sk)) {
		sk->sk_state = BT_DISCONN;
		l2cap_sock_clear_timer(sk);
		l2cap_sock_set_timer(sk, HZ / 5);
		bh_unlock_sock(sk);
		return 0;
	}

2523
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538
	bh_unlock_sock(sk);

	l2cap_sock_kill(sk);
	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);

2539 2540
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2541
		u32 feat_mask = l2cap_feat_mask;
2542 2543 2544
		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);
2545
		if (!disable_ertm)
2546 2547
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2548
		put_unaligned_le32(feat_mask, rsp->data);
2549 2550
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2551 2552 2553 2554 2555 2556 2557 2558
	} else if (type == L2CAP_IT_FIXED_CHAN) {
		u8 buf[12];
		struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
		rsp->type   = cpu_to_le16(L2CAP_IT_FIXED_CHAN);
		rsp->result = cpu_to_le16(L2CAP_IR_SUCCESS);
		memcpy(buf + 4, l2cap_fixed_chan, 8);
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2559 2560 2561 2562 2563 2564 2565
	} 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 已提交
2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579

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

2580 2581 2582 2583 2584
	/* 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;

2585 2586
	del_timer(&conn->info_timer);

2587 2588 2589 2590 2591 2592 2593 2594 2595
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2596
	if (type == L2CAP_IT_FEAT_MASK) {
2597
		conn->feat_mask = get_unaligned_le32(rsp->data);
2598

2599
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613
			struct l2cap_info_req req;
			req.type = cpu_to_le16(L2CAP_IT_FIXED_CHAN);

			conn->info_ident = l2cap_get_ident(conn);

			l2cap_send_cmd(conn, conn->info_ident,
					L2CAP_INFO_REQ, sizeof(req), &req);
		} else {
			conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
			conn->info_ident = 0;

			l2cap_conn_start(conn);
		}
	} else if (type == L2CAP_IT_FIXED_CHAN) {
2614
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2615
		conn->info_ident = 0;
2616 2617 2618

		l2cap_conn_start(conn);
	}
2619

L
Linus Torvalds 已提交
2620 2621 2622
	return 0;
}

2623
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650
							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;
2651
	int err;
2652 2653 2654 2655 2656 2657 2658 2659 2660

	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;
2661 2662
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
2663 2664 2665 2666 2667 2668 2669
	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));
2670 2671 2672

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
2673 2674 2675 2676 2677 2678 2679
		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);

2680 2681 2682
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

2683 2684 2685
	return 0;
}

2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751
static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
			struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
{
	int err = 0;

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

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

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

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

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

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

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

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

	case L2CAP_ECHO_RSP:
		break;

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

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

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

	return err;
}

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

	case L2CAP_CONN_PARAM_UPDATE_REQ:
2752
		return l2cap_conn_param_update_req(conn, cmd, data);
2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764

	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 已提交
2765 2766 2767 2768
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
2769
	int err;
L
Linus Torvalds 已提交
2770 2771 2772 2773

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
2774
		u16 cmd_len;
L
Linus Torvalds 已提交
2775 2776 2777 2778
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

2779
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
2780

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

2783
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
2784 2785 2786 2787
			BT_DBG("corrupted command");
			break;
		}

2788 2789 2790 2791
		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 已提交
2792 2793 2794

		if (err) {
			struct l2cap_cmd_rej rej;
2795 2796

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

			/* FIXME: Map err to a valid reason */
2799
			rej.reason = cpu_to_le16(0);
L
Linus Torvalds 已提交
2800 2801 2802
			l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ, sizeof(rej), &rej);
		}

2803 2804
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
2805 2806 2807 2808 2809
	}

	kfree_skb(skb);
}

2810
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
2811 2812 2813 2814
{
	u16 our_fcs, rcv_fcs;
	int hdr_size = L2CAP_HDR_SIZE + 2;

2815
	if (chan->fcs == L2CAP_FCS_CRC16) {
2816 2817 2818 2819 2820
		skb_trim(skb, skb->len - 2);
		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)
2821
			return -EBADMSG;
2822 2823 2824 2825
	}
	return 0;
}

2826
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
2827 2828 2829
{
	u16 control = 0;

2830
	chan->frames_sent = 0;
2831

2832
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2833

2834
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
2835
		control |= L2CAP_SUPER_RCV_NOT_READY;
2836 2837
		l2cap_send_sframe(chan, control);
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
2838 2839
	}

2840 2841
	if (chan->conn_state & L2CAP_CONN_REMOTE_BUSY)
		l2cap_retransmit_frames(chan);
2842

2843
	l2cap_ertm_send(chan);
2844

2845
	if (!(chan->conn_state & L2CAP_CONN_LOCAL_BUSY) &&
2846
			chan->frames_sent == 0) {
2847
		control |= L2CAP_SUPER_RCV_READY;
2848
		l2cap_send_sframe(chan, control);
2849 2850 2851
	}
}

2852
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
2853 2854
{
	struct sk_buff *next_skb;
2855
	int tx_seq_offset, next_tx_seq_offset;
2856 2857 2858 2859

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

2860
	next_skb = skb_peek(&chan->srej_q);
2861
	if (!next_skb) {
2862
		__skb_queue_tail(&chan->srej_q, skb);
2863
		return 0;
2864 2865
	}

2866
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
2867 2868 2869
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

2870
	do {
2871 2872 2873
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

2874
		next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
2875
						chan->buffer_seq) % 64;
2876 2877 2878 2879
		if (next_tx_seq_offset < 0)
			next_tx_seq_offset += 64;

		if (next_tx_seq_offset > tx_seq_offset) {
2880
			__skb_queue_before(&chan->srej_q, next_skb, skb);
2881
			return 0;
2882 2883
		}

2884
		if (skb_queue_is_last(&chan->srej_q, next_skb))
2885 2886
			break;

2887
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
2888

2889
	__skb_queue_tail(&chan->srej_q, skb);
2890 2891

	return 0;
2892 2893
}

2894
static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
2895 2896
{
	struct sk_buff *_skb;
2897
	int err;
2898 2899 2900

	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
2901
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2902 2903
			goto drop;

2904
		err = sock_queue_rcv_skb(chan->sk, skb);
2905 2906 2907 2908 2909 2910
		if (!err)
			return err;

		break;

	case L2CAP_SDU_START:
2911
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2912 2913
			goto drop;

2914
		chan->sdu_len = get_unaligned_le16(skb->data);
2915

2916
		if (chan->sdu_len > chan->imtu)
2917 2918
			goto disconnect;

2919 2920
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu)
2921 2922 2923 2924 2925 2926
			return -ENOMEM;

		/* pull sdu_len bytes only after alloc, because of Local Busy
		 * condition we have to be sure that this will be executed
		 * only once, i.e., when alloc does not fail */
		skb_pull(skb, 2);
2927

2928
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2929

2930
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
2931
		chan->partial_sdu_len = skb->len;
2932 2933 2934
		break;

	case L2CAP_SDU_CONTINUE:
2935
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
2936 2937
			goto disconnect;

2938
		if (!chan->sdu)
2939 2940
			goto disconnect;

2941 2942
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
2943 2944
			goto drop;

2945
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2946

2947 2948 2949
		break;

	case L2CAP_SDU_END:
2950
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
2951 2952
			goto disconnect;

2953
		if (!chan->sdu)
2954 2955
			goto disconnect;

2956
		if (!(chan->conn_state & L2CAP_CONN_SAR_RETRY)) {
2957
			chan->partial_sdu_len += skb->len;
2958

2959
			if (chan->partial_sdu_len > chan->imtu)
2960
				goto drop;
2961

2962
			if (chan->partial_sdu_len != chan->sdu_len)
2963
				goto drop;
2964

2965
			memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2966
		}
2967

2968
		_skb = skb_clone(chan->sdu, GFP_ATOMIC);
2969
		if (!_skb) {
2970
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2971 2972 2973
			return -ENOMEM;
		}

2974
		err = sock_queue_rcv_skb(chan->sk, _skb);
2975
		if (err < 0) {
2976
			kfree_skb(_skb);
2977
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2978 2979 2980
			return err;
		}

2981 2982
		chan->conn_state &= ~L2CAP_CONN_SAR_RETRY;
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
2983

2984
		kfree_skb(chan->sdu);
2985 2986 2987 2988
		break;
	}

	kfree_skb(skb);
2989
	return 0;
2990 2991

drop:
2992 2993
	kfree_skb(chan->sdu);
	chan->sdu = NULL;
2994 2995

disconnect:
2996
	l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
2997 2998 2999 3000
	kfree_skb(skb);
	return 0;
}

3001
static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
3002 3003 3004 3005 3006
{
	struct sk_buff *skb;
	u16 control;
	int err;

3007
	while ((skb = skb_dequeue(&chan->busy_q))) {
3008
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3009
		err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3010
		if (err < 0) {
3011
			skb_queue_head(&chan->busy_q, skb);
3012 3013 3014
			return -EBUSY;
		}

3015
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3016 3017
	}

3018
	if (!(chan->conn_state & L2CAP_CONN_RNR_SENT))
3019 3020
		goto done;

3021
	control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3022
	control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3023
	l2cap_send_sframe(chan, control);
3024
	chan->retry_count = 1;
3025

3026
	del_timer(&chan->retrans_timer);
3027 3028
	__mod_monitor_timer();

3029
	chan->conn_state |= L2CAP_CONN_WAIT_F;
3030 3031

done:
3032 3033
	chan->conn_state &= ~L2CAP_CONN_LOCAL_BUSY;
	chan->conn_state &= ~L2CAP_CONN_RNR_SENT;
3034

3035
	BT_DBG("chan %p, Exit local busy", chan);
3036 3037 3038 3039

	return 0;
}

3040 3041 3042
static void l2cap_busy_work(struct work_struct *work)
{
	DECLARE_WAITQUEUE(wait, current);
3043 3044 3045
	struct l2cap_chan *chan =
		container_of(work, struct l2cap_chan, busy_work);
	struct sock *sk = chan->sk;
3046 3047 3048 3049 3050
	int n_tries = 0, timeo = HZ/5, err;
	struct sk_buff *skb;

	lock_sock(sk);

3051
	add_wait_queue(sk_sleep(sk), &wait);
3052
	while ((skb = skb_peek(&chan->busy_q))) {
3053 3054 3055 3056
		set_current_state(TASK_INTERRUPTIBLE);

		if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
			err = -EBUSY;
3057
			l2cap_send_disconn_req(chan->conn, chan, EBUSY);
3058
			break;
3059 3060 3061 3062 3063 3064 3065
		}

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
3066
			break;
3067 3068 3069 3070 3071 3072 3073 3074
		}

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock(sk);

		err = sock_error(sk);
		if (err)
3075
			break;
3076

3077
		if (l2cap_try_push_rx_skb(chan) == 0)
3078 3079 3080 3081
			break;
	}

	set_current_state(TASK_RUNNING);
3082
	remove_wait_queue(sk_sleep(sk), &wait);
3083 3084 3085 3086

	release_sock(sk);
}

3087
static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3088 3089 3090
{
	int sctrl, err;

3091
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3092
		bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3093
		__skb_queue_tail(&chan->busy_q, skb);
3094
		return l2cap_try_push_rx_skb(chan);
3095 3096


3097 3098
	}

3099
	err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3100
	if (err >= 0) {
3101
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3102 3103 3104 3105
		return err;
	}

	/* Busy Condition */
3106
	BT_DBG("chan %p, Enter local busy", chan);
3107

3108
	chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3109
	bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3110
	__skb_queue_tail(&chan->busy_q, skb);
3111

3112
	sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3113
	sctrl |= L2CAP_SUPER_RCV_NOT_READY;
3114
	l2cap_send_sframe(chan, sctrl);
3115

3116
	chan->conn_state |= L2CAP_CONN_RNR_SENT;
3117

3118
	del_timer(&chan->ack_timer);
3119

3120
	queue_work(_busy_wq, &chan->busy_work);
3121 3122 3123 3124

	return err;
}

3125
static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3126 3127 3128 3129
{
	struct sk_buff *_skb;
	int err = -EINVAL;

3130 3131 3132 3133 3134
	/*
	 * TODO: We have to notify the userland if some data is lost with the
	 * Streaming Mode.
	 */

3135 3136
	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3137
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3138
			kfree_skb(chan->sdu);
3139 3140 3141
			break;
		}

3142
		err = sock_queue_rcv_skb(chan->sk, skb);
3143 3144 3145 3146 3147 3148
		if (!err)
			return 0;

		break;

	case L2CAP_SDU_START:
3149
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3150
			kfree_skb(chan->sdu);
3151 3152 3153
			break;
		}

3154
		chan->sdu_len = get_unaligned_le16(skb->data);
3155 3156
		skb_pull(skb, 2);

3157
		if (chan->sdu_len > chan->imtu) {
3158 3159 3160 3161
			err = -EMSGSIZE;
			break;
		}

3162 3163
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu) {
3164 3165 3166 3167
			err = -ENOMEM;
			break;
		}

3168
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3169

3170
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3171
		chan->partial_sdu_len = skb->len;
3172 3173 3174 3175
		err = 0;
		break;

	case L2CAP_SDU_CONTINUE:
3176
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3177 3178
			break;

3179
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3180

3181 3182 3183
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
			kfree_skb(chan->sdu);
3184 3185 3186 3187 3188 3189
		else
			err = 0;

		break;

	case L2CAP_SDU_END:
3190
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3191 3192
			break;

3193
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3194

3195
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3196
		chan->partial_sdu_len += skb->len;
3197

3198
		if (chan->partial_sdu_len > chan->imtu)
3199 3200
			goto drop;

3201 3202
		if (chan->partial_sdu_len == chan->sdu_len) {
			_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3203
			err = sock_queue_rcv_skb(chan->sk, _skb);
3204 3205 3206 3207 3208
			if (err < 0)
				kfree_skb(_skb);
		}
		err = 0;

3209
drop:
3210
		kfree_skb(chan->sdu);
3211 3212 3213 3214 3215 3216 3217
		break;
	}

	kfree_skb(skb);
	return err;
}

3218
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3219 3220
{
	struct sk_buff *skb;
3221
	u16 control;
3222

3223
	while ((skb = skb_peek(&chan->srej_q))) {
3224 3225 3226
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3227
		skb = skb_dequeue(&chan->srej_q);
3228
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3229
		l2cap_ertm_reassembly_sdu(chan, skb, control);
3230 3231
		chan->buffer_seq_srej =
			(chan->buffer_seq_srej + 1) % 64;
3232
		tx_seq = (tx_seq + 1) % 64;
3233 3234 3235
	}
}

3236
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3237 3238 3239 3240
{
	struct srej_list *l, *tmp;
	u16 control;

3241
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3242 3243 3244 3245 3246 3247 3248
		if (l->tx_seq == tx_seq) {
			list_del(&l->list);
			kfree(l);
			return;
		}
		control = L2CAP_SUPER_SELECT_REJECT;
		control |= l->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3249
		l2cap_send_sframe(chan, control);
3250
		list_del(&l->list);
3251
		list_add_tail(&l->list, &chan->srej_l);
3252 3253 3254
	}
}

3255
static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3256 3257 3258 3259
{
	struct srej_list *new;
	u16 control;

3260
	while (tx_seq != chan->expected_tx_seq) {
3261
		control = L2CAP_SUPER_SELECT_REJECT;
3262
		control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3263
		l2cap_send_sframe(chan, control);
3264 3265

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3266 3267
		new->tx_seq = chan->expected_tx_seq;
		chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3268
		list_add_tail(&new->list, &chan->srej_l);
3269
	}
3270
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3271 3272
}

3273
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3274 3275
{
	u8 tx_seq = __get_txseq(rx_control);
3276
	u8 req_seq = __get_reqseq(rx_control);
3277
	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3278
	int tx_seq_offset, expected_tx_seq_offset;
3279
	int num_to_ack = (chan->tx_win/6) + 1;
3280 3281
	int err = 0;

3282 3283
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
							tx_seq, rx_control);
3284

3285
	if (L2CAP_CTRL_FINAL & rx_control &&
3286
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3287
		del_timer(&chan->monitor_timer);
3288
		if (chan->unacked_frames > 0)
3289
			__mod_retrans_timer();
3290
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3291 3292
	}

3293 3294
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3295

3296
	if (tx_seq == chan->expected_tx_seq)
3297
		goto expected;
3298

3299
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3300 3301 3302 3303
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

	/* invalid tx_seq */
3304
	if (tx_seq_offset >= chan->tx_win) {
3305
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3306 3307 3308
		goto drop;
	}

3309
	if (chan->conn_state == L2CAP_CONN_LOCAL_BUSY)
3310 3311
		goto drop;

3312
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3313
		struct srej_list *first;
3314

3315
		first = list_first_entry(&chan->srej_l,
3316 3317
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3318
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3319
			l2cap_check_srej_gap(chan, tx_seq);
3320 3321 3322 3323

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

3324
			if (list_empty(&chan->srej_l)) {
3325
				chan->buffer_seq = chan->buffer_seq_srej;
3326 3327
				chan->conn_state &= ~L2CAP_CONN_SREJ_SENT;
				l2cap_send_ack(chan);
3328
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3329 3330 3331
			}
		} else {
			struct srej_list *l;
3332 3333

			/* duplicated tx_seq */
3334
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3335
				goto drop;
3336

3337
			list_for_each_entry(l, &chan->srej_l, list) {
3338
				if (l->tx_seq == tx_seq) {
3339
					l2cap_resend_srejframe(chan, tx_seq);
3340 3341 3342
					return 0;
				}
			}
3343
			l2cap_send_srejframe(chan, tx_seq);
3344 3345
		}
	} else {
3346
		expected_tx_seq_offset =
3347
			(chan->expected_tx_seq - chan->buffer_seq) % 64;
3348 3349 3350 3351 3352 3353 3354
		if (expected_tx_seq_offset < 0)
			expected_tx_seq_offset += 64;

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

3355
		chan->conn_state |= L2CAP_CONN_SREJ_SENT;
3356

3357
		BT_DBG("chan %p, Enter SREJ", chan);
3358

3359
		INIT_LIST_HEAD(&chan->srej_l);
3360
		chan->buffer_seq_srej = chan->buffer_seq;
3361

3362 3363
		__skb_queue_head_init(&chan->srej_q);
		__skb_queue_head_init(&chan->busy_q);
3364
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3365

3366
		chan->conn_state |= L2CAP_CONN_SEND_PBIT;
3367

3368
		l2cap_send_srejframe(chan, tx_seq);
3369

3370
		del_timer(&chan->ack_timer);
3371
	}
3372 3373
	return 0;

3374
expected:
3375
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3376

3377
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3378 3379
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3380
		__skb_queue_tail(&chan->srej_q, skb);
3381 3382 3383
		return 0;
	}

3384
	err = l2cap_push_rx_skb(chan, skb, rx_control);
3385 3386 3387
	if (err < 0)
		return 0;

3388
	if (rx_control & L2CAP_CTRL_FINAL) {
3389 3390
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3391
		else
3392
			l2cap_retransmit_frames(chan);
3393 3394
	}

3395 3396
	__mod_ack_timer();

3397 3398
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3399
		l2cap_send_ack(chan);
3400

3401
	return 0;
3402 3403 3404 3405

drop:
	kfree_skb(skb);
	return 0;
3406 3407
}

3408
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3409
{
3410
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3411 3412
						rx_control);

3413 3414
	chan->expected_ack_seq = __get_reqseq(rx_control);
	l2cap_drop_acked_frames(chan);
3415

3416
	if (rx_control & L2CAP_CTRL_POLL) {
3417 3418 3419
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
			if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3420
					(chan->unacked_frames > 0))
3421 3422
				__mod_retrans_timer();

3423 3424
			chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
			l2cap_send_srejtail(chan);
3425
		} else {
3426
			l2cap_send_i_or_rr_or_rnr(chan);
3427
		}
3428

3429
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3430
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3431

3432 3433
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3434
		else
3435
			l2cap_retransmit_frames(chan);
3436

3437
	} else {
3438
		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3439
				(chan->unacked_frames > 0))
3440
			__mod_retrans_timer();
3441

3442 3443 3444
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT)
			l2cap_send_ack(chan);
3445
		else
3446
			l2cap_ertm_send(chan);
3447 3448
	}
}
3449

3450
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3451 3452
{
	u8 tx_seq = __get_reqseq(rx_control);
3453

3454
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3455

3456
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3457

3458 3459
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3460 3461

	if (rx_control & L2CAP_CTRL_FINAL) {
3462 3463
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3464
		else
3465
			l2cap_retransmit_frames(chan);
3466
	} else {
3467
		l2cap_retransmit_frames(chan);
3468

3469 3470
		if (chan->conn_state & L2CAP_CONN_WAIT_F)
			chan->conn_state |= L2CAP_CONN_REJ_ACT;
3471 3472
	}
}
3473
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3474 3475
{
	u8 tx_seq = __get_reqseq(rx_control);
3476

3477
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3478

3479
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3480

3481
	if (rx_control & L2CAP_CTRL_POLL) {
3482 3483
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3484

3485 3486
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		l2cap_retransmit_one_frame(chan, tx_seq);
3487

3488
		l2cap_ertm_send(chan);
3489

3490
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3491
			chan->srej_save_reqseq = tx_seq;
3492
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3493
		}
3494
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3495
		if ((chan->conn_state & L2CAP_CONN_SREJ_ACT) &&
3496
				chan->srej_save_reqseq == tx_seq)
3497
			chan->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3498
		else
3499
			l2cap_retransmit_one_frame(chan, tx_seq);
3500
	} else {
3501 3502
		l2cap_retransmit_one_frame(chan, tx_seq);
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3503
			chan->srej_save_reqseq = tx_seq;
3504
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3505
		}
3506 3507 3508
	}
}

3509
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3510 3511 3512
{
	u8 tx_seq = __get_reqseq(rx_control);

3513
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, tx_seq, rx_control);
3514

3515
	chan->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3516 3517
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3518

3519
	if (rx_control & L2CAP_CTRL_POLL)
3520
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
3521

3522
	if (!(chan->conn_state & L2CAP_CONN_SREJ_SENT)) {
3523
		del_timer(&chan->retrans_timer);
3524
		if (rx_control & L2CAP_CTRL_POLL)
3525
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3526
		return;
3527
	}
3528 3529

	if (rx_control & L2CAP_CTRL_POLL)
3530
		l2cap_send_srejtail(chan);
3531
	else
3532
		l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3533 3534
}

3535
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3536
{
3537
	BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3538

3539
	if (L2CAP_CTRL_FINAL & rx_control &&
3540
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3541
		del_timer(&chan->monitor_timer);
3542
		if (chan->unacked_frames > 0)
3543
			__mod_retrans_timer();
3544
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3545 3546 3547 3548
	}

	switch (rx_control & L2CAP_CTRL_SUPERVISE) {
	case L2CAP_SUPER_RCV_READY:
3549
		l2cap_data_channel_rrframe(chan, rx_control);
3550 3551
		break;

3552
	case L2CAP_SUPER_REJECT:
3553
		l2cap_data_channel_rejframe(chan, rx_control);
3554
		break;
3555

3556
	case L2CAP_SUPER_SELECT_REJECT:
3557
		l2cap_data_channel_srejframe(chan, rx_control);
3558 3559 3560
		break;

	case L2CAP_SUPER_RCV_NOT_READY:
3561
		l2cap_data_channel_rnrframe(chan, rx_control);
3562 3563 3564
		break;
	}

3565
	kfree_skb(skb);
3566 3567 3568
	return 0;
}

3569 3570
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3571
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584
	u16 control;
	u8 req_seq;
	int len, next_tx_seq_offset, req_seq_offset;

	control = get_unaligned_le16(skb->data);
	skb_pull(skb, 2);
	len = skb->len;

	/*
	 * We can just drop the corrupted I-frame here.
	 * Receiver will miss it and start proper recovery
	 * procedures and ask retransmission.
	 */
3585
	if (l2cap_check_fcs(chan, skb))
3586 3587 3588 3589 3590
		goto drop;

	if (__is_sar_start(control) && __is_iframe(control))
		len -= 2;

3591
	if (chan->fcs == L2CAP_FCS_CRC16)
3592 3593
		len -= 2;

3594
	if (len > chan->mps) {
3595
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3596 3597 3598 3599
		goto drop;
	}

	req_seq = __get_reqseq(control);
3600
	req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3601 3602 3603 3604
	if (req_seq_offset < 0)
		req_seq_offset += 64;

	next_tx_seq_offset =
3605
		(chan->next_tx_seq - chan->expected_ack_seq) % 64;
3606 3607 3608 3609 3610
	if (next_tx_seq_offset < 0)
		next_tx_seq_offset += 64;

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3611
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3612 3613 3614 3615 3616
		goto drop;
	}

	if (__is_iframe(control)) {
		if (len < 0) {
3617
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3618 3619 3620
			goto drop;
		}

3621
		l2cap_data_channel_iframe(chan, control, skb);
3622 3623 3624
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3625
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3626 3627 3628
			goto drop;
		}

3629
		l2cap_data_channel_sframe(chan, control, skb);
3630 3631 3632 3633 3634 3635 3636 3637 3638
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3639 3640
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3641
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3642
	struct sock *sk;
3643
	struct l2cap_pinfo *pi;
3644
	u16 control;
3645 3646
	u8 tx_seq;
	int len;
L
Linus Torvalds 已提交
3647

3648
	chan = l2cap_get_chan_by_scid(conn, cid);
3649
	if (!chan) {
L
Linus Torvalds 已提交
3650 3651 3652 3653
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3654
	sk = chan->sk;
3655 3656
	pi = l2cap_pi(sk);

3657
	BT_DBG("chan %p, len %d", chan, skb->len);
L
Linus Torvalds 已提交
3658 3659 3660 3661

	if (sk->sk_state != BT_CONNECTED)
		goto drop;

3662
	switch (chan->mode) {
3663 3664 3665 3666 3667
	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 已提交
3668

3669
		if (chan->imtu < skb->len)
3670
			goto drop;
L
Linus Torvalds 已提交
3671

3672 3673 3674 3675 3676
		if (!sock_queue_rcv_skb(sk, skb))
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3677 3678
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3679
		} else {
3680
			if (sk_add_backlog(sk, skb))
3681 3682
				goto drop;
		}
3683

3684
		goto done;
3685

3686 3687 3688 3689 3690
	case L2CAP_MODE_STREAMING:
		control = get_unaligned_le16(skb->data);
		skb_pull(skb, 2);
		len = skb->len;

3691
		if (l2cap_check_fcs(chan, skb))
3692 3693
			goto drop;

3694 3695 3696
		if (__is_sar_start(control))
			len -= 2;

3697
		if (chan->fcs == L2CAP_FCS_CRC16)
3698 3699
			len -= 2;

3700
		if (len > chan->mps || len < 0 || __is_sframe(control))
3701 3702 3703 3704
			goto drop;

		tx_seq = __get_txseq(control);

3705 3706
		if (chan->expected_tx_seq == tx_seq)
			chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3707
		else
3708
			chan->expected_tx_seq = (tx_seq + 1) % 64;
3709

3710
		l2cap_streaming_reassembly_sdu(chan, skb, control);
3711 3712 3713

		goto done;

3714
	default:
3715
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3716 3717
		break;
	}
L
Linus Torvalds 已提交
3718 3719 3720 3721 3722

drop:
	kfree_skb(skb);

done:
3723 3724 3725
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3726 3727 3728
	return 0;
}

3729
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3730 3731 3732 3733 3734 3735 3736
{
	struct sock *sk;

	sk = l2cap_get_sock_by_psm(0, psm, conn->src);
	if (!sk)
		goto drop;

3737 3738
	bh_lock_sock(sk);

L
Linus Torvalds 已提交
3739 3740 3741 3742 3743
	BT_DBG("sk %p, len %d", sk, skb->len);

	if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
		goto drop;

3744
	if (l2cap_pi(sk)->chan->imtu < skb->len)
L
Linus Torvalds 已提交
3745 3746 3747 3748 3749 3750 3751 3752 3753
		goto drop;

	if (!sock_queue_rcv_skb(sk, skb))
		goto done;

drop:
	kfree_skb(skb);

done:
3754 3755
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3756 3757 3758
	return 0;
}

3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
	struct sock *sk;

	sk = l2cap_get_sock_by_scid(0, cid, conn->src);
	if (!sk)
		goto drop;

	bh_lock_sock(sk);

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

	if (sk->sk_state != BT_BOUND && sk->sk_state != BT_CONNECTED)
		goto drop;

3774
	if (l2cap_pi(sk)->chan->imtu < skb->len)
3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788
		goto drop;

	if (!sock_queue_rcv_skb(sk, skb))
		goto done;

drop:
	kfree_skb(skb);

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

L
Linus Torvalds 已提交
3789 3790 3791
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
3792 3793
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
3794 3795 3796 3797 3798

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

3799 3800 3801 3802 3803
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
3804 3805 3806
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
3807
	case L2CAP_CID_LE_SIGNALING:
3808
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
3809 3810 3811
		l2cap_sig_channel(conn, skb);
		break;

3812
	case L2CAP_CID_CONN_LESS:
3813
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
3814 3815 3816 3817
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

3818 3819 3820 3821
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

L
Linus Torvalds 已提交
3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

static int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
{
	int exact = 0, lm1 = 0, lm2 = 0;
	register struct sock *sk;
	struct hlist_node *node;

	if (type != ACL_LINK)
3837
		return -EINVAL;
L
Linus Torvalds 已提交
3838 3839 3840 3841 3842 3843

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

	/* Find listening sockets and check their link_mode */
	read_lock(&l2cap_sk_list.lock);
	sk_for_each(sk, node, &l2cap_sk_list.head) {
3844 3845
		struct l2cap_chan *chan = l2cap_pi(sk)->chan;

L
Linus Torvalds 已提交
3846 3847 3848 3849
		if (sk->sk_state != BT_LISTEN)
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3850
			lm1 |= HCI_LM_ACCEPT;
3851
			if (chan->role_switch)
3852
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
3853
			exact++;
3854 3855
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
3856
			if (chan->role_switch)
3857 3858
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
3859 3860 3861 3862 3863 3864 3865 3866
	}
	read_unlock(&l2cap_sk_list.lock);

	return exact ? lm1 : lm2;
}

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

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

3871
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3872
		return -EINVAL;
L
Linus Torvalds 已提交
3873 3874 3875 3876 3877

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
3878
	} else
L
Linus Torvalds 已提交
3879 3880 3881 3882 3883
		l2cap_conn_del(hcon, bt_err(status));

	return 0;
}

3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896
static int l2cap_disconn_ind(struct hci_conn *hcon)
{
	struct l2cap_conn *conn = hcon->l2cap_data;

	BT_DBG("hcon %p", hcon);

	if (hcon->type != ACL_LINK || !conn)
		return 0x13;

	return conn->disc_reason;
}

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

3900
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3901
		return -EINVAL;
L
Linus Torvalds 已提交
3902 3903

	l2cap_conn_del(hcon, bt_err(reason));
3904

L
Linus Torvalds 已提交
3905 3906 3907
	return 0;
}

3908
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
3909
{
3910 3911
	struct sock *sk = chan->sk;

3912
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM)
3913 3914
		return;

3915
	if (encrypt == 0x00) {
3916
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
3917 3918
			l2cap_sock_clear_timer(sk);
			l2cap_sock_set_timer(sk, HZ * 5);
3919
		} else if (chan->sec_level == BT_SECURITY_HIGH)
3920 3921
			__l2cap_sock_close(sk, ECONNREFUSED);
	} else {
3922
		if (chan->sec_level == BT_SECURITY_MEDIUM)
3923 3924 3925 3926
			l2cap_sock_clear_timer(sk);
	}
}

3927
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
3928
{
3929
	struct l2cap_conn *conn = hcon->l2cap_data;
3930
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3931

3932
	if (!conn)
L
Linus Torvalds 已提交
3933
		return 0;
3934

L
Linus Torvalds 已提交
3935 3936
	BT_DBG("conn %p", conn);

3937
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
3938

3939
	list_for_each_entry(chan, &conn->chan_l, list) {
3940
		struct sock *sk = chan->sk;
3941

L
Linus Torvalds 已提交
3942 3943
		bh_lock_sock(sk);

3944
		if (chan->conf_state & L2CAP_CONF_CONNECT_PEND) {
3945 3946 3947 3948
			bh_unlock_sock(sk);
			continue;
		}

3949
		if (!status && (sk->sk_state == BT_CONNECTED ||
3950
						sk->sk_state == BT_CONFIG)) {
3951
			l2cap_check_encryption(chan, encrypt);
3952 3953 3954 3955
			bh_unlock_sock(sk);
			continue;
		}

3956 3957 3958
		if (sk->sk_state == BT_CONNECT) {
			if (!status) {
				struct l2cap_conn_req req;
3959 3960
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
3961

3962
				chan->ident = l2cap_get_ident(conn);
3963
				chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
3964

3965
				l2cap_send_cmd(conn, chan->ident,
3966 3967 3968 3969 3970 3971 3972 3973
					L2CAP_CONN_REQ, sizeof(req), &req);
			} else {
				l2cap_sock_clear_timer(sk);
				l2cap_sock_set_timer(sk, HZ / 10);
			}
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
			__u16 result;
L
Linus Torvalds 已提交
3974

3975 3976 3977 3978 3979 3980 3981 3982 3983
			if (!status) {
				sk->sk_state = BT_CONFIG;
				result = L2CAP_CR_SUCCESS;
			} else {
				sk->sk_state = BT_DISCONN;
				l2cap_sock_set_timer(sk, HZ / 10);
				result = L2CAP_CR_SEC_BLOCK;
			}

3984 3985
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
3986
			rsp.result = cpu_to_le16(result);
3987
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3988 3989
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
3990
		}
L
Linus Torvalds 已提交
3991 3992 3993 3994

		bh_unlock_sock(sk);
	}

3995
	read_unlock(&conn->chan_lock);
3996

L
Linus Torvalds 已提交
3997 3998 3999 4000 4001 4002 4003
	return 0;
}

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

4004 4005 4006 4007
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4008 4009 4010 4011
		goto drop;

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

4012
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4013
		struct l2cap_hdr *hdr;
4014
		struct l2cap_chan *chan;
4015
		u16 cid;
L
Linus Torvalds 已提交
4016 4017 4018 4019 4020 4021 4022 4023 4024 4025
		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);
		}

4026 4027
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4028 4029 4030 4031 4032 4033 4034
			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;
4035
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051

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

4052
		chan = l2cap_get_chan_by_scid(conn, cid);
4053

4054 4055
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4056

4057
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4058 4059
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4060
							chan->imtu);
4061 4062 4063 4064
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4065
			bh_unlock_sock(sk);
4066
		}
4067

L
Linus Torvalds 已提交
4068
		/* Allocate skb for the complete frame (with header) */
4069 4070
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4071 4072
			goto drop;

4073
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4074
								skb->len);
L
Linus Torvalds 已提交
4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094
		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;
		}

4095
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4096
								skb->len);
L
Linus Torvalds 已提交
4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110
		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;
}

4111
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4112 4113 4114 4115 4116 4117
{
	struct sock *sk;
	struct hlist_node *node;

	read_lock_bh(&l2cap_sk_list.lock);

4118 4119
	sk_for_each(sk, node, &l2cap_sk_list.head) {
		struct l2cap_pinfo *pi = l2cap_pi(sk);
4120
		struct l2cap_chan *chan = pi->chan;
4121

4122
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4123 4124
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4125 4126
					sk->sk_state, __le16_to_cpu(chan->psm),
					chan->scid, chan->dcid,
4127 4128
					chan->imtu, chan->omtu, chan->sec_level,
					chan->mode);
4129
	}
L
Linus Torvalds 已提交
4130 4131 4132

	read_unlock_bh(&l2cap_sk_list.lock);

4133
	return 0;
L
Linus Torvalds 已提交
4134 4135
}

4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148
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 已提交
4149 4150 4151 4152 4153 4154 4155

static struct hci_proto l2cap_hci_proto = {
	.name		= "L2CAP",
	.id		= HCI_PROTO_L2CAP,
	.connect_ind	= l2cap_connect_ind,
	.connect_cfm	= l2cap_connect_cfm,
	.disconn_ind	= l2cap_disconn_ind,
4156
	.disconn_cfm	= l2cap_disconn_cfm,
4157
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4158 4159 4160
	.recv_acldata	= l2cap_recv_acldata
};

4161
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4162 4163
{
	int err;
4164

4165
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4166 4167 4168
	if (err < 0)
		return err;

4169
	_busy_wq = create_singlethread_workqueue("l2cap");
4170
	if (!_busy_wq) {
4171
		err = -ENOMEM;
L
Linus Torvalds 已提交
4172 4173 4174 4175 4176 4177 4178 4179 4180 4181
		goto error;
	}

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

4182 4183 4184 4185 4186 4187
	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 已提交
4188 4189 4190 4191

	return 0;

error:
4192
	destroy_workqueue(_busy_wq);
4193
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4194 4195 4196
	return err;
}

4197
void l2cap_exit(void)
L
Linus Torvalds 已提交
4198
{
4199
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4200

4201 4202 4203
	flush_workqueue(_busy_wq);
	destroy_workqueue(_busy_wq);

L
Linus Torvalds 已提交
4204 4205 4206
	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4207
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4208 4209
}

4210 4211
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");