l2cap_core.c 93.3 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 83 84 85

	list_for_each_entry(c, &conn->chan_l, list) {
		struct sock *s = c->sk;
		if (l2cap_pi(s)->dcid == cid)
			return c;
86
	}
87 88
	return NULL;

89 90
}

91
static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn, u16 cid)
92
{
93
	struct l2cap_chan *c;
94 95 96 97 98

	list_for_each_entry(c, &conn->chan_l, list) {
		struct sock *s = c->sk;
		if (l2cap_pi(s)->scid == cid)
			return c;
99
	}
100
	return NULL;
101 102 103 104
}

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

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

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

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

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

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

140
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
141
{
142
	u16 cid = L2CAP_CID_DYN_START;
143

144
	for (; cid < L2CAP_CID_DYN_END; cid++) {
145
		if (!__l2cap_get_chan_by_scid(conn, cid))
146 147 148 149 150 151
			return cid;
	}

	return 0;
}

152 153 154 155 156 157 158 159 160 161 162 163 164 165
static struct l2cap_chan *l2cap_chan_alloc(struct sock *sk)
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

	return chan;
}

static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
166
{
167
	struct sock *sk = chan->sk;
168

169 170
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
			l2cap_pi(sk)->psm, l2cap_pi(sk)->dcid);
171

172 173
	conn->disc_reason = 0x13;

174 175
	l2cap_pi(sk)->conn = conn;

176
	if (sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM) {
177 178 179 180 181 182 183
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
			l2cap_pi(sk)->omtu = L2CAP_LE_DEFAULT_MTU;
			l2cap_pi(sk)->scid = L2CAP_CID_LE_DATA;
			l2cap_pi(sk)->dcid = L2CAP_CID_LE_DATA;
		} else {
			/* Alloc CID for connection-oriented socket */
184
			l2cap_pi(sk)->scid = l2cap_alloc_cid(conn);
185 186
			l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
		}
187 188
	} else if (sk->sk_type == SOCK_DGRAM) {
		/* Connectionless socket */
189 190
		l2cap_pi(sk)->scid = L2CAP_CID_CONN_LESS;
		l2cap_pi(sk)->dcid = L2CAP_CID_CONN_LESS;
191 192 193
		l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
	} else {
		/* Raw socket can send/recv signalling messages only */
194 195
		l2cap_pi(sk)->scid = L2CAP_CID_SIGNALING;
		l2cap_pi(sk)->dcid = L2CAP_CID_SIGNALING;
196 197 198
		l2cap_pi(sk)->omtu = L2CAP_DEFAULT_MTU;
	}

199 200 201
	sock_hold(sk);

	list_add(&chan->list, &conn->chan_l);
202 203
}

204
/* Delete channel.
205
 * Must be called on the locked socket. */
206
void l2cap_chan_del(struct l2cap_chan *chan, int err)
207
{
208
	struct sock *sk = chan->sk;
209 210 211 212 213
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	struct sock *parent = bt_sk(sk)->parent;

	l2cap_sock_clear_timer(sk);

214
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
215

216
	if (conn) {
217 218 219 220 221 222
		/* Delete from channel list */
		write_lock_bh(&conn->chan_lock);
		list_del(&chan->list);
		write_unlock_bh(&conn->chan_lock);
		__sock_put(sk);

223 224 225 226
		l2cap_pi(sk)->conn = NULL;
		hci_conn_put(conn->hcon);
	}

227
	sk->sk_state = BT_CLOSED;
228 229 230 231 232 233 234 235 236 237
	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);
238

239 240 241 242
	if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE &&
			l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE))
		goto free;

243 244 245 246 247
	skb_queue_purge(TX_QUEUE(sk));

	if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
		struct srej_list *l, *tmp;

248 249 250
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
251

252 253
		skb_queue_purge(&chan->srej_q);
		skb_queue_purge(&chan->busy_q);
254

255
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
256 257 258 259
			list_del(&l->list);
			kfree(l);
		}
	}
260

261
free:
262
	kfree(chan);
263 264
}

265
static inline u8 l2cap_get_auth_type(struct sock *sk)
266
{
267 268 269 270 271 272 273 274 275 276 277 278
	if (sk->sk_type == SOCK_RAW) {
		switch (l2cap_pi(sk)->sec_level) {
		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;
		}
	} else if (l2cap_pi(sk)->psm == cpu_to_le16(0x0001)) {
		if (l2cap_pi(sk)->sec_level == BT_SECURITY_LOW)
			l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
279

280
		if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
281
			return HCI_AT_NO_BONDING_MITM;
282
		else
283
			return HCI_AT_NO_BONDING;
284 285 286
	} else {
		switch (l2cap_pi(sk)->sec_level) {
		case BT_SECURITY_HIGH:
287
			return HCI_AT_GENERAL_BONDING_MITM;
288
		case BT_SECURITY_MEDIUM:
289
			return HCI_AT_GENERAL_BONDING;
290
		default:
291
			return HCI_AT_NO_BONDING;
292
		}
293
	}
294 295 296 297 298 299 300 301 302
}

/* Service level security */
static inline int l2cap_check_security(struct sock *sk)
{
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	__u8 auth_type;

	auth_type = l2cap_get_auth_type(sk);
303

304 305
	return hci_conn_security(conn->hcon, l2cap_pi(sk)->sec_level,
								auth_type);
306 307
}

308
u8 l2cap_get_ident(struct l2cap_conn *conn)
309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329
{
	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;
}

330
void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
331 332
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
333
	u8 flags;
334 335 336 337

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

	if (!skb)
338
		return;
339

340 341 342 343 344 345
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(conn->hcon, skb, flags);
346 347
}

348
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
349 350 351
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
352
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
353
	struct l2cap_conn *conn = pi->conn;
354
	struct sock *sk = (struct sock *)pi;
355
	int count, hlen = L2CAP_HDR_SIZE + 2;
356
	u8 flags;
357

358 359 360
	if (sk->sk_state != BT_CONNECTED)
		return;

361 362
	if (pi->fcs == L2CAP_FCS_CRC16)
		hlen += 2;
363

364
	BT_DBG("chan %p, control 0x%2.2x", chan, control);
365

366
	count = min_t(unsigned int, conn->mtu, hlen);
367 368
	control |= L2CAP_CTRL_FRAME_TYPE;

369
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
370
		control |= L2CAP_CTRL_FINAL;
371
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
372 373
	}

374
	if (chan->conn_state & L2CAP_CONN_SEND_PBIT) {
375
		control |= L2CAP_CTRL_POLL;
376
		chan->conn_state &= ~L2CAP_CONN_SEND_PBIT;
377 378
	}

379 380
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
381
		return;
382 383

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
384
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
385 386 387
	lh->cid = cpu_to_le16(pi->dcid);
	put_unaligned_le16(control, skb_put(skb, 2));

388 389 390 391 392
	if (pi->fcs == L2CAP_FCS_CRC16) {
		u16 fcs = crc16(0, (u8 *)lh, count - 2);
		put_unaligned_le16(fcs, skb_put(skb, 2));
	}

393 394 395 396 397 398
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(pi->conn->hcon, skb, flags);
399 400
}

401
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
402
{
403
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
404
		control |= L2CAP_SUPER_RCV_NOT_READY;
405
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
406
	} else
407 408
		control |= L2CAP_SUPER_RCV_READY;

409
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
410

411
	l2cap_send_sframe(chan, control);
412 413
}

414 415 416 417 418
static inline int __l2cap_no_conn_pending(struct sock *sk)
{
	return !(l2cap_pi(sk)->conf_state & L2CAP_CONF_CONNECT_PEND);
}

419
static void l2cap_do_start(struct l2cap_chan *chan)
420
{
421
	struct sock *sk = chan->sk;
422 423 424
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
425 426 427
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

428
		if (l2cap_check_security(sk) && __l2cap_no_conn_pending(sk)) {
429 430 431
			struct l2cap_conn_req req;
			req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
			req.psm  = l2cap_pi(sk)->psm;
432

433
			chan->ident = l2cap_get_ident(conn);
434
			l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
435

436 437
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
438
		}
439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
	} 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);
	}
}

454 455 456
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
457
	if (!disable_ertm)
458 459 460 461 462 463 464 465 466 467 468 469
		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;
	}
}

470
void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
471
{
472
	struct sock *sk;
473 474
	struct l2cap_disconn_req req;

475 476 477
	if (!conn)
		return;

478 479
	sk = chan->sk;

480 481 482
	skb_queue_purge(TX_QUEUE(sk));

	if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM) {
483 484 485
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
486 487
	}

488 489 490 491
	req.dcid = cpu_to_le16(l2cap_pi(sk)->dcid);
	req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
492 493

	sk->sk_state = BT_DISCONN;
494
	sk->sk_err = err;
495 496
}

L
Linus Torvalds 已提交
497
/* ---- L2CAP connections ---- */
498 499
static void l2cap_conn_start(struct l2cap_conn *conn)
{
500
	struct l2cap_chan *chan, *tmp;
501 502 503

	BT_DBG("conn %p", conn);

504
	read_lock(&conn->chan_lock);
505

506
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
507
		struct sock *sk = chan->sk;
508

509 510
		bh_lock_sock(sk);

511 512
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
513 514 515 516 517
			bh_unlock_sock(sk);
			continue;
		}

		if (sk->sk_state == BT_CONNECT) {
518
			struct l2cap_conn_req req;
519

520 521 522 523 524
			if (!l2cap_check_security(sk) ||
					!__l2cap_no_conn_pending(sk)) {
				bh_unlock_sock(sk);
				continue;
			}
525

526 527 528 529
			if (!l2cap_mode_supported(l2cap_pi(sk)->mode,
					conn->feat_mask)
					&& l2cap_pi(sk)->conf_state &
					L2CAP_CONF_STATE2_DEVICE) {
530 531 532 533 534
				/* __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);
535 536
				bh_unlock_sock(sk);
				continue;
537
			}
538 539 540 541

			req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
			req.psm  = l2cap_pi(sk)->psm;

542
			chan->ident = l2cap_get_ident(conn);
543 544
			l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;

545 546
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
547

548 549
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
550
			char buf[128];
551 552 553
			rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
			rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);

554
			if (l2cap_check_security(sk)) {
555 556 557 558 559 560 561 562 563 564 565
				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);
				}
566 567 568 569 570
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

571 572
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
573 574 575 576 577 578 579 580 581

			if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT ||
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

			l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
582 583
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
584 585 586 587 588
		}

		bh_unlock_sock(sk);
	}

589
	read_unlock(&conn->chan_lock);
590 591
}

592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626
/* 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)
{
	struct sock *s, *sk = NULL, *sk1 = NULL;
	struct hlist_node *node;

	read_lock(&l2cap_sk_list.lock);

	sk_for_each(sk, node, &l2cap_sk_list.head) {
		if (state && sk->sk_state != state)
			continue;

		if (l2cap_pi(sk)->scid == cid) {
			/* Exact match. */
			if (!bacmp(&bt_sk(sk)->src, src))
				break;

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
				sk1 = sk;
		}
	}
	s = node ? sk : sk1;
	if (s)
		bh_lock_sock(s);
	read_unlock(&l2cap_sk_list.lock);

	return s;
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
	struct sock *parent, *uninitialized_var(sk);
627
	struct l2cap_chan *chan;
628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646

	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;

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

647 648 649 650 651 652
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		l2cap_sock_kill(sk);
		goto clean;
	}

653
	write_lock_bh(&conn->chan_lock);
654 655 656 657

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
658

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

662 663
	bt_accept_enqueue(parent, sk);

664 665 666
	__l2cap_chan_add(conn, chan);

	l2cap_pi(sk)->chan = chan;
667 668 669 670 671 672

	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

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

673
	write_unlock_bh(&conn->chan_lock);
674 675 676 677 678

clean:
	bh_unlock_sock(parent);
}

679 680
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
681
	struct l2cap_chan *chan;
682

683
	BT_DBG("conn %p", conn);
684

685 686 687
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

688
	read_lock(&conn->chan_lock);
689

690
	list_for_each_entry(chan, &conn->chan_l, list) {
691
		struct sock *sk = chan->sk;
692

693
		bh_lock_sock(sk);
694

695 696 697 698 699 700
		if (conn->hcon->type == LE_LINK) {
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		}

701 702
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
703 704 705 706
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		} else if (sk->sk_state == BT_CONNECT)
707
			l2cap_do_start(chan);
708

709
		bh_unlock_sock(sk);
710
	}
711

712
	read_unlock(&conn->chan_lock);
713 714 715 716 717
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
718
	struct l2cap_chan *chan;
719 720 721

	BT_DBG("conn %p", conn);

722
	read_lock(&conn->chan_lock);
723

724
	list_for_each_entry(chan, &conn->chan_l, list) {
725
		struct sock *sk = chan->sk;
726

727
		if (l2cap_pi(sk)->force_reliable)
728 729 730
			sk->sk_err = err;
	}

731
	read_unlock(&conn->chan_lock);
732 733 734 735 736 737
}

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

738
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
739
	conn->info_ident = 0;
740

741 742 743
	l2cap_conn_start(conn);
}

L
Linus Torvalds 已提交
744 745
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
746
	struct l2cap_conn *conn = hcon->l2cap_data;
L
Linus Torvalds 已提交
747

748
	if (conn || status)
L
Linus Torvalds 已提交
749 750
		return conn;

751 752
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
	if (!conn)
L
Linus Torvalds 已提交
753 754 755 756 757
		return NULL;

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

758 759
	BT_DBG("hcon %p conn %p", hcon, conn);

760 761 762 763 764
	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 已提交
765 766 767
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

768 769
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
770
	spin_lock_init(&conn->lock);
771 772 773
	rwlock_init(&conn->chan_lock);

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

775 776
	if (hcon->type != LE_LINK)
		setup_timer(&conn->info_timer, l2cap_info_timeout,
D
Dave Young 已提交
777 778
						(unsigned long) conn);

779 780
	conn->disc_reason = 0x13;

L
Linus Torvalds 已提交
781 782 783
	return conn;
}

784
static void l2cap_conn_del(struct hci_conn *hcon, int err)
L
Linus Torvalds 已提交
785
{
786
	struct l2cap_conn *conn = hcon->l2cap_data;
787
	struct l2cap_chan *chan, *l;
L
Linus Torvalds 已提交
788 789
	struct sock *sk;

790 791
	if (!conn)
		return;
L
Linus Torvalds 已提交
792 793 794

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

795
	kfree_skb(conn->rx_skb);
L
Linus Torvalds 已提交
796 797

	/* Kill channels */
798
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
799
		sk = chan->sk;
L
Linus Torvalds 已提交
800
		bh_lock_sock(sk);
801
		l2cap_chan_del(chan, err);
L
Linus Torvalds 已提交
802 803 804 805
		bh_unlock_sock(sk);
		l2cap_sock_kill(sk);
	}

806 807
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
		del_timer_sync(&conn->info_timer);
808

L
Linus Torvalds 已提交
809 810 811 812
	hcon->l2cap_data = NULL;
	kfree(conn);
}

813
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
L
Linus Torvalds 已提交
814
{
815
	write_lock_bh(&conn->chan_lock);
816
	__l2cap_chan_add(conn, chan);
817
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
818 819 820 821 822 823 824
}

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

/* Find socket with psm and source bdaddr.
 * Returns closest match.
 */
825
static struct sock *l2cap_get_sock_by_psm(int state, __le16 psm, bdaddr_t *src)
L
Linus Torvalds 已提交
826 827 828 829
{
	struct sock *sk = NULL, *sk1 = NULL;
	struct hlist_node *node;

830 831
	read_lock(&l2cap_sk_list.lock);

L
Linus Torvalds 已提交
832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847
	sk_for_each(sk, node, &l2cap_sk_list.head) {
		if (state && sk->sk_state != state)
			continue;

		if (l2cap_pi(sk)->psm == psm) {
			/* 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);
848 849

	return node ? sk : sk1;
L
Linus Torvalds 已提交
850 851
}

852
int l2cap_do_connect(struct sock *sk)
L
Linus Torvalds 已提交
853 854 855 856
{
	bdaddr_t *src = &bt_sk(sk)->src;
	bdaddr_t *dst = &bt_sk(sk)->dst;
	struct l2cap_conn *conn;
857
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
858 859
	struct hci_conn *hcon;
	struct hci_dev *hdev;
860
	__u8 auth_type;
861
	int err;
L
Linus Torvalds 已提交
862

863 864
	BT_DBG("%s -> %s psm 0x%2.2x", batostr(src), batostr(dst),
							l2cap_pi(sk)->psm);
L
Linus Torvalds 已提交
865

866 867
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
868 869 870 871
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

872
	auth_type = l2cap_get_auth_type(sk);
873

874 875
	if (l2cap_pi(sk)->dcid == L2CAP_CID_LE_DATA)
		hcon = hci_connect(hdev, LE_LINK, dst,
876
					l2cap_pi(sk)->sec_level, auth_type);
877 878 879 880
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
					l2cap_pi(sk)->sec_level, auth_type);

881 882
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
883
		goto done;
884
	}
L
Linus Torvalds 已提交
885 886 887 888

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
889
		err = -ENOMEM;
L
Linus Torvalds 已提交
890 891 892
		goto done;
	}

893 894 895 896 897 898 899
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		hci_conn_put(hcon);
		err = -ENOMEM;
		goto done;
	}

L
Linus Torvalds 已提交
900 901 902
	/* Update source addr of the socket */
	bacpy(src, conn->src);

903 904 905
	l2cap_chan_add(conn, chan);

	l2cap_pi(sk)->chan = chan;
L
Linus Torvalds 已提交
906 907 908 909 910

	sk->sk_state = BT_CONNECT;
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

	if (hcon->state == BT_CONNECTED) {
911 912
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
L
Linus Torvalds 已提交
913
			l2cap_sock_clear_timer(sk);
914 915
			if (l2cap_check_security(sk))
				sk->sk_state = BT_CONNECTED;
916
		} else
917
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
918 919
	}

920 921
	err = 0;

L
Linus Torvalds 已提交
922 923 924 925 926 927
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

928
int __l2cap_wait_ack(struct sock *sk)
929 930 931 932 933
{
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

934
	add_wait_queue(sk_sleep(sk), &wait);
935
	while ((l2cap_pi(sk)->chan->unacked_frames > 0 && l2cap_pi(sk)->conn)) {
936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954
		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);
955
	remove_wait_queue(sk_sleep(sk), &wait);
956 957 958
	return err;
}

959 960
static void l2cap_monitor_timeout(unsigned long arg)
{
961 962
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
963

964
	BT_DBG("chan %p", chan);
965

966
	bh_lock_sock(sk);
967
	if (chan->retry_count >= chan->remote_max_tx) {
968
		l2cap_send_disconn_req(l2cap_pi(sk)->conn, chan, ECONNABORTED);
969
		bh_unlock_sock(sk);
970 971 972
		return;
	}

973
	chan->retry_count++;
974 975
	__mod_monitor_timer();

976
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
977
	bh_unlock_sock(sk);
978 979 980 981
}

static void l2cap_retrans_timeout(unsigned long arg)
{
982 983
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
984

985
	BT_DBG("chan %p", chan);
986

987
	bh_lock_sock(sk);
988
	chan->retry_count = 1;
989 990
	__mod_monitor_timer();

991
	chan->conn_state |= L2CAP_CONN_WAIT_F;
992

993
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
994
	bh_unlock_sock(sk);
995 996
}

997
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
998
{
999
	struct sock *sk = chan->sk;
1000
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1001

1002
	while ((skb = skb_peek(TX_QUEUE(sk))) &&
1003
			chan->unacked_frames) {
1004
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1005
			break;
L
Linus Torvalds 已提交
1006

1007 1008
		skb = skb_dequeue(TX_QUEUE(sk));
		kfree_skb(skb);
L
Linus Torvalds 已提交
1009

1010
		chan->unacked_frames--;
1011
	}
L
Linus Torvalds 已提交
1012

1013
	if (!chan->unacked_frames)
1014
		del_timer(&chan->retrans_timer);
1015
}
L
Linus Torvalds 已提交
1016

1017
void l2cap_do_send(struct sock *sk, struct sk_buff *skb)
1018 1019
{
	struct l2cap_pinfo *pi = l2cap_pi(sk);
1020 1021
	struct hci_conn *hcon = pi->conn->hcon;
	u16 flags;
1022 1023

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

1025 1026 1027 1028 1029 1030
	if (!pi->flushable && lmp_no_flush_capable(hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(hcon, skb, flags);
1031 1032
}

1033
void l2cap_streaming_send(struct l2cap_chan *chan)
1034
{
1035
	struct sock *sk = chan->sk;
1036
	struct sk_buff *skb;
1037
	struct l2cap_pinfo *pi = l2cap_pi(sk);
1038
	u16 control, fcs;
1039

1040 1041
	while ((skb = skb_dequeue(TX_QUEUE(sk)))) {
		control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1042
		control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1043
		put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1044

1045
		if (pi->fcs == L2CAP_FCS_CRC16) {
1046 1047
			fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
			put_unaligned_le16(fcs, skb->data + skb->len - 2);
1048 1049
		}

1050
		l2cap_do_send(sk, skb);
1051

1052
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1053 1054 1055
	}
}

1056
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1057
{
1058
	struct sock *sk = chan->sk;
1059 1060 1061 1062 1063
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	struct sk_buff *skb, *tx_skb;
	u16 control, fcs;

	skb = skb_peek(TX_QUEUE(sk));
1064 1065
	if (!skb)
		return;
1066

1067 1068
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1069 1070
			break;

1071 1072
		if (skb_queue_is_last(TX_QUEUE(sk), skb))
			return;
1073

1074
	} while ((skb = skb_queue_next(TX_QUEUE(sk), skb)));
1075

1076 1077
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1078
		l2cap_send_disconn_req(pi->conn, chan, ECONNABORTED);
1079 1080 1081 1082 1083 1084
		return;
	}

	tx_skb = skb_clone(skb, GFP_ATOMIC);
	bt_cb(skb)->retries++;
	control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1085

1086
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1087
		control |= L2CAP_CTRL_FINAL;
1088
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1089
	}
1090

1091
	control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1092
			| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1093

1094 1095 1096 1097 1098 1099 1100 1101
	put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

	if (pi->fcs == L2CAP_FCS_CRC16) {
		fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
		put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
	}

	l2cap_do_send(sk, tx_skb);
1102 1103
}

1104
int l2cap_ertm_send(struct l2cap_chan *chan)
1105 1106
{
	struct sk_buff *skb, *tx_skb;
1107
	struct sock *sk = chan->sk;
1108
	struct l2cap_pinfo *pi = l2cap_pi(sk);
1109
	u16 control, fcs;
1110
	int nsent = 0;
1111

1112 1113
	if (sk->sk_state != BT_CONNECTED)
		return -ENOTCONN;
1114

1115
	while ((skb = sk->sk_send_head) && (!l2cap_tx_window_full(chan))) {
1116

1117 1118
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1119
			l2cap_send_disconn_req(pi->conn, chan, ECONNABORTED);
1120 1121 1122
			break;
		}

1123 1124
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1125 1126
		bt_cb(skb)->retries++;

1127
		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1128 1129
		control &= L2CAP_CTRL_SAR;

1130
		if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1131
			control |= L2CAP_CTRL_FINAL;
1132
			chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1133
		}
1134 1135
		control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
				| (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1136 1137
		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1138

1139
		if (pi->fcs == L2CAP_FCS_CRC16) {
1140 1141 1142 1143
			fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
			put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
		}

1144 1145
		l2cap_do_send(sk, tx_skb);

1146
		__mod_retrans_timer();
1147

1148 1149
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1150

1151
		if (bt_cb(skb)->retries == 1)
1152
			chan->unacked_frames++;
1153

1154
		chan->frames_sent++;
1155 1156 1157 1158 1159

		if (skb_queue_is_last(TX_QUEUE(sk), skb))
			sk->sk_send_head = NULL;
		else
			sk->sk_send_head = skb_queue_next(TX_QUEUE(sk), skb);
1160 1161

		nsent++;
1162 1163
	}

1164 1165 1166
	return nsent;
}

1167
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1168
{
1169
	struct sock *sk = chan->sk;
1170 1171 1172 1173 1174
	int ret;

	if (!skb_queue_empty(TX_QUEUE(sk)))
		sk->sk_send_head = TX_QUEUE(sk)->next;

1175
	chan->next_tx_seq = chan->expected_ack_seq;
1176
	ret = l2cap_ertm_send(chan);
1177 1178 1179
	return ret;
}

1180
static void l2cap_send_ack(struct l2cap_chan *chan)
1181 1182 1183
{
	u16 control = 0;

1184
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1185

1186
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
1187
		control |= L2CAP_SUPER_RCV_NOT_READY;
1188 1189
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
		l2cap_send_sframe(chan, control);
1190
		return;
1191
	}
1192

1193
	if (l2cap_ertm_send(chan) > 0)
1194 1195 1196
		return;

	control |= L2CAP_SUPER_RCV_READY;
1197
	l2cap_send_sframe(chan, control);
1198 1199
}

1200
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1201 1202 1203 1204 1205 1206 1207
{
	struct srej_list *tail;
	u16 control;

	control = L2CAP_SUPER_SELECT_REJECT;
	control |= L2CAP_CTRL_FINAL;

1208
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1209 1210
	control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;

1211
	l2cap_send_sframe(chan, control);
1212 1213
}

1214 1215 1216 1217 1218
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1219

1220
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1221
		return -EFAULT;
L
Linus Torvalds 已提交
1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232

	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)
1233
			return err;
1234 1235
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1236 1237 1238 1239 1240 1241 1242 1243

		sent += count;
		len  -= count;

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

	return sent;
1244
}
L
Linus Torvalds 已提交
1245

1246
struct sk_buff *l2cap_create_connless_pdu(struct sock *sk, struct msghdr *msg, size_t len)
1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258
{
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	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)
1259
		return ERR_PTR(err);
1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
	lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(l2cap_pi(sk)->psm, skb_put(skb, 2));

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

1275
struct sk_buff *l2cap_create_basic_pdu(struct sock *sk, struct msghdr *msg, size_t len)
1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287
{
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	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)
1288
		return ERR_PTR(err);
1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
	lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
	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;
}

1303
struct sk_buff *l2cap_create_iframe_pdu(struct sock *sk, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1304 1305 1306 1307 1308 1309 1310 1311
{
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	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);

1312 1313 1314
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1315 1316 1317
	if (sdulen)
		hlen += 2;

1318 1319 1320
	if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16)
		hlen += 2;

1321 1322 1323 1324
	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)
1325
		return ERR_PTR(err);
1326 1327 1328 1329 1330 1331

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
	lh->cid = cpu_to_le16(l2cap_pi(sk)->dcid);
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(control, skb_put(skb, 2));
1332 1333
	if (sdulen)
		put_unaligned_le16(sdulen, skb_put(skb, 2));
1334 1335 1336 1337 1338 1339

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

1341 1342 1343
	if (l2cap_pi(sk)->fcs == L2CAP_FCS_CRC16)
		put_unaligned_le16(0, skb_put(skb, 2));

1344
	bt_cb(skb)->retries = 0;
1345
	return skb;
L
Linus Torvalds 已提交
1346 1347
}

1348
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1349
{
1350
	struct sock *sk = chan->sk;
1351 1352 1353 1354 1355
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
	u16 control;
	size_t size = 0;

1356
	skb_queue_head_init(&sar_queue);
1357
	control = L2CAP_SDU_START;
1358
	skb = l2cap_create_iframe_pdu(sk, msg, chan->remote_mps, control, len);
1359 1360 1361 1362
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1363 1364
	len -= chan->remote_mps;
	size += chan->remote_mps;
1365 1366 1367 1368

	while (len > 0) {
		size_t buflen;

1369
		if (len > chan->remote_mps) {
1370
			control = L2CAP_SDU_CONTINUE;
1371
			buflen = chan->remote_mps;
1372
		} else {
1373
			control = L2CAP_SDU_END;
1374 1375 1376
			buflen = len;
		}

1377
		skb = l2cap_create_iframe_pdu(sk, msg, buflen, control, 0);
1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
	skb_queue_splice_tail(&sar_queue, TX_QUEUE(sk));
	if (sk->sk_send_head == NULL)
		sk->sk_send_head = sar_queue.next;

	return size;
}

L
Linus Torvalds 已提交
1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420
static void l2cap_chan_ready(struct sock *sk)
{
	struct sock *parent = bt_sk(sk)->parent;

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

	l2cap_pi(sk)->conf_state = 0;
	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;
1421
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1422 1423 1424

	BT_DBG("conn %p", conn);

1425 1426
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1427
		struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1428 1429 1430 1431 1432 1433
		if (sk->sk_type != SOCK_RAW)
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1434 1435
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1436 1437 1438 1439 1440
			continue;

		if (sock_queue_rcv_skb(sk, nskb))
			kfree_skb(nskb);
	}
1441
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452
}

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

1453 1454
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1455 1456 1457 1458 1459 1460 1461 1462 1463

	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);
1464
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1465 1466 1467 1468 1469

	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 已提交
1470 1471 1472 1473

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1474
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524

	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:
1525
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1526 1527 1528
		break;

	case 4:
1529
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
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
		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:
1556
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1557 1558 1559
		break;

	case 4:
1560
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1561 1562 1563 1564 1565 1566 1567 1568 1569 1570
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1571 1572
static void l2cap_ack_timeout(unsigned long arg)
{
1573
	struct l2cap_chan *chan = (void *) arg;
1574

1575 1576 1577
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1578 1579
}

1580
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1581
{
1582 1583
	struct sock *sk = chan->sk;

1584
	chan->expected_ack_seq = 0;
1585
	chan->unacked_frames = 0;
1586
	chan->buffer_seq = 0;
1587 1588
	chan->num_acked = 0;
	chan->frames_sent = 0;
1589

1590 1591 1592 1593 1594
	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);
1595

1596 1597
	skb_queue_head_init(&chan->srej_q);
	skb_queue_head_init(&chan->busy_q);
1598

1599 1600
	INIT_LIST_HEAD(&chan->srej_l);

1601
	INIT_WORK(&chan->busy_work, l2cap_busy_work);
1602 1603

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1604 1605
}

1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618
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;
	}
}

1619
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1620
{
1621
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
L
Linus Torvalds 已提交
1622
	struct l2cap_conf_req *req = data;
1623
	struct l2cap_conf_rfc rfc = { .mode = pi->mode };
L
Linus Torvalds 已提交
1624 1625
	void *ptr = req->data;

1626
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1627

1628
	if (chan->num_conf_req || chan->num_conf_rsp)
1629 1630 1631 1632 1633
		goto done;

	switch (pi->mode) {
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1634
		if (pi->conf_state & L2CAP_CONF_STATE2_DEVICE)
1635 1636
			break;

1637
		/* fall through */
1638 1639 1640 1641 1642 1643
	default:
		pi->mode = l2cap_select_mode(rfc.mode, pi->conn->feat_mask);
		break;
	}

done:
1644 1645 1646
	if (pi->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);

1647 1648
	switch (pi->mode) {
	case L2CAP_MODE_BASIC:
1649 1650 1651 1652
		if (!(pi->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(pi->conn->feat_mask & L2CAP_FEAT_STREAMING))
			break;

1653 1654 1655 1656 1657 1658 1659
		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;

1660 1661
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
1662 1663 1664 1665
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
1666
		rfc.txwin_size      = pi->tx_win;
1667
		rfc.max_transmit    = pi->max_tx;
1668 1669
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1670
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1671
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
1672
			rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
1673

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

1677 1678 1679 1680 1681 1682 1683 1684
		if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
			break;

		if (pi->fcs == L2CAP_FCS_NONE ||
				pi->conf_state & L2CAP_CONF_NO_FCS_RECV) {
			pi->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs);
		}
1685 1686 1687 1688 1689 1690 1691 1692
		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;
1693
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1694
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > pi->conn->mtu - 10)
1695
			rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
1696

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

1700 1701 1702 1703 1704 1705 1706 1707
		if (!(pi->conn->feat_mask & L2CAP_FEAT_FCS))
			break;

		if (pi->fcs == L2CAP_FCS_NONE ||
				pi->conf_state & L2CAP_CONF_NO_FCS_RECV) {
			pi->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, pi->fcs);
		}
1708 1709
		break;
	}
L
Linus Torvalds 已提交
1710

1711 1712
	req->dcid  = cpu_to_le16(pi->dcid);
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
1713 1714 1715 1716

	return ptr - data;
}

1717
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1718
{
1719
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
1720 1721
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
1722 1723
	void *req = chan->conf_req;
	int len = chan->conf_len;
1724 1725
	int type, hint, olen;
	unsigned long val;
1726
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1727
	u16 mtu = L2CAP_DEFAULT_MTU;
1728
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
1729

1730
	BT_DBG("chan %p", chan);
1731

1732 1733
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
1734

1735
		hint  = type & L2CAP_CONF_HINT;
1736
		type &= L2CAP_CONF_MASK;
1737 1738 1739

		switch (type) {
		case L2CAP_CONF_MTU:
1740
			mtu = val;
1741 1742 1743 1744 1745 1746 1747 1748 1749
			break;

		case L2CAP_CONF_FLUSH_TO:
			pi->flush_to = val;
			break;

		case L2CAP_CONF_QOS:
			break;

1750 1751 1752 1753 1754
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

1755 1756 1757 1758 1759 1760
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
				pi->conf_state |= L2CAP_CONF_NO_FCS_RECV;

			break;

1761 1762 1763 1764 1765 1766 1767 1768 1769 1770
		default:
			if (hint)
				break;

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

1771
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
1772 1773 1774 1775 1776
		goto done;

	switch (pi->mode) {
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1777 1778 1779 1780 1781 1782
		if (!(pi->conf_state & L2CAP_CONF_STATE2_DEVICE)) {
			pi->mode = l2cap_select_mode(rfc.mode,
					pi->conn->feat_mask);
			break;
		}

1783
		if (pi->mode != rfc.mode)
1784
			return -ECONNREFUSED;
1785

1786 1787 1788 1789 1790 1791 1792 1793
		break;
	}

done:
	if (pi->mode != rfc.mode) {
		result = L2CAP_CONF_UNACCEPT;
		rfc.mode = pi->mode;

1794
		if (chan->num_conf_rsp == 1)
1795 1796 1797 1798 1799 1800 1801
			return -ECONNREFUSED;

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


1802 1803 1804 1805
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

1806 1807 1808 1809 1810 1811 1812
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
			pi->omtu = mtu;
			pi->conf_state |= L2CAP_CONF_MTU_DONE;
		}
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->omtu);
1813

1814 1815 1816 1817 1818 1819 1820
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
			pi->fcs = L2CAP_FCS_NONE;
			pi->conf_state |= L2CAP_CONF_MODE_DONE;
			break;

		case L2CAP_MODE_ERTM:
1821 1822
			chan->remote_tx_win = rfc.txwin_size;
			chan->remote_max_tx = rfc.max_transmit;
1823 1824 1825

			if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
1826

1827
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1828

1829 1830 1831 1832
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
1833 1834

			pi->conf_state |= L2CAP_CONF_MODE_DONE;
1835 1836 1837 1838

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

1839 1840 1841
			break;

		case L2CAP_MODE_STREAMING:
1842 1843
			if (le16_to_cpu(rfc.max_pdu_size) > pi->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(pi->conn->mtu - 10);
1844

1845
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1846 1847

			pi->conf_state |= L2CAP_CONF_MODE_DONE;
1848 1849 1850 1851

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

1852 1853 1854
			break;

		default:
1855 1856
			result = L2CAP_CONF_UNACCEPT;

1857
			memset(&rfc, 0, sizeof(rfc));
1858 1859
			rfc.mode = pi->mode;
		}
1860

1861 1862 1863
		if (result == L2CAP_CONF_SUCCESS)
			pi->conf_state |= L2CAP_CONF_OUTPUT_DONE;
	}
1864 1865 1866 1867 1868
	rsp->scid   = cpu_to_le16(pi->dcid);
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
1869 1870
}

1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888
static int l2cap_parse_conf_rsp(struct sock *sk, void *rsp, int len, void *data, u16 *result)
{
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

	BT_DBG("sk %p, rsp %p, len %d, req %p", sk, rsp, len, data);

	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;
1889
				pi->imtu = L2CAP_DEFAULT_MIN_MTU;
1890
			} else
1891 1892
				pi->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, pi->imtu);
1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916
			break;

		case L2CAP_CONF_FLUSH_TO:
			pi->flush_to = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
							2, pi->flush_to);
			break;

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

			if ((pi->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
							rfc.mode != pi->mode)
				return -ECONNREFUSED;

			pi->fcs = 0;

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

1917 1918 1919 1920 1921
	if (pi->mode == L2CAP_MODE_BASIC && pi->mode != rfc.mode)
		return -ECONNREFUSED;

	pi->mode = rfc.mode;

1922 1923 1924
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
1925 1926
			pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
			pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
1927
			pi->mps    = le16_to_cpu(rfc.max_pdu_size);
1928 1929
			break;
		case L2CAP_MODE_STREAMING:
1930
			pi->mps    = le16_to_cpu(rfc.max_pdu_size);
1931 1932 1933 1934 1935 1936 1937 1938 1939
		}
	}

	req->dcid   = cpu_to_le16(pi->dcid);
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

1940
static int l2cap_build_conf_rsp(struct sock *sk, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
1941 1942 1943 1944
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

1945
	BT_DBG("sk %p", sk);
L
Linus Torvalds 已提交
1946

1947
	rsp->scid   = cpu_to_le16(l2cap_pi(sk)->dcid);
1948
	rsp->result = cpu_to_le16(result);
1949
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
1950 1951 1952 1953

	return ptr - data;
}

1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978
void __l2cap_connect_rsp_defer(struct sock *sk)
{
	struct l2cap_conn_rsp rsp;
	struct l2cap_conn *conn = l2cap_pi(sk)->conn;
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
	u8 buf[128];

	sk->sk_state = BT_CONFIG;

	rsp.scid   = cpu_to_le16(l2cap_pi(sk)->dcid);
	rsp.dcid   = cpu_to_le16(l2cap_pi(sk)->scid);
	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);

	if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)
		return;

	l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004
static void l2cap_conf_rfc_get(struct sock *sk, void *rsp, int len)
{
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

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

	if ((pi->mode != L2CAP_MODE_ERTM) && (pi->mode != L2CAP_MODE_STREAMING))
		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:
2005 2006
		pi->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
		pi->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
2007 2008 2009 2010 2011 2012 2013
		pi->mps    = le16_to_cpu(rfc.max_pdu_size);
		break;
	case L2CAP_MODE_STREAMING:
		pi->mps    = le16_to_cpu(rfc.max_pdu_size);
	}
}

2014 2015 2016 2017 2018 2019 2020 2021 2022 2023
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);
2024 2025

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2026
		conn->info_ident = 0;
2027

2028 2029 2030 2031 2032 2033
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2034 2035 2036 2037
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;
2038
	struct l2cap_chan *chan = NULL;
2039
	struct sock *parent, *sk = NULL;
2040
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2041 2042

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2043
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2044 2045 2046 2047 2048 2049 2050 2051 2052 2053

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

2054 2055
	bh_lock_sock(parent);

2056 2057 2058
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2059
		conn->disc_reason = 0x05;
2060 2061 2062 2063
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2064 2065 2066 2067
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2068
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2069 2070 2071
		goto response;
	}

2072
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
L
Linus Torvalds 已提交
2073 2074 2075
	if (!sk)
		goto response;

2076 2077 2078 2079 2080 2081
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		l2cap_sock_kill(sk);
		goto response;
	}

2082
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2083 2084

	/* Check if we already have channel with that dcid */
2085 2086
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099
		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);
	l2cap_pi(sk)->psm  = psm;
	l2cap_pi(sk)->dcid = scid;

2100 2101
	bt_accept_enqueue(parent, sk);

2102 2103 2104 2105
	__l2cap_chan_add(conn, chan);

	l2cap_pi(sk)->chan = chan;

L
Linus Torvalds 已提交
2106 2107 2108 2109
	dcid = l2cap_pi(sk)->scid;

	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

2110
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2111

2112
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2113
		if (l2cap_check_security(sk)) {
2114 2115 2116 2117 2118 2119 2120 2121 2122 2123
			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;
			}
2124 2125 2126 2127 2128 2129 2130 2131 2132
		} 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 已提交
2133 2134
	}

2135
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2136 2137 2138 2139 2140

response:
	bh_unlock_sock(parent);

sendresp:
2141 2142 2143 2144
	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 已提交
2145
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160

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

2161
	if (chan && !(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT) &&
2162 2163 2164 2165
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
		l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2166 2167
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2168 2169
	}

L
Linus Torvalds 已提交
2170 2171 2172 2173 2174 2175 2176
	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;
2177
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188
	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) {
2189
		chan = l2cap_get_chan_by_scid(conn, scid);
2190
		if (!chan)
2191
			return -EFAULT;
L
Linus Torvalds 已提交
2192
	} else {
2193
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2194
		if (!chan)
2195
			return -EFAULT;
L
Linus Torvalds 已提交
2196 2197
	}

2198 2199
	sk = chan->sk;

L
Linus Torvalds 已提交
2200 2201 2202
	switch (result) {
	case L2CAP_CR_SUCCESS:
		sk->sk_state = BT_CONFIG;
2203
		chan->ident = 0;
L
Linus Torvalds 已提交
2204
		l2cap_pi(sk)->dcid = dcid;
2205 2206
		l2cap_pi(sk)->conf_state &= ~L2CAP_CONF_CONNECT_PEND;

2207 2208 2209 2210 2211
		if (l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)
			break;

		l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;

L
Linus Torvalds 已提交
2212
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2213 2214
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2215 2216 2217
		break;

	case L2CAP_CR_PEND:
2218
		l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
2219 2220 2221
		break;

	default:
2222 2223 2224 2225 2226 2227 2228 2229
		/* 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;
		}

2230
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2231 2232 2233 2234 2235 2236 2237
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248
static inline void set_default_fcs(struct l2cap_pinfo *pi)
{
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
	if (pi->mode != L2CAP_MODE_ERTM && pi->mode != L2CAP_MODE_STREAMING)
		pi->fcs = L2CAP_FCS_NONE;
	else if (!(pi->conf_state & L2CAP_CONF_NO_FCS_RECV))
		pi->fcs = L2CAP_FCS_CRC16;
}

2249
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2250 2251 2252 2253
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2254
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2255
	struct sock *sk;
2256
	int len;
L
Linus Torvalds 已提交
2257 2258 2259 2260 2261 2262

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

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

2263
	chan = l2cap_get_chan_by_scid(conn, dcid);
2264
	if (!chan)
L
Linus Torvalds 已提交
2265 2266
		return -ENOENT;

2267 2268
	sk = chan->sk;

2269 2270 2271 2272 2273 2274
	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);
2275
		goto unlock;
2276
	}
2277

2278
	/* Reject if config buffer is too small. */
2279
	len = cmd_len - sizeof(*req);
2280
	if (chan->conf_len + len > sizeof(chan->conf_req)) {
2281 2282 2283 2284 2285 2286 2287
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
				l2cap_build_conf_rsp(sk, rsp,
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2288 2289
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2290 2291 2292 2293

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2294 2295
				l2cap_build_conf_rsp(sk, rsp,
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2296 2297 2298 2299
		goto unlock;
	}

	/* Complete config. */
2300
	len = l2cap_parse_conf_req(chan, rsp);
2301
	if (len < 0) {
2302
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2303
		goto unlock;
2304
	}
L
Linus Torvalds 已提交
2305

2306
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2307
	chan->num_conf_rsp++;
2308 2309

	/* Reset config buffer. */
2310
	chan->conf_len = 0;
2311

2312 2313 2314
	if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE))
		goto unlock;

L
Linus Torvalds 已提交
2315
	if (l2cap_pi(sk)->conf_state & L2CAP_CONF_INPUT_DONE) {
2316
		set_default_fcs(l2cap_pi(sk));
2317

L
Linus Torvalds 已提交
2318
		sk->sk_state = BT_CONNECTED;
2319

2320 2321
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2322
		__skb_queue_head_init(TX_QUEUE(sk));
2323
		if (l2cap_pi(sk)->mode == L2CAP_MODE_ERTM)
2324
			l2cap_ertm_init(chan);
2325

L
Linus Torvalds 已提交
2326
		l2cap_chan_ready(sk);
2327 2328 2329 2330
		goto unlock;
	}

	if (!(l2cap_pi(sk)->conf_state & L2CAP_CONF_REQ_SENT)) {
2331
		u8 buf[64];
2332
		l2cap_pi(sk)->conf_state |= L2CAP_CONF_REQ_SENT;
L
Linus Torvalds 已提交
2333
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2334 2335
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346
	}

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;
2347
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2348
	struct sock *sk;
2349
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2350 2351 2352 2353 2354

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

2355 2356
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2357

2358
	chan = l2cap_get_chan_by_scid(conn, scid);
2359
	if (!chan)
L
Linus Torvalds 已提交
2360 2361
		return 0;

2362 2363
	sk = chan->sk;

L
Linus Torvalds 已提交
2364 2365
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2366
		l2cap_conf_rfc_get(sk, rsp->data, len);
L
Linus Torvalds 已提交
2367 2368 2369
		break;

	case L2CAP_CONF_UNACCEPT:
2370
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2371 2372
			char req[64];

2373
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2374
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2375 2376 2377
				goto done;
			}

2378 2379 2380 2381 2382
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
			len = l2cap_parse_conf_rsp(sk, rsp->data,
							len, req, &result);
			if (len < 0) {
2383
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2384 2385 2386 2387 2388
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2389
			chan->num_conf_req++;
2390 2391 2392
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2393 2394
		}

2395
	default:
2396
		sk->sk_err = ECONNRESET;
L
Linus Torvalds 已提交
2397
		l2cap_sock_set_timer(sk, HZ * 5);
2398
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2399 2400 2401 2402 2403 2404 2405 2406 2407
		goto done;
	}

	if (flags & 0x01)
		goto done;

	l2cap_pi(sk)->conf_state |= L2CAP_CONF_INPUT_DONE;

	if (l2cap_pi(sk)->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2408
		set_default_fcs(l2cap_pi(sk));
2409

L
Linus Torvalds 已提交
2410
		sk->sk_state = BT_CONNECTED;
2411 2412
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2413
		__skb_queue_head_init(TX_QUEUE(sk));
2414
		if (l2cap_pi(sk)->mode ==  L2CAP_MODE_ERTM)
2415
			l2cap_ertm_init(chan);
2416

L
Linus Torvalds 已提交
2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429
		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;
2430
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2431 2432 2433 2434 2435 2436 2437
	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);

2438
	chan = l2cap_get_chan_by_scid(conn, dcid);
2439
	if (!chan)
L
Linus Torvalds 已提交
2440 2441
		return 0;

2442 2443
	sk = chan->sk;

2444 2445
	rsp.dcid = cpu_to_le16(l2cap_pi(sk)->scid);
	rsp.scid = cpu_to_le16(l2cap_pi(sk)->dcid);
L
Linus Torvalds 已提交
2446 2447 2448 2449
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2450 2451 2452 2453 2454 2455 2456 2457 2458
	/* 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;
	}

2459
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2460 2461 2462 2463 2464 2465 2466 2467 2468 2469
	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;
2470
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2471 2472 2473 2474 2475 2476 2477
	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);

2478
	chan = l2cap_get_chan_by_scid(conn, scid);
2479
	if (!chan)
L
Linus Torvalds 已提交
2480 2481
		return 0;

2482 2483
	sk = chan->sk;

2484 2485 2486 2487 2488 2489 2490 2491 2492
	/* 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;
	}

2493
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508
	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);

2509 2510
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2511
		u32 feat_mask = l2cap_feat_mask;
2512 2513 2514
		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);
2515
		if (!disable_ertm)
2516 2517
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2518
		put_unaligned_le32(feat_mask, rsp->data);
2519 2520
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2521 2522 2523 2524 2525 2526 2527 2528
	} 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);
2529 2530 2531 2532 2533 2534 2535
	} 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 已提交
2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549

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

2550 2551 2552 2553 2554
	/* 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;

2555 2556
	del_timer(&conn->info_timer);

2557 2558 2559 2560 2561 2562 2563 2564 2565
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2566
	if (type == L2CAP_IT_FEAT_MASK) {
2567
		conn->feat_mask = get_unaligned_le32(rsp->data);
2568

2569
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583
			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) {
2584
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2585
		conn->info_ident = 0;
2586 2587 2588

		l2cap_conn_start(conn);
	}
2589

L
Linus Torvalds 已提交
2590 2591 2592
	return 0;
}

2593
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620
							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;
2621
	int err;
2622 2623 2624 2625 2626 2627 2628 2629 2630

	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;
2631 2632
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
2633 2634 2635 2636 2637 2638 2639
	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));
2640 2641 2642

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
2643 2644 2645 2646 2647 2648 2649
		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);

2650 2651 2652
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

2653 2654 2655
	return 0;
}

2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 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
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:
2722
		return l2cap_conn_param_update_req(conn, cmd, data);
2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734

	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 已提交
2735 2736 2737 2738
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
2739
	int err;
L
Linus Torvalds 已提交
2740 2741 2742 2743

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
2744
		u16 cmd_len;
L
Linus Torvalds 已提交
2745 2746 2747 2748
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

2749
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
2750

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

2753
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
2754 2755 2756 2757
			BT_DBG("corrupted command");
			break;
		}

2758 2759 2760 2761
		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 已提交
2762 2763 2764

		if (err) {
			struct l2cap_cmd_rej rej;
2765 2766

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

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

2773 2774
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
2775 2776 2777 2778 2779
	}

	kfree_skb(skb);
}

2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790
static int l2cap_check_fcs(struct l2cap_pinfo *pi,  struct sk_buff *skb)
{
	u16 our_fcs, rcv_fcs;
	int hdr_size = L2CAP_HDR_SIZE + 2;

	if (pi->fcs == L2CAP_FCS_CRC16) {
		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)
2791
			return -EBADMSG;
2792 2793 2794 2795
	}
	return 0;
}

2796
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
2797 2798 2799
{
	u16 control = 0;

2800
	chan->frames_sent = 0;
2801

2802
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2803

2804
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
2805
		control |= L2CAP_SUPER_RCV_NOT_READY;
2806 2807
		l2cap_send_sframe(chan, control);
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
2808 2809
	}

2810 2811
	if (chan->conn_state & L2CAP_CONN_REMOTE_BUSY)
		l2cap_retransmit_frames(chan);
2812

2813
	l2cap_ertm_send(chan);
2814

2815
	if (!(chan->conn_state & L2CAP_CONN_LOCAL_BUSY) &&
2816
			chan->frames_sent == 0) {
2817
		control |= L2CAP_SUPER_RCV_READY;
2818
		l2cap_send_sframe(chan, control);
2819 2820 2821
	}
}

2822
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
2823 2824
{
	struct sk_buff *next_skb;
2825
	int tx_seq_offset, next_tx_seq_offset;
2826 2827 2828 2829

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

2830
	next_skb = skb_peek(&chan->srej_q);
2831
	if (!next_skb) {
2832
		__skb_queue_tail(&chan->srej_q, skb);
2833
		return 0;
2834 2835
	}

2836
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
2837 2838 2839
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

2840
	do {
2841 2842 2843
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

2844
		next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
2845
						chan->buffer_seq) % 64;
2846 2847 2848 2849
		if (next_tx_seq_offset < 0)
			next_tx_seq_offset += 64;

		if (next_tx_seq_offset > tx_seq_offset) {
2850
			__skb_queue_before(&chan->srej_q, next_skb, skb);
2851
			return 0;
2852 2853
		}

2854
		if (skb_queue_is_last(&chan->srej_q, next_skb))
2855 2856
			break;

2857
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
2858

2859
	__skb_queue_tail(&chan->srej_q, skb);
2860 2861

	return 0;
2862 2863
}

2864
static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
2865
{
2866
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
2867
	struct sk_buff *_skb;
2868
	int err;
2869 2870 2871

	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
2872
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2873 2874
			goto drop;

2875
		err = sock_queue_rcv_skb(chan->sk, skb);
2876 2877 2878 2879 2880 2881
		if (!err)
			return err;

		break;

	case L2CAP_SDU_START:
2882
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2883 2884
			goto drop;

2885
		chan->sdu_len = get_unaligned_le16(skb->data);
2886

2887
		if (chan->sdu_len > pi->imtu)
2888 2889
			goto disconnect;

2890 2891
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu)
2892 2893 2894 2895 2896 2897
			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);
2898

2899
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2900

2901
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
2902
		chan->partial_sdu_len = skb->len;
2903 2904 2905
		break;

	case L2CAP_SDU_CONTINUE:
2906
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
2907 2908
			goto disconnect;

2909
		if (!chan->sdu)
2910 2911
			goto disconnect;

2912 2913
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
2914 2915
			goto drop;

2916
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2917

2918 2919 2920
		break;

	case L2CAP_SDU_END:
2921
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
2922 2923
			goto disconnect;

2924
		if (!chan->sdu)
2925 2926
			goto disconnect;

2927
		if (!(chan->conn_state & L2CAP_CONN_SAR_RETRY)) {
2928
			chan->partial_sdu_len += skb->len;
2929

2930
			if (chan->partial_sdu_len > pi->imtu)
2931
				goto drop;
2932

2933
			if (chan->partial_sdu_len != chan->sdu_len)
2934
				goto drop;
2935

2936
			memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2937
		}
2938

2939
		_skb = skb_clone(chan->sdu, GFP_ATOMIC);
2940
		if (!_skb) {
2941
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2942 2943 2944
			return -ENOMEM;
		}

2945
		err = sock_queue_rcv_skb(chan->sk, _skb);
2946
		if (err < 0) {
2947
			kfree_skb(_skb);
2948
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2949 2950 2951
			return err;
		}

2952 2953
		chan->conn_state &= ~L2CAP_CONN_SAR_RETRY;
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
2954

2955
		kfree_skb(chan->sdu);
2956 2957 2958 2959
		break;
	}

	kfree_skb(skb);
2960
	return 0;
2961 2962

drop:
2963 2964
	kfree_skb(chan->sdu);
	chan->sdu = NULL;
2965 2966

disconnect:
2967
	l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
2968 2969 2970 2971
	kfree_skb(skb);
	return 0;
}

2972
static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
2973 2974 2975 2976 2977
{
	struct sk_buff *skb;
	u16 control;
	int err;

2978
	while ((skb = skb_dequeue(&chan->busy_q))) {
2979
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
2980
		err = l2cap_ertm_reassembly_sdu(chan, skb, control);
2981
		if (err < 0) {
2982
			skb_queue_head(&chan->busy_q, skb);
2983 2984 2985
			return -EBUSY;
		}

2986
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
2987 2988
	}

2989
	if (!(chan->conn_state & L2CAP_CONN_RNR_SENT))
2990 2991
		goto done;

2992
	control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2993
	control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
2994
	l2cap_send_sframe(chan, control);
2995
	chan->retry_count = 1;
2996

2997
	del_timer(&chan->retrans_timer);
2998 2999
	__mod_monitor_timer();

3000
	chan->conn_state |= L2CAP_CONN_WAIT_F;
3001 3002

done:
3003 3004
	chan->conn_state &= ~L2CAP_CONN_LOCAL_BUSY;
	chan->conn_state &= ~L2CAP_CONN_RNR_SENT;
3005

3006
	BT_DBG("chan %p, Exit local busy", chan);
3007 3008 3009 3010

	return 0;
}

3011 3012 3013
static void l2cap_busy_work(struct work_struct *work)
{
	DECLARE_WAITQUEUE(wait, current);
3014 3015 3016
	struct l2cap_chan *chan =
		container_of(work, struct l2cap_chan, busy_work);
	struct sock *sk = chan->sk;
3017 3018 3019 3020 3021
	int n_tries = 0, timeo = HZ/5, err;
	struct sk_buff *skb;

	lock_sock(sk);

3022
	add_wait_queue(sk_sleep(sk), &wait);
3023
	while ((skb = skb_peek(&chan->busy_q))) {
3024 3025 3026 3027
		set_current_state(TASK_INTERRUPTIBLE);

		if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
			err = -EBUSY;
3028
			l2cap_send_disconn_req(l2cap_pi(sk)->conn, chan, EBUSY);
3029
			break;
3030 3031 3032 3033 3034 3035 3036
		}

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
3037
			break;
3038 3039 3040 3041 3042 3043 3044 3045
		}

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

		err = sock_error(sk);
		if (err)
3046
			break;
3047

3048
		if (l2cap_try_push_rx_skb(chan) == 0)
3049 3050 3051 3052
			break;
	}

	set_current_state(TASK_RUNNING);
3053
	remove_wait_queue(sk_sleep(sk), &wait);
3054 3055 3056 3057

	release_sock(sk);
}

3058
static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3059 3060 3061
{
	int sctrl, err;

3062
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3063
		bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3064
		__skb_queue_tail(&chan->busy_q, skb);
3065
		return l2cap_try_push_rx_skb(chan);
3066 3067


3068 3069
	}

3070
	err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3071
	if (err >= 0) {
3072
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3073 3074 3075 3076
		return err;
	}

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

3079
	chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3080
	bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3081
	__skb_queue_tail(&chan->busy_q, skb);
3082

3083
	sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3084
	sctrl |= L2CAP_SUPER_RCV_NOT_READY;
3085
	l2cap_send_sframe(chan, sctrl);
3086

3087
	chan->conn_state |= L2CAP_CONN_RNR_SENT;
3088

3089
	del_timer(&chan->ack_timer);
3090

3091
	queue_work(_busy_wq, &chan->busy_work);
3092 3093 3094 3095

	return err;
}

3096
static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3097
{
3098
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
3099 3100 3101
	struct sk_buff *_skb;
	int err = -EINVAL;

3102 3103 3104 3105 3106
	/*
	 * TODO: We have to notify the userland if some data is lost with the
	 * Streaming Mode.
	 */

3107 3108
	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3109
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3110
			kfree_skb(chan->sdu);
3111 3112 3113
			break;
		}

3114
		err = sock_queue_rcv_skb(chan->sk, skb);
3115 3116 3117 3118 3119 3120
		if (!err)
			return 0;

		break;

	case L2CAP_SDU_START:
3121
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3122
			kfree_skb(chan->sdu);
3123 3124 3125
			break;
		}

3126
		chan->sdu_len = get_unaligned_le16(skb->data);
3127 3128
		skb_pull(skb, 2);

3129
		if (chan->sdu_len > pi->imtu) {
3130 3131 3132 3133
			err = -EMSGSIZE;
			break;
		}

3134 3135
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu) {
3136 3137 3138 3139
			err = -ENOMEM;
			break;
		}

3140
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3141

3142
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3143
		chan->partial_sdu_len = skb->len;
3144 3145 3146 3147
		err = 0;
		break;

	case L2CAP_SDU_CONTINUE:
3148
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3149 3150
			break;

3151
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3152

3153 3154 3155
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
			kfree_skb(chan->sdu);
3156 3157 3158 3159 3160 3161
		else
			err = 0;

		break;

	case L2CAP_SDU_END:
3162
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3163 3164
			break;

3165
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3166

3167
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3168
		chan->partial_sdu_len += skb->len;
3169

3170
		if (chan->partial_sdu_len > pi->imtu)
3171 3172
			goto drop;

3173 3174
		if (chan->partial_sdu_len == chan->sdu_len) {
			_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3175
			err = sock_queue_rcv_skb(chan->sk, _skb);
3176 3177 3178 3179 3180
			if (err < 0)
				kfree_skb(_skb);
		}
		err = 0;

3181
drop:
3182
		kfree_skb(chan->sdu);
3183 3184 3185 3186 3187 3188 3189
		break;
	}

	kfree_skb(skb);
	return err;
}

3190
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3191 3192
{
	struct sk_buff *skb;
3193
	u16 control;
3194

3195
	while ((skb = skb_peek(&chan->srej_q))) {
3196 3197 3198
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3199
		skb = skb_dequeue(&chan->srej_q);
3200
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3201
		l2cap_ertm_reassembly_sdu(chan, skb, control);
3202 3203
		chan->buffer_seq_srej =
			(chan->buffer_seq_srej + 1) % 64;
3204
		tx_seq = (tx_seq + 1) % 64;
3205 3206 3207
	}
}

3208
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3209 3210 3211 3212
{
	struct srej_list *l, *tmp;
	u16 control;

3213
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3214 3215 3216 3217 3218 3219 3220
		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;
3221
		l2cap_send_sframe(chan, control);
3222
		list_del(&l->list);
3223
		list_add_tail(&l->list, &chan->srej_l);
3224 3225 3226
	}
}

3227
static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3228 3229 3230 3231
{
	struct srej_list *new;
	u16 control;

3232
	while (tx_seq != chan->expected_tx_seq) {
3233
		control = L2CAP_SUPER_SELECT_REJECT;
3234
		control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3235
		l2cap_send_sframe(chan, control);
3236 3237

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3238 3239
		new->tx_seq = chan->expected_tx_seq;
		chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3240
		list_add_tail(&new->list, &chan->srej_l);
3241
	}
3242
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3243 3244
}

3245
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3246
{
3247
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
3248
	u8 tx_seq = __get_txseq(rx_control);
3249
	u8 req_seq = __get_reqseq(rx_control);
3250
	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3251
	int tx_seq_offset, expected_tx_seq_offset;
3252
	int num_to_ack = (pi->tx_win/6) + 1;
3253 3254
	int err = 0;

3255 3256
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
							tx_seq, rx_control);
3257

3258
	if (L2CAP_CTRL_FINAL & rx_control &&
3259
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3260
		del_timer(&chan->monitor_timer);
3261
		if (chan->unacked_frames > 0)
3262
			__mod_retrans_timer();
3263
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3264 3265
	}

3266 3267
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3268

3269
	if (tx_seq == chan->expected_tx_seq)
3270
		goto expected;
3271

3272
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3273 3274 3275 3276 3277
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

	/* invalid tx_seq */
	if (tx_seq_offset >= pi->tx_win) {
3278
		l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
3279 3280 3281
		goto drop;
	}

3282
	if (chan->conn_state == L2CAP_CONN_LOCAL_BUSY)
3283 3284
		goto drop;

3285
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3286
		struct srej_list *first;
3287

3288
		first = list_first_entry(&chan->srej_l,
3289 3290
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3291
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3292
			l2cap_check_srej_gap(chan, tx_seq);
3293 3294 3295 3296

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

3297
			if (list_empty(&chan->srej_l)) {
3298
				chan->buffer_seq = chan->buffer_seq_srej;
3299 3300
				chan->conn_state &= ~L2CAP_CONN_SREJ_SENT;
				l2cap_send_ack(chan);
3301
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3302 3303 3304
			}
		} else {
			struct srej_list *l;
3305 3306

			/* duplicated tx_seq */
3307
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3308
				goto drop;
3309

3310
			list_for_each_entry(l, &chan->srej_l, list) {
3311
				if (l->tx_seq == tx_seq) {
3312
					l2cap_resend_srejframe(chan, tx_seq);
3313 3314 3315
					return 0;
				}
			}
3316
			l2cap_send_srejframe(chan, tx_seq);
3317 3318
		}
	} else {
3319
		expected_tx_seq_offset =
3320
			(chan->expected_tx_seq - chan->buffer_seq) % 64;
3321 3322 3323 3324 3325 3326 3327
		if (expected_tx_seq_offset < 0)
			expected_tx_seq_offset += 64;

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

3328
		chan->conn_state |= L2CAP_CONN_SREJ_SENT;
3329

3330
		BT_DBG("chan %p, Enter SREJ", chan);
3331

3332
		INIT_LIST_HEAD(&chan->srej_l);
3333
		chan->buffer_seq_srej = chan->buffer_seq;
3334

3335 3336
		__skb_queue_head_init(&chan->srej_q);
		__skb_queue_head_init(&chan->busy_q);
3337
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3338

3339
		chan->conn_state |= L2CAP_CONN_SEND_PBIT;
3340

3341
		l2cap_send_srejframe(chan, tx_seq);
3342

3343
		del_timer(&chan->ack_timer);
3344
	}
3345 3346
	return 0;

3347
expected:
3348
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3349

3350
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3351 3352
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3353
		__skb_queue_tail(&chan->srej_q, skb);
3354 3355 3356
		return 0;
	}

3357
	err = l2cap_push_rx_skb(chan, skb, rx_control);
3358 3359 3360
	if (err < 0)
		return 0;

3361
	if (rx_control & L2CAP_CTRL_FINAL) {
3362 3363
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3364
		else
3365
			l2cap_retransmit_frames(chan);
3366 3367
	}

3368 3369
	__mod_ack_timer();

3370 3371
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3372
		l2cap_send_ack(chan);
3373

3374
	return 0;
3375 3376 3377 3378

drop:
	kfree_skb(skb);
	return 0;
3379 3380
}

3381
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3382
{
3383
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3384 3385
						rx_control);

3386 3387
	chan->expected_ack_seq = __get_reqseq(rx_control);
	l2cap_drop_acked_frames(chan);
3388

3389
	if (rx_control & L2CAP_CTRL_POLL) {
3390 3391 3392
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
			if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3393
					(chan->unacked_frames > 0))
3394 3395
				__mod_retrans_timer();

3396 3397
			chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
			l2cap_send_srejtail(chan);
3398
		} else {
3399
			l2cap_send_i_or_rr_or_rnr(chan);
3400
		}
3401

3402
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3403
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3404

3405 3406
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3407
		else
3408
			l2cap_retransmit_frames(chan);
3409

3410
	} else {
3411
		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3412
				(chan->unacked_frames > 0))
3413
			__mod_retrans_timer();
3414

3415 3416 3417
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT)
			l2cap_send_ack(chan);
3418
		else
3419
			l2cap_ertm_send(chan);
3420 3421
	}
}
3422

3423
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3424 3425
{
	u8 tx_seq = __get_reqseq(rx_control);
3426

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

3429
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3430

3431 3432
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3433 3434

	if (rx_control & L2CAP_CTRL_FINAL) {
3435 3436
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3437
		else
3438
			l2cap_retransmit_frames(chan);
3439
	} else {
3440
		l2cap_retransmit_frames(chan);
3441

3442 3443
		if (chan->conn_state & L2CAP_CONN_WAIT_F)
			chan->conn_state |= L2CAP_CONN_REJ_ACT;
3444 3445
	}
}
3446
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3447 3448
{
	u8 tx_seq = __get_reqseq(rx_control);
3449

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

3452
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3453

3454
	if (rx_control & L2CAP_CTRL_POLL) {
3455 3456
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3457

3458 3459
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		l2cap_retransmit_one_frame(chan, tx_seq);
3460

3461
		l2cap_ertm_send(chan);
3462

3463
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3464
			chan->srej_save_reqseq = tx_seq;
3465
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3466
		}
3467
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3468
		if ((chan->conn_state & L2CAP_CONN_SREJ_ACT) &&
3469
				chan->srej_save_reqseq == tx_seq)
3470
			chan->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3471
		else
3472
			l2cap_retransmit_one_frame(chan, tx_seq);
3473
	} else {
3474 3475
		l2cap_retransmit_one_frame(chan, tx_seq);
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3476
			chan->srej_save_reqseq = tx_seq;
3477
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3478
		}
3479 3480 3481
	}
}

3482
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3483 3484 3485
{
	u8 tx_seq = __get_reqseq(rx_control);

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

3488
	chan->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3489 3490
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3491

3492
	if (rx_control & L2CAP_CTRL_POLL)
3493
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
3494

3495
	if (!(chan->conn_state & L2CAP_CONN_SREJ_SENT)) {
3496
		del_timer(&chan->retrans_timer);
3497
		if (rx_control & L2CAP_CTRL_POLL)
3498
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3499
		return;
3500
	}
3501 3502

	if (rx_control & L2CAP_CTRL_POLL)
3503
		l2cap_send_srejtail(chan);
3504
	else
3505
		l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3506 3507
}

3508
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3509
{
3510
	BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3511

3512
	if (L2CAP_CTRL_FINAL & rx_control &&
3513
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3514
		del_timer(&chan->monitor_timer);
3515
		if (chan->unacked_frames > 0)
3516
			__mod_retrans_timer();
3517
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3518 3519 3520 3521
	}

	switch (rx_control & L2CAP_CTRL_SUPERVISE) {
	case L2CAP_SUPER_RCV_READY:
3522
		l2cap_data_channel_rrframe(chan, rx_control);
3523 3524
		break;

3525
	case L2CAP_SUPER_REJECT:
3526
		l2cap_data_channel_rejframe(chan, rx_control);
3527
		break;
3528

3529
	case L2CAP_SUPER_SELECT_REJECT:
3530
		l2cap_data_channel_srejframe(chan, rx_control);
3531 3532 3533
		break;

	case L2CAP_SUPER_RCV_NOT_READY:
3534
		l2cap_data_channel_rnrframe(chan, rx_control);
3535 3536 3537
		break;
	}

3538
	kfree_skb(skb);
3539 3540 3541
	return 0;
}

3542 3543
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3544
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	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.
	 */
	if (l2cap_check_fcs(pi, skb))
		goto drop;

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

	if (pi->fcs == L2CAP_FCS_CRC16)
		len -= 2;

	if (len > pi->mps) {
3569
		l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
3570 3571 3572 3573
		goto drop;
	}

	req_seq = __get_reqseq(control);
3574
	req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3575 3576 3577 3578
	if (req_seq_offset < 0)
		req_seq_offset += 64;

	next_tx_seq_offset =
3579
		(chan->next_tx_seq - chan->expected_ack_seq) % 64;
3580 3581 3582 3583 3584
	if (next_tx_seq_offset < 0)
		next_tx_seq_offset += 64;

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3585
		l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
3586 3587 3588 3589 3590
		goto drop;
	}

	if (__is_iframe(control)) {
		if (len < 0) {
3591
			l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
3592 3593 3594
			goto drop;
		}

3595
		l2cap_data_channel_iframe(chan, control, skb);
3596 3597 3598
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3599
			l2cap_send_disconn_req(pi->conn, chan, ECONNRESET);
3600 3601 3602
			goto drop;
		}

3603
		l2cap_data_channel_sframe(chan, control, skb);
3604 3605 3606 3607 3608 3609 3610 3611 3612
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3613 3614
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3615
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3616
	struct sock *sk;
3617
	struct l2cap_pinfo *pi;
3618
	u16 control;
3619 3620
	u8 tx_seq;
	int len;
L
Linus Torvalds 已提交
3621

3622
	chan = l2cap_get_chan_by_scid(conn, cid);
3623
	if (!chan) {
L
Linus Torvalds 已提交
3624 3625 3626 3627
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3628
	sk = chan->sk;
3629 3630
	pi = l2cap_pi(sk);

3631
	BT_DBG("chan %p, len %d", chan, skb->len);
L
Linus Torvalds 已提交
3632 3633 3634 3635

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

3636
	switch (pi->mode) {
3637 3638 3639 3640 3641
	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 已提交
3642

3643
		if (pi->imtu < skb->len)
3644
			goto drop;
L
Linus Torvalds 已提交
3645

3646 3647 3648 3649 3650
		if (!sock_queue_rcv_skb(sk, skb))
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3651 3652
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3653
		} else {
3654
			if (sk_add_backlog(sk, skb))
3655 3656
				goto drop;
		}
3657

3658
		goto done;
3659

3660 3661 3662 3663 3664
	case L2CAP_MODE_STREAMING:
		control = get_unaligned_le16(skb->data);
		skb_pull(skb, 2);
		len = skb->len;

3665 3666 3667
		if (l2cap_check_fcs(pi, skb))
			goto drop;

3668 3669 3670
		if (__is_sar_start(control))
			len -= 2;

3671 3672 3673
		if (pi->fcs == L2CAP_FCS_CRC16)
			len -= 2;

3674
		if (len > pi->mps || len < 0 || __is_sframe(control))
3675 3676 3677 3678
			goto drop;

		tx_seq = __get_txseq(control);

3679 3680
		if (chan->expected_tx_seq == tx_seq)
			chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3681
		else
3682
			chan->expected_tx_seq = (tx_seq + 1) % 64;
3683

3684
		l2cap_streaming_reassembly_sdu(chan, skb, control);
3685 3686 3687

		goto done;

3688
	default:
3689
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, pi->mode);
3690 3691
		break;
	}
L
Linus Torvalds 已提交
3692 3693 3694 3695 3696

drop:
	kfree_skb(skb);

done:
3697 3698 3699
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3700 3701 3702
	return 0;
}

3703
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3704 3705 3706 3707 3708 3709 3710
{
	struct sock *sk;

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

3711 3712
	bh_lock_sock(sk);

L
Linus Torvalds 已提交
3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727
	BT_DBG("sk %p, len %d", sk, skb->len);

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

	if (l2cap_pi(sk)->imtu < skb->len)
		goto drop;

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

drop:
	kfree_skb(skb);

done:
3728 3729
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3730 3731 3732 3733 3734 3735
	return 0;
}

static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
3736 3737
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
3738 3739 3740 3741 3742

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

3743 3744 3745 3746 3747
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
3748 3749 3750
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
3751
	case L2CAP_CID_LE_SIGNALING:
3752
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
3753 3754 3755
		l2cap_sig_channel(conn, skb);
		break;

3756
	case L2CAP_CID_CONN_LESS:
3757
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

	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)
3777
		return -EINVAL;
L
Linus Torvalds 已提交
3778 3779 3780 3781 3782 3783 3784 3785 3786 3787

	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) {
		if (sk->sk_state != BT_LISTEN)
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3788 3789 3790
			lm1 |= HCI_LM_ACCEPT;
			if (l2cap_pi(sk)->role_switch)
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
3791
			exact++;
3792 3793 3794 3795 3796
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
			if (l2cap_pi(sk)->role_switch)
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
3797 3798 3799 3800 3801 3802 3803 3804
	}
	read_unlock(&l2cap_sk_list.lock);

	return exact ? lm1 : lm2;
}

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

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

3809
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3810
		return -EINVAL;
L
Linus Torvalds 已提交
3811 3812 3813 3814 3815

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
3816
	} else
L
Linus Torvalds 已提交
3817 3818 3819 3820 3821
		l2cap_conn_del(hcon, bt_err(status));

	return 0;
}

3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834
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 已提交
3835 3836 3837
{
	BT_DBG("hcon %p reason %d", hcon, reason);

3838
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3839
		return -EINVAL;
L
Linus Torvalds 已提交
3840 3841

	l2cap_conn_del(hcon, bt_err(reason));
3842

L
Linus Torvalds 已提交
3843 3844 3845
	return 0;
}

3846 3847
static inline void l2cap_check_encryption(struct sock *sk, u8 encrypt)
{
3848
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM)
3849 3850
		return;

3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862
	if (encrypt == 0x00) {
		if (l2cap_pi(sk)->sec_level == BT_SECURITY_MEDIUM) {
			l2cap_sock_clear_timer(sk);
			l2cap_sock_set_timer(sk, HZ * 5);
		} else if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
			__l2cap_sock_close(sk, ECONNREFUSED);
	} else {
		if (l2cap_pi(sk)->sec_level == BT_SECURITY_MEDIUM)
			l2cap_sock_clear_timer(sk);
	}
}

3863
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
3864
{
3865
	struct l2cap_conn *conn = hcon->l2cap_data;
3866
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3867

3868
	if (!conn)
L
Linus Torvalds 已提交
3869
		return 0;
3870

L
Linus Torvalds 已提交
3871 3872
	BT_DBG("conn %p", conn);

3873
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
3874

3875
	list_for_each_entry(chan, &conn->chan_l, list) {
3876
		struct sock *sk = chan->sk;
3877

L
Linus Torvalds 已提交
3878 3879
		bh_lock_sock(sk);

3880 3881 3882 3883 3884
		if (l2cap_pi(sk)->conf_state & L2CAP_CONF_CONNECT_PEND) {
			bh_unlock_sock(sk);
			continue;
		}

3885
		if (!status && (sk->sk_state == BT_CONNECTED ||
3886
						sk->sk_state == BT_CONFIG)) {
3887
			l2cap_check_encryption(sk, encrypt);
3888 3889 3890 3891
			bh_unlock_sock(sk);
			continue;
		}

3892 3893 3894 3895 3896
		if (sk->sk_state == BT_CONNECT) {
			if (!status) {
				struct l2cap_conn_req req;
				req.scid = cpu_to_le16(l2cap_pi(sk)->scid);
				req.psm  = l2cap_pi(sk)->psm;
L
Linus Torvalds 已提交
3897

3898
				chan->ident = l2cap_get_ident(conn);
3899
				l2cap_pi(sk)->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
3900

3901
				l2cap_send_cmd(conn, chan->ident,
3902 3903 3904 3905 3906 3907 3908 3909
					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 已提交
3910

3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922
			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;
			}

			rsp.scid   = cpu_to_le16(l2cap_pi(sk)->dcid);
			rsp.dcid   = cpu_to_le16(l2cap_pi(sk)->scid);
			rsp.result = cpu_to_le16(result);
3923
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3924 3925
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
3926
		}
L
Linus Torvalds 已提交
3927 3928 3929 3930

		bh_unlock_sock(sk);
	}

3931
	read_unlock(&conn->chan_lock);
3932

L
Linus Torvalds 已提交
3933 3934 3935 3936 3937 3938 3939
	return 0;
}

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

3940 3941 3942 3943
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
3944 3945 3946 3947
		goto drop;

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

3948
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
3949
		struct l2cap_hdr *hdr;
3950
		struct l2cap_chan *chan;
3951
		u16 cid;
L
Linus Torvalds 已提交
3952 3953 3954 3955 3956 3957 3958 3959 3960 3961
		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);
		}

3962 3963
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
3964 3965 3966 3967 3968 3969 3970
			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;
3971
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987

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

3988
		chan = l2cap_get_chan_by_scid(conn, cid);
3989

3990 3991
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
3992

3993 3994 3995 3996 3997 3998 3999 4000
			if (l2cap_pi(sk)->imtu < len - L2CAP_HDR_SIZE) {
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
							l2cap_pi(sk)->imtu);
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4001
			bh_unlock_sock(sk);
4002
		}
4003

L
Linus Torvalds 已提交
4004
		/* Allocate skb for the complete frame (with header) */
4005 4006
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4007 4008
			goto drop;

4009
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4010
								skb->len);
L
Linus Torvalds 已提交
4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030
		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;
		}

4031
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4032
								skb->len);
L
Linus Torvalds 已提交
4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046
		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;
}

4047
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4048 4049 4050 4051 4052 4053
{
	struct sock *sk;
	struct hlist_node *node;

	read_lock_bh(&l2cap_sk_list.lock);

4054 4055
	sk_for_each(sk, node, &l2cap_sk_list.head) {
		struct l2cap_pinfo *pi = l2cap_pi(sk);
4056

4057
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4058 4059 4060 4061
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
					sk->sk_state, __le16_to_cpu(pi->psm),
					pi->scid, pi->dcid,
4062 4063
					pi->imtu, pi->omtu, pi->sec_level,
					pi->mode);
4064
	}
L
Linus Torvalds 已提交
4065 4066 4067

	read_unlock_bh(&l2cap_sk_list.lock);

4068
	return 0;
L
Linus Torvalds 已提交
4069 4070
}

4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083
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 已提交
4084 4085 4086 4087 4088 4089 4090

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,
4091
	.disconn_cfm	= l2cap_disconn_cfm,
4092
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4093 4094 4095
	.recv_acldata	= l2cap_recv_acldata
};

4096
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4097 4098
{
	int err;
4099

4100
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4101 4102 4103
	if (err < 0)
		return err;

4104
	_busy_wq = create_singlethread_workqueue("l2cap");
4105
	if (!_busy_wq) {
4106
		err = -ENOMEM;
L
Linus Torvalds 已提交
4107 4108 4109 4110 4111 4112 4113 4114 4115 4116
		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;
	}

4117 4118 4119 4120 4121 4122
	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 已提交
4123 4124 4125 4126

	return 0;

error:
4127
	destroy_workqueue(_busy_wq);
4128
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4129 4130 4131
	return err;
}

4132
void l2cap_exit(void)
L
Linus Torvalds 已提交
4133
{
4134
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4135

4136 4137 4138
	flush_workqueue(_busy_wq);
	destroy_workqueue(_busy_wq);

L
Linus Torvalds 已提交
4139 4140 4141
	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4142
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4143 4144
}

4145 4146
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");