l2cap_core.c 96.0 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 66
LIST_HEAD(chan_list);
DEFINE_RWLOCK(chan_list_lock);
L
Linus Torvalds 已提交
67

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

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

78 79
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb);

80
/* ---- L2CAP channels ---- */
81
static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn, u16 cid)
82
{
83
	struct l2cap_chan *c;
84 85

	list_for_each_entry(c, &conn->chan_l, list) {
86
		if (c->dcid == cid)
87
			return c;
88
	}
89 90
	return NULL;

91 92
}

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

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

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

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

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

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

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

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

141
static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
142
{
143
	struct l2cap_chan *c;
144

145 146
	list_for_each_entry(c, &chan_list, global_l) {
		if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
147 148 149
			goto found;
	}

150
	c = NULL;
151
found:
152
	return c;
153 154 155 156
}

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

159
	write_lock_bh(&chan_list_lock);
160

161
	if (psm && __l2cap_global_chan_by_addr(psm, src)) {
162 163
		err = -EADDRINUSE;
		goto done;
164 165
	}

166 167 168 169 170 171 172 173 174
	if (psm) {
		chan->psm = psm;
		chan->sport = psm;
		err = 0;
	} else {
		u16 p;

		err = -EINVAL;
		for (p = 0x1001; p < 0x1100; p += 2)
175
			if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
176 177 178 179 180 181
				chan->psm   = cpu_to_le16(p);
				chan->sport = cpu_to_le16(p);
				err = 0;
				break;
			}
	}
182

183
done:
184
	write_unlock_bh(&chan_list_lock);
185
	return err;
186 187 188 189
}

int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
{
190
	write_lock_bh(&chan_list_lock);
191 192 193

	chan->scid = scid;

194
	write_unlock_bh(&chan_list_lock);
195 196 197 198

	return 0;
}

199
static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
200
{
201
	u16 cid = L2CAP_CID_DYN_START;
202

203
	for (; cid < L2CAP_CID_DYN_END; cid++) {
204
		if (!__l2cap_get_chan_by_scid(conn, cid))
205 206 207 208 209 210
			return cid;
	}

	return 0;
}

211
struct l2cap_chan *l2cap_chan_create(struct sock *sk)
212 213 214 215 216 217 218 219 220
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

221 222 223 224
	write_lock_bh(&chan_list_lock);
	list_add(&chan->global_l, &chan_list);
	write_unlock_bh(&chan_list_lock);

225 226 227
	return chan;
}

228
void l2cap_chan_destroy(struct l2cap_chan *chan)
229
{
230 231 232 233
	write_lock_bh(&chan_list_lock);
	list_del(&chan->global_l);
	write_unlock_bh(&chan_list_lock);

234 235 236
	kfree(chan);
}

237
static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
238
{
239
	struct sock *sk = chan->sk;
240

241
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
242
			chan->psm, chan->dcid);
243

244 245
	conn->disc_reason = 0x13;

246
	chan->conn = conn;
247

248
	if (sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM) {
249 250
		if (conn->hcon->type == LE_LINK) {
			/* LE connection */
251
			chan->omtu = L2CAP_LE_DEFAULT_MTU;
252 253
			chan->scid = L2CAP_CID_LE_DATA;
			chan->dcid = L2CAP_CID_LE_DATA;
254 255
		} else {
			/* Alloc CID for connection-oriented socket */
256
			chan->scid = l2cap_alloc_cid(conn);
257
			chan->omtu = L2CAP_DEFAULT_MTU;
258
		}
259 260
	} else if (sk->sk_type == SOCK_DGRAM) {
		/* Connectionless socket */
261 262
		chan->scid = L2CAP_CID_CONN_LESS;
		chan->dcid = L2CAP_CID_CONN_LESS;
263
		chan->omtu = L2CAP_DEFAULT_MTU;
264 265
	} else {
		/* Raw socket can send/recv signalling messages only */
266 267
		chan->scid = L2CAP_CID_SIGNALING;
		chan->dcid = L2CAP_CID_SIGNALING;
268
		chan->omtu = L2CAP_DEFAULT_MTU;
269 270
	}

271 272 273
	sock_hold(sk);

	list_add(&chan->list, &conn->chan_l);
274 275
}

276
/* Delete channel.
277
 * Must be called on the locked socket. */
278
static void l2cap_chan_del(struct l2cap_chan *chan, int err)
279
{
280
	struct sock *sk = chan->sk;
281
	struct l2cap_conn *conn = chan->conn;
282 283 284 285
	struct sock *parent = bt_sk(sk)->parent;

	l2cap_sock_clear_timer(sk);

286
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
287

288
	if (conn) {
289 290 291 292 293 294
		/* Delete from channel list */
		write_lock_bh(&conn->chan_lock);
		list_del(&chan->list);
		write_unlock_bh(&conn->chan_lock);
		__sock_put(sk);

295
		chan->conn = NULL;
296 297 298
		hci_conn_put(conn->hcon);
	}

299
	sk->sk_state = BT_CLOSED;
300 301 302 303 304 305 306 307 308 309
	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);
310

311 312
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE &&
			chan->conf_state & L2CAP_CONF_INPUT_DONE))
313
		return;
314

315
	skb_queue_purge(&chan->tx_q);
316

317
	if (chan->mode == L2CAP_MODE_ERTM) {
318 319
		struct srej_list *l, *tmp;

320 321 322
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
323

324 325
		skb_queue_purge(&chan->srej_q);
		skb_queue_purge(&chan->busy_q);
326

327
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
328 329 330 331
			list_del(&l->list);
			kfree(l);
		}
	}
332 333
}

334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414
/* Must be called on unlocked socket. */
static void l2cap_chan_close(struct sock *sk)
{
	l2cap_sock_clear_timer(sk);
	lock_sock(sk);
	__l2cap_chan_close(l2cap_pi(sk)->chan, ECONNRESET);
	release_sock(sk);
	l2cap_sock_kill(sk);
}

static void l2cap_chan_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

	/* Close not yet accepted channels */
	while ((sk = bt_accept_dequeue(parent, NULL)))
		l2cap_chan_close(sk);

	parent->sk_state = BT_CLOSED;
	sock_set_flag(parent, SOCK_ZAPPED);
}

void __l2cap_chan_close(struct l2cap_chan *chan, int reason)
{
	struct l2cap_conn *conn = chan->conn;
	struct sock *sk = chan->sk;

	BT_DBG("chan %p state %d socket %p", chan, sk->sk_state, sk->sk_socket);

	switch (sk->sk_state) {
	case BT_LISTEN:
		l2cap_chan_cleanup_listen(sk);
		break;

	case BT_CONNECTED:
	case BT_CONFIG:
		if ((sk->sk_type == SOCK_SEQPACKET ||
					sk->sk_type == SOCK_STREAM) &&
					conn->hcon->type == ACL_LINK) {
			l2cap_sock_set_timer(sk, sk->sk_sndtimeo);
			l2cap_send_disconn_req(conn, chan, reason);
		} else
			l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT2:
		if ((sk->sk_type == SOCK_SEQPACKET ||
					sk->sk_type == SOCK_STREAM) &&
					conn->hcon->type == ACL_LINK) {
			struct l2cap_conn_rsp rsp;
			__u16 result;

			if (bt_sk(sk)->defer_setup)
				result = L2CAP_CR_SEC_BLOCK;
			else
				result = L2CAP_CR_BAD_PSM;

			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
			rsp.result = cpu_to_le16(result);
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
		}

		l2cap_chan_del(chan, reason);
		break;

	case BT_CONNECT:
	case BT_DISCONN:
		l2cap_chan_del(chan, reason);
		break;

	default:
		sock_set_flag(sk, SOCK_ZAPPED);
		break;
	}
}

415
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
416
{
417 418
	struct sock *sk = chan->sk;

419
	if (sk->sk_type == SOCK_RAW) {
420
		switch (chan->sec_level) {
421 422 423 424 425 426 427
		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;
		}
428
	} else if (chan->psm == cpu_to_le16(0x0001)) {
429 430
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
431

432
		if (chan->sec_level == BT_SECURITY_HIGH)
433
			return HCI_AT_NO_BONDING_MITM;
434
		else
435
			return HCI_AT_NO_BONDING;
436
	} else {
437
		switch (chan->sec_level) {
438
		case BT_SECURITY_HIGH:
439
			return HCI_AT_GENERAL_BONDING_MITM;
440
		case BT_SECURITY_MEDIUM:
441
			return HCI_AT_GENERAL_BONDING;
442
		default:
443
			return HCI_AT_NO_BONDING;
444
		}
445
	}
446 447 448
}

/* Service level security */
449
static inline int l2cap_check_security(struct l2cap_chan *chan)
450
{
451
	struct l2cap_conn *conn = chan->conn;
452 453
	__u8 auth_type;

454
	auth_type = l2cap_get_auth_type(chan);
455

456
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
457 458
}

459
u8 l2cap_get_ident(struct l2cap_conn *conn)
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480
{
	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;
}

481
static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len, void *data)
482 483
{
	struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
484
	u8 flags;
485 486 487 488

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

	if (!skb)
489
		return;
490

491 492 493 494 495 496
	if (lmp_no_flush_capable(conn->hcon->hdev))
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(conn->hcon, skb, flags);
497 498
}

499
static inline void l2cap_send_sframe(struct l2cap_chan *chan, u16 control)
500 501 502
{
	struct sk_buff *skb;
	struct l2cap_hdr *lh;
503
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);
504
	struct l2cap_conn *conn = chan->conn;
505
	struct sock *sk = (struct sock *)pi;
506
	int count, hlen = L2CAP_HDR_SIZE + 2;
507
	u8 flags;
508

509 510 511
	if (sk->sk_state != BT_CONNECTED)
		return;

512
	if (chan->fcs == L2CAP_FCS_CRC16)
513
		hlen += 2;
514

515
	BT_DBG("chan %p, control 0x%2.2x", chan, control);
516

517
	count = min_t(unsigned int, conn->mtu, hlen);
518 519
	control |= L2CAP_CTRL_FRAME_TYPE;

520
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
521
		control |= L2CAP_CTRL_FINAL;
522
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
523 524
	}

525
	if (chan->conn_state & L2CAP_CONN_SEND_PBIT) {
526
		control |= L2CAP_CTRL_POLL;
527
		chan->conn_state &= ~L2CAP_CONN_SEND_PBIT;
528 529
	}

530 531
	skb = bt_skb_alloc(count, GFP_ATOMIC);
	if (!skb)
532
		return;
533 534

	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
535
	lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
536
	lh->cid = cpu_to_le16(chan->dcid);
537 538
	put_unaligned_le16(control, skb_put(skb, 2));

539
	if (chan->fcs == L2CAP_FCS_CRC16) {
540 541 542 543
		u16 fcs = crc16(0, (u8 *)lh, count - 2);
		put_unaligned_le16(fcs, skb_put(skb, 2));
	}

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

549
	hci_send_acl(chan->conn->hcon, skb, flags);
550 551
}

552
static inline void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, u16 control)
553
{
554
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
555
		control |= L2CAP_SUPER_RCV_NOT_READY;
556
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
557
	} else
558 559
		control |= L2CAP_SUPER_RCV_READY;

560
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
561

562
	l2cap_send_sframe(chan, control);
563 564
}

565
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
566
{
567
	return !(chan->conf_state & L2CAP_CONF_CONNECT_PEND);
568 569
}

570
static void l2cap_do_start(struct l2cap_chan *chan)
571
{
572
	struct l2cap_conn *conn = chan->conn;
573 574

	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
575 576 577
		if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
			return;

578 579
		if (l2cap_check_security(chan) &&
				__l2cap_no_conn_pending(chan)) {
580
			struct l2cap_conn_req req;
581 582
			req.scid = cpu_to_le16(chan->scid);
			req.psm  = chan->psm;
583

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

587 588
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
589
		}
590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
	} 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);
	}
}

605 606 607
static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
{
	u32 local_feat_mask = l2cap_feat_mask;
608
	if (!disable_ertm)
609 610 611 612 613 614 615 616 617 618 619 620
		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;
	}
}

621
static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *chan, int err)
622
{
623
	struct sock *sk;
624 625
	struct l2cap_disconn_req req;

626 627 628
	if (!conn)
		return;

629 630
	sk = chan->sk;

631
	if (chan->mode == L2CAP_MODE_ERTM) {
632 633 634
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
635 636
	}

637 638
	req.dcid = cpu_to_le16(chan->dcid);
	req.scid = cpu_to_le16(chan->scid);
639 640
	l2cap_send_cmd(conn, l2cap_get_ident(conn),
			L2CAP_DISCONN_REQ, sizeof(req), &req);
641 642

	sk->sk_state = BT_DISCONN;
643
	sk->sk_err = err;
644 645
}

L
Linus Torvalds 已提交
646
/* ---- L2CAP connections ---- */
647 648
static void l2cap_conn_start(struct l2cap_conn *conn)
{
649
	struct l2cap_chan *chan, *tmp;
650 651 652

	BT_DBG("conn %p", conn);

653
	read_lock(&conn->chan_lock);
654

655
	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
656
		struct sock *sk = chan->sk;
657

658 659
		bh_lock_sock(sk);

660 661
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
662 663 664 665 666
			bh_unlock_sock(sk);
			continue;
		}

		if (sk->sk_state == BT_CONNECT) {
667
			struct l2cap_conn_req req;
668

669
			if (!l2cap_check_security(chan) ||
670
					!__l2cap_no_conn_pending(chan)) {
671 672 673
				bh_unlock_sock(sk);
				continue;
			}
674

675
			if (!l2cap_mode_supported(chan->mode,
676
					conn->feat_mask)
677
					&& chan->conf_state &
678
					L2CAP_CONF_STATE2_DEVICE) {
679
				/* __l2cap_chan_close() calls list_del(chan)
680 681
				 * so release the lock */
				read_unlock_bh(&conn->chan_lock);
682
				 __l2cap_chan_close(chan, ECONNRESET);
683
				read_lock_bh(&conn->chan_lock);
684 685
				bh_unlock_sock(sk);
				continue;
686
			}
687

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

691
			chan->ident = l2cap_get_ident(conn);
692
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
693

694 695
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ,
							sizeof(req), &req);
696

697 698
		} else if (sk->sk_state == BT_CONNECT2) {
			struct l2cap_conn_rsp rsp;
699
			char buf[128];
700 701
			rsp.scid = cpu_to_le16(chan->dcid);
			rsp.dcid = cpu_to_le16(chan->scid);
702

703
			if (l2cap_check_security(chan)) {
704 705 706 707 708 709 710 711 712 713 714
				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);
				}
715 716 717 718 719
			} else {
				rsp.result = cpu_to_le16(L2CAP_CR_PEND);
				rsp.status = cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
			}

720 721
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
722

723
			if (chan->conf_state & L2CAP_CONF_REQ_SENT ||
724 725 726 727 728
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

729
			chan->conf_state |= L2CAP_CONF_REQ_SENT;
730
			l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
731 732
						l2cap_build_conf_req(chan, buf), buf);
			chan->num_conf_req++;
733 734 735 736 737
		}

		bh_unlock_sock(sk);
	}

738
	read_unlock(&conn->chan_lock);
739 740
}

741 742 743
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
744
static struct l2cap_chan *l2cap_global_chan_by_scid(int state, __le16 cid, bdaddr_t *src)
745
{
746
	struct l2cap_chan *c, *c1 = NULL;
747

748
	read_lock(&chan_list_lock);
749

750 751
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
752

753 754 755
		if (state && sk->sk_state != state)
			continue;

756
		if (c->scid == cid) {
757
			/* Exact match. */
758 759 760 761
			if (!bacmp(&bt_sk(sk)->src, src)) {
				read_unlock(&chan_list_lock);
				return c;
			}
762 763 764

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
765
				c1 = c;
766 767
		}
	}
768

769
	read_unlock(&chan_list_lock);
770

771
	return c1;
772 773 774 775
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
776
	struct sock *parent, *sk;
777
	struct l2cap_chan *chan, *pchan;
778 779 780 781

	BT_DBG("");

	/* Check if we have socket listening on cid */
782
	pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
783
							conn->src);
784
	if (!pchan)
785 786
		return;

787 788
	parent = pchan->sk;

789 790
	bh_lock_sock(parent);

791 792 793 794 795 796 797 798 799 800
	/* 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;

801
	chan = l2cap_chan_create(sk);
802 803 804 805 806
	if (!chan) {
		l2cap_sock_kill(sk);
		goto clean;
	}

807 808
	l2cap_pi(sk)->chan = chan;

809
	write_lock_bh(&conn->chan_lock);
810 811 812 813

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
814

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

818 819
	bt_accept_enqueue(parent, sk);

820 821
	__l2cap_chan_add(conn, chan);

822 823 824 825 826
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

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

827
	write_unlock_bh(&conn->chan_lock);
828 829 830 831 832

clean:
	bh_unlock_sock(parent);
}

833 834
static void l2cap_conn_ready(struct l2cap_conn *conn)
{
835
	struct l2cap_chan *chan;
836

837
	BT_DBG("conn %p", conn);
838

839 840 841
	if (!conn->hcon->out && conn->hcon->type == LE_LINK)
		l2cap_le_conn_ready(conn);

842
	read_lock(&conn->chan_lock);
843

844
	list_for_each_entry(chan, &conn->chan_l, list) {
845
		struct sock *sk = chan->sk;
846

847
		bh_lock_sock(sk);
848

849 850 851 852 853 854
		if (conn->hcon->type == LE_LINK) {
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		}

855 856
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
857 858 859 860
			l2cap_sock_clear_timer(sk);
			sk->sk_state = BT_CONNECTED;
			sk->sk_state_change(sk);
		} else if (sk->sk_state == BT_CONNECT)
861
			l2cap_do_start(chan);
862

863
		bh_unlock_sock(sk);
864
	}
865

866
	read_unlock(&conn->chan_lock);
867 868 869 870 871
}

/* Notify sockets that we cannot guaranty reliability anymore */
static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
{
872
	struct l2cap_chan *chan;
873 874 875

	BT_DBG("conn %p", conn);

876
	read_lock(&conn->chan_lock);
877

878
	list_for_each_entry(chan, &conn->chan_l, list) {
879
		struct sock *sk = chan->sk;
880

881
		if (chan->force_reliable)
882 883 884
			sk->sk_err = err;
	}

885
	read_unlock(&conn->chan_lock);
886 887 888 889 890 891
}

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

892
	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
893
	conn->info_ident = 0;
894

895 896 897
	l2cap_conn_start(conn);
}

L
Linus Torvalds 已提交
898 899
static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon, u8 status)
{
900
	struct l2cap_conn *conn = hcon->l2cap_data;
L
Linus Torvalds 已提交
901

902
	if (conn || status)
L
Linus Torvalds 已提交
903 904
		return conn;

905 906
	conn = kzalloc(sizeof(struct l2cap_conn), GFP_ATOMIC);
	if (!conn)
L
Linus Torvalds 已提交
907 908 909 910 911
		return NULL;

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

912 913
	BT_DBG("hcon %p conn %p", hcon, conn);

914 915 916 917 918
	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 已提交
919 920 921
	conn->src = &hcon->hdev->bdaddr;
	conn->dst = &hcon->dst;

922 923
	conn->feat_mask = 0;

L
Linus Torvalds 已提交
924
	spin_lock_init(&conn->lock);
925 926 927
	rwlock_init(&conn->chan_lock);

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

929 930
	if (hcon->type != LE_LINK)
		setup_timer(&conn->info_timer, l2cap_info_timeout,
D
Dave Young 已提交
931 932
						(unsigned long) conn);

933 934
	conn->disc_reason = 0x13;

L
Linus Torvalds 已提交
935 936 937
	return conn;
}

938
static void l2cap_conn_del(struct hci_conn *hcon, int err)
L
Linus Torvalds 已提交
939
{
940
	struct l2cap_conn *conn = hcon->l2cap_data;
941
	struct l2cap_chan *chan, *l;
L
Linus Torvalds 已提交
942 943
	struct sock *sk;

944 945
	if (!conn)
		return;
L
Linus Torvalds 已提交
946 947 948

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

949
	kfree_skb(conn->rx_skb);
L
Linus Torvalds 已提交
950 951

	/* Kill channels */
952
	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
953
		sk = chan->sk;
L
Linus Torvalds 已提交
954
		bh_lock_sock(sk);
955
		l2cap_chan_del(chan, err);
L
Linus Torvalds 已提交
956 957 958 959
		bh_unlock_sock(sk);
		l2cap_sock_kill(sk);
	}

960 961
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
		del_timer_sync(&conn->info_timer);
962

L
Linus Torvalds 已提交
963 964 965 966
	hcon->l2cap_data = NULL;
	kfree(conn);
}

967
static inline void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
L
Linus Torvalds 已提交
968
{
969
	write_lock_bh(&conn->chan_lock);
970
	__l2cap_chan_add(conn, chan);
971
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
972 973 974 975 976 977 978
}

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

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

983
	read_lock(&chan_list_lock);
984

985 986
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
987

L
Linus Torvalds 已提交
988 989 990
		if (state && sk->sk_state != state)
			continue;

991
		if (c->psm == psm) {
L
Linus Torvalds 已提交
992
			/* Exact match. */
993
			if (!bacmp(&bt_sk(sk)->src, src)) {
994
				read_unlock(&chan_list_lock);
995 996
				return c;
			}
L
Linus Torvalds 已提交
997 998 999

			/* Closest match */
			if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY))
1000
				c1 = c;
L
Linus Torvalds 已提交
1001 1002 1003
		}
	}

1004
	read_unlock(&chan_list_lock);
1005

1006
	return c1;
L
Linus Torvalds 已提交
1007 1008
}

1009
int l2cap_chan_connect(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1010
{
1011
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1012 1013 1014 1015 1016
	bdaddr_t *src = &bt_sk(sk)->src;
	bdaddr_t *dst = &bt_sk(sk)->dst;
	struct l2cap_conn *conn;
	struct hci_conn *hcon;
	struct hci_dev *hdev;
1017
	__u8 auth_type;
1018
	int err;
L
Linus Torvalds 已提交
1019

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

1023 1024
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
1025 1026 1027 1028
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

1029
	auth_type = l2cap_get_auth_type(chan);
1030

1031
	if (chan->dcid == L2CAP_CID_LE_DATA)
1032
		hcon = hci_connect(hdev, LE_LINK, dst,
1033
					chan->sec_level, auth_type);
1034 1035
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
1036
					chan->sec_level, auth_type);
1037

1038 1039
	if (IS_ERR(hcon)) {
		err = PTR_ERR(hcon);
L
Linus Torvalds 已提交
1040
		goto done;
1041
	}
L
Linus Torvalds 已提交
1042 1043 1044 1045

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
1046
		err = -ENOMEM;
L
Linus Torvalds 已提交
1047 1048 1049 1050 1051 1052
		goto done;
	}

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

1053 1054
	l2cap_chan_add(conn, chan);

L
Linus Torvalds 已提交
1055 1056 1057 1058
	sk->sk_state = BT_CONNECT;
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

	if (hcon->state == BT_CONNECTED) {
1059 1060
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
L
Linus Torvalds 已提交
1061
			l2cap_sock_clear_timer(sk);
1062
			if (l2cap_check_security(chan))
1063
				sk->sk_state = BT_CONNECTED;
1064
		} else
1065
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
1066 1067
	}

1068 1069
	err = 0;

L
Linus Torvalds 已提交
1070 1071 1072 1073 1074 1075
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

1076
int __l2cap_wait_ack(struct sock *sk)
1077
{
1078
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1079 1080 1081 1082
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

1083
	add_wait_queue(sk_sleep(sk), &wait);
1084
	while ((chan->unacked_frames > 0 && chan->conn)) {
1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
		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);
1104
	remove_wait_queue(sk_sleep(sk), &wait);
1105 1106 1107
	return err;
}

1108 1109
static void l2cap_monitor_timeout(unsigned long arg)
{
1110 1111
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1112

1113
	BT_DBG("chan %p", chan);
1114

1115
	bh_lock_sock(sk);
1116
	if (chan->retry_count >= chan->remote_max_tx) {
1117
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1118
		bh_unlock_sock(sk);
1119 1120 1121
		return;
	}

1122
	chan->retry_count++;
1123 1124
	__mod_monitor_timer();

1125
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1126
	bh_unlock_sock(sk);
1127 1128 1129 1130
}

static void l2cap_retrans_timeout(unsigned long arg)
{
1131 1132
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
1133

1134
	BT_DBG("chan %p", chan);
1135

1136
	bh_lock_sock(sk);
1137
	chan->retry_count = 1;
1138 1139
	__mod_monitor_timer();

1140
	chan->conn_state |= L2CAP_CONN_WAIT_F;
1141

1142
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
1143
	bh_unlock_sock(sk);
1144 1145
}

1146
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
1147
{
1148
	struct sk_buff *skb;
L
Linus Torvalds 已提交
1149

1150
	while ((skb = skb_peek(&chan->tx_q)) &&
1151
			chan->unacked_frames) {
1152
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
1153
			break;
L
Linus Torvalds 已提交
1154

1155
		skb = skb_dequeue(&chan->tx_q);
1156
		kfree_skb(skb);
L
Linus Torvalds 已提交
1157

1158
		chan->unacked_frames--;
1159
	}
L
Linus Torvalds 已提交
1160

1161
	if (!chan->unacked_frames)
1162
		del_timer(&chan->retrans_timer);
1163
}
L
Linus Torvalds 已提交
1164

1165
void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1166
{
1167
	struct hci_conn *hcon = chan->conn->hcon;
1168
	u16 flags;
1169

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

1172
	if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1173 1174 1175 1176 1177
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(hcon, skb, flags);
1178 1179
}

1180
void l2cap_streaming_send(struct l2cap_chan *chan)
1181
{
1182
	struct sk_buff *skb;
1183
	u16 control, fcs;
1184

1185
	while ((skb = skb_dequeue(&chan->tx_q))) {
1186
		control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1187
		control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1188
		put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1189

1190
		if (chan->fcs == L2CAP_FCS_CRC16) {
1191 1192
			fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
			put_unaligned_le16(fcs, skb->data + skb->len - 2);
1193 1194
		}

1195
		l2cap_do_send(chan, skb);
1196

1197
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1198 1199 1200
	}
}

1201
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1202 1203 1204 1205
{
	struct sk_buff *skb, *tx_skb;
	u16 control, fcs;

1206
	skb = skb_peek(&chan->tx_q);
1207 1208
	if (!skb)
		return;
1209

1210 1211
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1212 1213
			break;

1214
		if (skb_queue_is_last(&chan->tx_q, skb))
1215
			return;
1216

1217
	} while ((skb = skb_queue_next(&chan->tx_q, skb)));
1218

1219 1220
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1221
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1222 1223 1224 1225 1226 1227
		return;
	}

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

1230
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1231
		control |= L2CAP_CTRL_FINAL;
1232
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1233
	}
1234

1235
	control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1236
			| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1237

1238 1239
	put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1240
	if (chan->fcs == L2CAP_FCS_CRC16) {
1241 1242 1243 1244
		fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
		put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
	}

1245
	l2cap_do_send(chan, tx_skb);
1246 1247
}

1248
int l2cap_ertm_send(struct l2cap_chan *chan)
1249 1250
{
	struct sk_buff *skb, *tx_skb;
1251
	struct sock *sk = chan->sk;
1252
	u16 control, fcs;
1253
	int nsent = 0;
1254

1255 1256
	if (sk->sk_state != BT_CONNECTED)
		return -ENOTCONN;
1257

1258
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1259

1260 1261
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1262
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1263 1264 1265
			break;
		}

1266 1267
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1268 1269
		bt_cb(skb)->retries++;

1270
		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1271 1272
		control &= L2CAP_CTRL_SAR;

1273
		if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1274
			control |= L2CAP_CTRL_FINAL;
1275
			chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1276
		}
1277 1278
		control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
				| (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1279 1280
		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1281

1282
		if (chan->fcs == L2CAP_FCS_CRC16) {
1283 1284 1285 1286
			fcs = crc16(0, (u8 *)skb->data, tx_skb->len - 2);
			put_unaligned_le16(fcs, skb->data + tx_skb->len - 2);
		}

1287
		l2cap_do_send(chan, tx_skb);
1288

1289
		__mod_retrans_timer();
1290

1291 1292
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1293

1294
		if (bt_cb(skb)->retries == 1)
1295
			chan->unacked_frames++;
1296

1297
		chan->frames_sent++;
1298

1299 1300
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1301
		else
1302
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1303 1304

		nsent++;
1305 1306
	}

1307 1308 1309
	return nsent;
}

1310
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1311 1312 1313
{
	int ret;

1314 1315
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1316

1317
	chan->next_tx_seq = chan->expected_ack_seq;
1318
	ret = l2cap_ertm_send(chan);
1319 1320 1321
	return ret;
}

1322
static void l2cap_send_ack(struct l2cap_chan *chan)
1323 1324 1325
{
	u16 control = 0;

1326
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1327

1328
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
1329
		control |= L2CAP_SUPER_RCV_NOT_READY;
1330 1331
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
		l2cap_send_sframe(chan, control);
1332
		return;
1333
	}
1334

1335
	if (l2cap_ertm_send(chan) > 0)
1336 1337 1338
		return;

	control |= L2CAP_SUPER_RCV_READY;
1339
	l2cap_send_sframe(chan, control);
1340 1341
}

1342
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1343 1344 1345 1346 1347 1348 1349
{
	struct srej_list *tail;
	u16 control;

	control = L2CAP_SUPER_SELECT_REJECT;
	control |= L2CAP_CTRL_FINAL;

1350
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1351 1352
	control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;

1353
	l2cap_send_sframe(chan, control);
1354 1355
}

1356 1357
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
1358
	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1359 1360
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1361

1362
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1363
		return -EFAULT;
L
Linus Torvalds 已提交
1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374

	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)
1375
			return err;
1376 1377
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1378 1379 1380 1381 1382 1383 1384 1385

		sent += count;
		len  -= count;

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

	return sent;
1386
}
L
Linus Torvalds 已提交
1387

1388
struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1389
{
1390
	struct sock *sk = chan->sk;
1391
	struct l2cap_conn *conn = chan->conn;
1392 1393 1394 1395 1396 1397 1398 1399 1400 1401
	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)
1402
		return ERR_PTR(err);
1403 1404 1405

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1406
	lh->cid = cpu_to_le16(chan->dcid);
1407
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1408
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1409 1410 1411 1412 1413 1414 1415 1416 1417

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

1418
struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1419
{
1420
	struct sock *sk = chan->sk;
1421
	struct l2cap_conn *conn = chan->conn;
1422 1423 1424 1425 1426 1427 1428 1429 1430 1431
	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)
1432
		return ERR_PTR(err);
1433 1434 1435

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1436
	lh->cid = cpu_to_le16(chan->dcid);
1437 1438 1439 1440 1441 1442 1443 1444 1445 1446
	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;
}

1447
struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1448
{
1449
	struct sock *sk = chan->sk;
1450
	struct l2cap_conn *conn = chan->conn;
1451 1452 1453 1454 1455 1456
	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);

1457 1458 1459
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1460 1461 1462
	if (sdulen)
		hlen += 2;

1463
	if (chan->fcs == L2CAP_FCS_CRC16)
1464 1465
		hlen += 2;

1466 1467 1468 1469
	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)
1470
		return ERR_PTR(err);
1471 1472 1473

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1474
	lh->cid = cpu_to_le16(chan->dcid);
1475 1476
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(control, skb_put(skb, 2));
1477 1478
	if (sdulen)
		put_unaligned_le16(sdulen, skb_put(skb, 2));
1479 1480 1481 1482 1483 1484

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

1486
	if (chan->fcs == L2CAP_FCS_CRC16)
1487 1488
		put_unaligned_le16(0, skb_put(skb, 2));

1489
	bt_cb(skb)->retries = 0;
1490
	return skb;
L
Linus Torvalds 已提交
1491 1492
}

1493
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1494 1495 1496 1497 1498 1499
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
	u16 control;
	size_t size = 0;

1500
	skb_queue_head_init(&sar_queue);
1501
	control = L2CAP_SDU_START;
1502
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1503 1504 1505 1506
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1507 1508
	len -= chan->remote_mps;
	size += chan->remote_mps;
1509 1510 1511 1512

	while (len > 0) {
		size_t buflen;

1513
		if (len > chan->remote_mps) {
1514
			control = L2CAP_SDU_CONTINUE;
1515
			buflen = chan->remote_mps;
1516
		} else {
1517
			control = L2CAP_SDU_END;
1518 1519 1520
			buflen = len;
		}

1521
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1522 1523 1524 1525 1526 1527 1528 1529 1530
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1531 1532 1533
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1534 1535 1536 1537

	return size;
}

L
Linus Torvalds 已提交
1538 1539 1540
static void l2cap_chan_ready(struct sock *sk)
{
	struct sock *parent = bt_sk(sk)->parent;
1541
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
L
Linus Torvalds 已提交
1542 1543 1544

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

1545
	chan->conf_state = 0;
L
Linus Torvalds 已提交
1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565
	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;
1566
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1567 1568 1569

	BT_DBG("conn %p", conn);

1570 1571
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1572
		struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1573 1574 1575 1576 1577 1578
		if (sk->sk_type != SOCK_RAW)
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1579 1580
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1581 1582 1583 1584 1585
			continue;

		if (sock_queue_rcv_skb(sk, nskb))
			kfree_skb(nskb);
	}
1586
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597
}

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

1598 1599
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1600 1601 1602 1603 1604 1605 1606 1607 1608

	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);
1609
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1610 1611 1612 1613 1614

	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 已提交
1615 1616 1617 1618

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1619
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669

	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:
1670
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1671 1672 1673
		break;

	case 4:
1674
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700
		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:
1701
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1702 1703 1704
		break;

	case 4:
1705
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1706 1707 1708 1709 1710 1711 1712 1713 1714 1715
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1716 1717
static void l2cap_ack_timeout(unsigned long arg)
{
1718
	struct l2cap_chan *chan = (void *) arg;
1719

1720 1721 1722
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1723 1724
}

1725
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1726
{
1727 1728
	struct sock *sk = chan->sk;

1729
	chan->expected_ack_seq = 0;
1730
	chan->unacked_frames = 0;
1731
	chan->buffer_seq = 0;
1732 1733
	chan->num_acked = 0;
	chan->frames_sent = 0;
1734

1735 1736 1737 1738 1739
	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);
1740

1741 1742
	skb_queue_head_init(&chan->srej_q);
	skb_queue_head_init(&chan->busy_q);
1743

1744 1745
	INIT_LIST_HEAD(&chan->srej_l);

1746
	INIT_WORK(&chan->busy_work, l2cap_busy_work);
1747 1748

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1749 1750
}

1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763
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;
	}
}

1764
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1765 1766
{
	struct l2cap_conf_req *req = data;
1767
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
1768 1769
	void *ptr = req->data;

1770
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1771

1772
	if (chan->num_conf_req || chan->num_conf_rsp)
1773 1774
		goto done;

1775
	switch (chan->mode) {
1776 1777
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1778
		if (chan->conf_state & L2CAP_CONF_STATE2_DEVICE)
1779 1780
			break;

1781
		/* fall through */
1782
	default:
1783
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1784 1785 1786 1787
		break;
	}

done:
1788 1789
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1790

1791
	switch (chan->mode) {
1792
	case L2CAP_MODE_BASIC:
1793 1794
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1795 1796
			break;

1797 1798 1799 1800 1801 1802 1803
		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;

1804 1805
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
1806 1807 1808 1809
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
1810 1811
		rfc.txwin_size      = chan->tx_win;
		rfc.max_transmit    = chan->max_tx;
1812 1813
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1814
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1815 1816
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1817

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

1821
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1822 1823
			break;

1824
		if (chan->fcs == L2CAP_FCS_NONE ||
1825
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1826 1827
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1828
		}
1829 1830 1831 1832 1833 1834 1835 1836
		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;
1837
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1838 1839
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1840

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

1844
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1845 1846
			break;

1847
		if (chan->fcs == L2CAP_FCS_NONE ||
1848
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1849 1850
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1851
		}
1852 1853
		break;
	}
L
Linus Torvalds 已提交
1854

1855
	req->dcid  = cpu_to_le16(chan->dcid);
1856
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
1857 1858 1859 1860

	return ptr - data;
}

1861
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1862
{
1863 1864
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
1865 1866
	void *req = chan->conf_req;
	int len = chan->conf_len;
1867 1868
	int type, hint, olen;
	unsigned long val;
1869
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1870
	u16 mtu = L2CAP_DEFAULT_MTU;
1871
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
1872

1873
	BT_DBG("chan %p", chan);
1874

1875 1876
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
1877

1878
		hint  = type & L2CAP_CONF_HINT;
1879
		type &= L2CAP_CONF_MASK;
1880 1881 1882

		switch (type) {
		case L2CAP_CONF_MTU:
1883
			mtu = val;
1884 1885 1886
			break;

		case L2CAP_CONF_FLUSH_TO:
1887
			chan->flush_to = val;
1888 1889 1890 1891 1892
			break;

		case L2CAP_CONF_QOS:
			break;

1893 1894 1895 1896 1897
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

1898 1899
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
1900
				chan->conf_state |= L2CAP_CONF_NO_FCS_RECV;
1901 1902 1903

			break;

1904 1905 1906 1907 1908 1909 1910 1911 1912 1913
		default:
			if (hint)
				break;

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

1914
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
1915 1916
		goto done;

1917
	switch (chan->mode) {
1918 1919
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1920
		if (!(chan->conf_state & L2CAP_CONF_STATE2_DEVICE)) {
1921
			chan->mode = l2cap_select_mode(rfc.mode,
1922
					chan->conn->feat_mask);
1923 1924 1925
			break;
		}

1926
		if (chan->mode != rfc.mode)
1927
			return -ECONNREFUSED;
1928

1929 1930 1931 1932
		break;
	}

done:
1933
	if (chan->mode != rfc.mode) {
1934
		result = L2CAP_CONF_UNACCEPT;
1935
		rfc.mode = chan->mode;
1936

1937
		if (chan->num_conf_rsp == 1)
1938 1939 1940 1941 1942 1943 1944
			return -ECONNREFUSED;

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


1945 1946 1947 1948
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

1949 1950 1951
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
1952
			chan->omtu = mtu;
1953
			chan->conf_state |= L2CAP_CONF_MTU_DONE;
1954
		}
1955
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
1956

1957 1958
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
1959
			chan->fcs = L2CAP_FCS_NONE;
1960
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1961 1962 1963
			break;

		case L2CAP_MODE_ERTM:
1964 1965
			chan->remote_tx_win = rfc.txwin_size;
			chan->remote_max_tx = rfc.max_transmit;
1966

1967 1968
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1969

1970
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1971

1972 1973 1974 1975
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
1976

1977
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1978 1979 1980 1981

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

1982 1983 1984
			break;

		case L2CAP_MODE_STREAMING:
1985 1986
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1987

1988
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1989

1990
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1991 1992 1993 1994

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

1995 1996 1997
			break;

		default:
1998 1999
			result = L2CAP_CONF_UNACCEPT;

2000
			memset(&rfc, 0, sizeof(rfc));
2001
			rfc.mode = chan->mode;
2002
		}
2003

2004
		if (result == L2CAP_CONF_SUCCESS)
2005
			chan->conf_state |= L2CAP_CONF_OUTPUT_DONE;
2006
	}
2007
	rsp->scid   = cpu_to_le16(chan->dcid);
2008 2009 2010 2011
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
2012 2013
}

2014
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
2015 2016 2017 2018 2019 2020 2021
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2022
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
2023 2024 2025 2026 2027 2028 2029 2030

	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;
2031
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
2032
			} else
2033 2034
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
2035 2036 2037
			break;

		case L2CAP_CONF_FLUSH_TO:
2038
			chan->flush_to = val;
2039
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
2040
							2, chan->flush_to);
2041 2042 2043 2044 2045 2046
			break;

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

2047
			if ((chan->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
2048
							rfc.mode != chan->mode)
2049 2050
				return -ECONNREFUSED;

2051
			chan->fcs = 0;
2052 2053 2054 2055 2056 2057 2058

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

2059
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
2060 2061
		return -ECONNREFUSED;

2062
	chan->mode = rfc.mode;
2063

2064 2065 2066
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
2067 2068 2069
			chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
			chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2070 2071
			break;
		case L2CAP_MODE_STREAMING:
2072
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2073 2074 2075
		}
	}

2076
	req->dcid   = cpu_to_le16(chan->dcid);
2077 2078 2079 2080 2081
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

2082
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
2083 2084 2085 2086
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

2087
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
2088

2089
	rsp->scid   = cpu_to_le16(chan->dcid);
2090
	rsp->result = cpu_to_le16(result);
2091
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
2092 2093 2094 2095

	return ptr - data;
}

2096
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
2097 2098
{
	struct l2cap_conn_rsp rsp;
2099
	struct l2cap_conn *conn = chan->conn;
2100 2101
	u8 buf[128];

2102 2103
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
2104 2105 2106 2107 2108
	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);

2109
	if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2110 2111
		return;

2112
	chan->conf_state |= L2CAP_CONF_REQ_SENT;
2113 2114 2115 2116 2117
	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

2118
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
2119 2120 2121 2122 2123
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

2124
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
2125

2126
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142
		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:
2143 2144 2145
		chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
		chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2146 2147
		break;
	case L2CAP_MODE_STREAMING:
2148
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
2149 2150 2151
	}
}

2152 2153 2154 2155 2156 2157 2158 2159 2160 2161
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);
2162 2163

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2164
		conn->info_ident = 0;
2165

2166 2167 2168 2169 2170 2171
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2172 2173 2174 2175
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;
2176
	struct l2cap_chan *chan = NULL, *pchan;
2177
	struct sock *parent, *sk = NULL;
2178
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2179 2180

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2181
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2182 2183 2184 2185

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

	/* Check if we have socket listening on psm */
2186 2187
	pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src);
	if (!pchan) {
L
Linus Torvalds 已提交
2188 2189 2190 2191
		result = L2CAP_CR_BAD_PSM;
		goto sendresp;
	}

2192 2193
	parent = pchan->sk;

2194 2195
	bh_lock_sock(parent);

2196 2197 2198
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2199
		conn->disc_reason = 0x05;
2200 2201 2202 2203
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2204 2205 2206 2207
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2208
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2209 2210 2211
		goto response;
	}

2212
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
L
Linus Torvalds 已提交
2213 2214 2215
	if (!sk)
		goto response;

2216
	chan = l2cap_chan_create(sk);
2217 2218 2219 2220 2221
	if (!chan) {
		l2cap_sock_kill(sk);
		goto response;
	}

2222 2223
	l2cap_pi(sk)->chan = chan;

2224
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2225 2226

	/* Check if we already have channel with that dcid */
2227 2228
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2229 2230 2231 2232 2233 2234 2235 2236 2237 2238
		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);
2239 2240
	chan->psm  = psm;
	chan->dcid = scid;
L
Linus Torvalds 已提交
2241

2242 2243
	bt_accept_enqueue(parent, sk);

2244 2245
	__l2cap_chan_add(conn, chan);

2246
	dcid = chan->scid;
L
Linus Torvalds 已提交
2247 2248 2249

	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

2250
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2251

2252
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2253
		if (l2cap_check_security(chan)) {
2254 2255 2256 2257 2258 2259 2260 2261 2262 2263
			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;
			}
2264 2265 2266 2267 2268 2269 2270 2271 2272
		} 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 已提交
2273 2274
	}

2275
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2276 2277 2278 2279 2280

response:
	bh_unlock_sock(parent);

sendresp:
2281 2282 2283 2284
	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 已提交
2285
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300

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

2301
	if (chan && !(chan->conf_state & L2CAP_CONF_REQ_SENT) &&
2302 2303
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2304
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2305
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2306 2307
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2308 2309
	}

L
Linus Torvalds 已提交
2310 2311 2312 2313 2314 2315 2316
	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;
2317
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328
	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) {
2329
		chan = l2cap_get_chan_by_scid(conn, scid);
2330
		if (!chan)
2331
			return -EFAULT;
L
Linus Torvalds 已提交
2332
	} else {
2333
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2334
		if (!chan)
2335
			return -EFAULT;
L
Linus Torvalds 已提交
2336 2337
	}

2338 2339
	sk = chan->sk;

L
Linus Torvalds 已提交
2340 2341 2342
	switch (result) {
	case L2CAP_CR_SUCCESS:
		sk->sk_state = BT_CONFIG;
2343
		chan->ident = 0;
2344
		chan->dcid = dcid;
2345
		chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2346

2347
		if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2348 2349
			break;

2350
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2351

L
Linus Torvalds 已提交
2352
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2353 2354
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2355 2356 2357
		break;

	case L2CAP_CR_PEND:
2358
		chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
2359 2360 2361
		break;

	default:
2362 2363 2364 2365 2366 2367 2368 2369
		/* 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;
		}

2370
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2371 2372 2373 2374 2375 2376 2377
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2378
static inline void set_default_fcs(struct l2cap_chan *chan)
2379
{
2380 2381
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);

2382 2383 2384
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2385
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2386
		chan->fcs = L2CAP_FCS_NONE;
2387
	else if (!(pi->chan->conf_state & L2CAP_CONF_NO_FCS_RECV))
2388
		chan->fcs = L2CAP_FCS_CRC16;
2389 2390
}

2391
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2392 2393 2394 2395
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2396
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2397
	struct sock *sk;
2398
	int len;
L
Linus Torvalds 已提交
2399 2400 2401 2402 2403 2404

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

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

2405
	chan = l2cap_get_chan_by_scid(conn, dcid);
2406
	if (!chan)
L
Linus Torvalds 已提交
2407 2408
		return -ENOENT;

2409 2410
	sk = chan->sk;

2411 2412 2413 2414 2415 2416
	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);
2417
		goto unlock;
2418
	}
2419

2420
	/* Reject if config buffer is too small. */
2421
	len = cmd_len - sizeof(*req);
2422
	if (chan->conf_len + len > sizeof(chan->conf_req)) {
2423
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2424
				l2cap_build_conf_rsp(chan, rsp,
2425 2426 2427 2428 2429
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2430 2431
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2432 2433 2434 2435

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2436
				l2cap_build_conf_rsp(chan, rsp,
2437
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2438 2439 2440 2441
		goto unlock;
	}

	/* Complete config. */
2442
	len = l2cap_parse_conf_req(chan, rsp);
2443
	if (len < 0) {
2444
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2445
		goto unlock;
2446
	}
L
Linus Torvalds 已提交
2447

2448
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2449
	chan->num_conf_rsp++;
2450 2451

	/* Reset config buffer. */
2452
	chan->conf_len = 0;
2453

2454
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE))
2455 2456
		goto unlock;

2457
	if (chan->conf_state & L2CAP_CONF_INPUT_DONE) {
2458
		set_default_fcs(chan);
2459

L
Linus Torvalds 已提交
2460
		sk->sk_state = BT_CONNECTED;
2461

2462 2463
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2464
		skb_queue_head_init(&chan->tx_q);
2465
		if (chan->mode == L2CAP_MODE_ERTM)
2466
			l2cap_ertm_init(chan);
2467

L
Linus Torvalds 已提交
2468
		l2cap_chan_ready(sk);
2469 2470 2471
		goto unlock;
	}

2472
	if (!(chan->conf_state & L2CAP_CONF_REQ_SENT)) {
2473
		u8 buf[64];
2474
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
L
Linus Torvalds 已提交
2475
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2476 2477
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488
	}

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;
2489
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2490
	struct sock *sk;
2491
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2492 2493 2494 2495 2496

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

2497 2498
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2499

2500
	chan = l2cap_get_chan_by_scid(conn, scid);
2501
	if (!chan)
L
Linus Torvalds 已提交
2502 2503
		return 0;

2504 2505
	sk = chan->sk;

L
Linus Torvalds 已提交
2506 2507
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2508
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2509 2510 2511
		break;

	case L2CAP_CONF_UNACCEPT:
2512
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2513 2514
			char req[64];

2515
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2516
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2517 2518 2519
				goto done;
			}

2520 2521
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2522 2523
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2524
			if (len < 0) {
2525
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2526 2527 2528 2529 2530
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2531
			chan->num_conf_req++;
2532 2533 2534
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2535 2536
		}

2537
	default:
2538
		sk->sk_err = ECONNRESET;
L
Linus Torvalds 已提交
2539
		l2cap_sock_set_timer(sk, HZ * 5);
2540
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2541 2542 2543 2544 2545 2546
		goto done;
	}

	if (flags & 0x01)
		goto done;

2547
	chan->conf_state |= L2CAP_CONF_INPUT_DONE;
L
Linus Torvalds 已提交
2548

2549
	if (chan->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2550
		set_default_fcs(chan);
2551

L
Linus Torvalds 已提交
2552
		sk->sk_state = BT_CONNECTED;
2553 2554
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2555
		skb_queue_head_init(&chan->tx_q);
2556
		if (chan->mode ==  L2CAP_MODE_ERTM)
2557
			l2cap_ertm_init(chan);
2558

L
Linus Torvalds 已提交
2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571
		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;
2572
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2573 2574 2575 2576 2577 2578 2579
	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);

2580
	chan = l2cap_get_chan_by_scid(conn, dcid);
2581
	if (!chan)
L
Linus Torvalds 已提交
2582 2583
		return 0;

2584 2585
	sk = chan->sk;

2586 2587
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2588 2589 2590 2591
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2592 2593 2594 2595 2596 2597 2598 2599 2600
	/* 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;
	}

2601
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2602 2603 2604 2605 2606 2607 2608 2609 2610 2611
	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;
2612
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2613 2614 2615 2616 2617 2618 2619
	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);

2620
	chan = l2cap_get_chan_by_scid(conn, scid);
2621
	if (!chan)
L
Linus Torvalds 已提交
2622 2623
		return 0;

2624 2625
	sk = chan->sk;

2626 2627 2628 2629 2630 2631 2632 2633 2634
	/* 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;
	}

2635
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650
	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);

2651 2652
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2653
		u32 feat_mask = l2cap_feat_mask;
2654 2655 2656
		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);
2657
		if (!disable_ertm)
2658 2659
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2660
		put_unaligned_le32(feat_mask, rsp->data);
2661 2662
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2663 2664 2665 2666 2667 2668 2669 2670
	} 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);
2671 2672 2673 2674 2675 2676 2677
	} 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 已提交
2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691

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

2692 2693 2694 2695 2696
	/* 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;

2697 2698
	del_timer(&conn->info_timer);

2699 2700 2701 2702 2703 2704 2705 2706 2707
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2708
	if (type == L2CAP_IT_FEAT_MASK) {
2709
		conn->feat_mask = get_unaligned_le32(rsp->data);
2710

2711
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725
			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) {
2726
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2727
		conn->info_ident = 0;
2728 2729 2730

		l2cap_conn_start(conn);
	}
2731

L
Linus Torvalds 已提交
2732 2733 2734
	return 0;
}

2735
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762
							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;
2763
	int err;
2764 2765 2766 2767 2768 2769 2770 2771 2772

	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;
2773 2774
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
2775 2776 2777 2778 2779 2780 2781
	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));
2782 2783 2784

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
2785 2786 2787 2788 2789 2790 2791
		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);

2792 2793 2794
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

2795 2796 2797
	return 0;
}

2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863
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:
2864
		return l2cap_conn_param_update_req(conn, cmd, data);
2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876

	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 已提交
2877 2878 2879 2880
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
2881
	int err;
L
Linus Torvalds 已提交
2882 2883 2884 2885

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
2886
		u16 cmd_len;
L
Linus Torvalds 已提交
2887 2888 2889 2890
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

2891
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
2892

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

2895
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
2896 2897 2898 2899
			BT_DBG("corrupted command");
			break;
		}

2900 2901 2902 2903
		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 已提交
2904 2905 2906

		if (err) {
			struct l2cap_cmd_rej rej;
2907 2908

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

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

2915 2916
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
2917 2918 2919 2920 2921
	}

	kfree_skb(skb);
}

2922
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
2923 2924 2925 2926
{
	u16 our_fcs, rcv_fcs;
	int hdr_size = L2CAP_HDR_SIZE + 2;

2927
	if (chan->fcs == L2CAP_FCS_CRC16) {
2928 2929 2930 2931 2932
		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)
2933
			return -EBADMSG;
2934 2935 2936 2937
	}
	return 0;
}

2938
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
2939 2940 2941
{
	u16 control = 0;

2942
	chan->frames_sent = 0;
2943

2944
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2945

2946
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
2947
		control |= L2CAP_SUPER_RCV_NOT_READY;
2948 2949
		l2cap_send_sframe(chan, control);
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
2950 2951
	}

2952 2953
	if (chan->conn_state & L2CAP_CONN_REMOTE_BUSY)
		l2cap_retransmit_frames(chan);
2954

2955
	l2cap_ertm_send(chan);
2956

2957
	if (!(chan->conn_state & L2CAP_CONN_LOCAL_BUSY) &&
2958
			chan->frames_sent == 0) {
2959
		control |= L2CAP_SUPER_RCV_READY;
2960
		l2cap_send_sframe(chan, control);
2961 2962 2963
	}
}

2964
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
2965 2966
{
	struct sk_buff *next_skb;
2967
	int tx_seq_offset, next_tx_seq_offset;
2968 2969 2970 2971

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

2972
	next_skb = skb_peek(&chan->srej_q);
2973
	if (!next_skb) {
2974
		__skb_queue_tail(&chan->srej_q, skb);
2975
		return 0;
2976 2977
	}

2978
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
2979 2980 2981
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

2982
	do {
2983 2984 2985
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

2986
		next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
2987
						chan->buffer_seq) % 64;
2988 2989 2990 2991
		if (next_tx_seq_offset < 0)
			next_tx_seq_offset += 64;

		if (next_tx_seq_offset > tx_seq_offset) {
2992
			__skb_queue_before(&chan->srej_q, next_skb, skb);
2993
			return 0;
2994 2995
		}

2996
		if (skb_queue_is_last(&chan->srej_q, next_skb))
2997 2998
			break;

2999
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
3000

3001
	__skb_queue_tail(&chan->srej_q, skb);
3002 3003

	return 0;
3004 3005
}

3006
static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3007 3008
{
	struct sk_buff *_skb;
3009
	int err;
3010 3011 3012

	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3013
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
3014 3015
			goto drop;

3016
		return sock_queue_rcv_skb(chan->sk, skb);
3017 3018

	case L2CAP_SDU_START:
3019
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
3020 3021
			goto drop;

3022
		chan->sdu_len = get_unaligned_le16(skb->data);
3023

3024
		if (chan->sdu_len > chan->imtu)
3025 3026
			goto disconnect;

3027 3028
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu)
3029 3030 3031 3032 3033 3034
			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);
3035

3036
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3037

3038
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3039
		chan->partial_sdu_len = skb->len;
3040 3041 3042
		break;

	case L2CAP_SDU_CONTINUE:
3043
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3044 3045
			goto disconnect;

3046
		if (!chan->sdu)
3047 3048
			goto disconnect;

3049 3050
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
3051 3052
			goto drop;

3053
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3054

3055 3056 3057
		break;

	case L2CAP_SDU_END:
3058
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3059 3060
			goto disconnect;

3061
		if (!chan->sdu)
3062 3063
			goto disconnect;

3064
		if (!(chan->conn_state & L2CAP_CONN_SAR_RETRY)) {
3065
			chan->partial_sdu_len += skb->len;
3066

3067
			if (chan->partial_sdu_len > chan->imtu)
3068
				goto drop;
3069

3070
			if (chan->partial_sdu_len != chan->sdu_len)
3071
				goto drop;
3072

3073
			memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3074
		}
3075

3076
		_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3077
		if (!_skb) {
3078
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
3079 3080 3081
			return -ENOMEM;
		}

3082
		err = sock_queue_rcv_skb(chan->sk, _skb);
3083
		if (err < 0) {
3084
			kfree_skb(_skb);
3085
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
3086 3087 3088
			return err;
		}

3089 3090
		chan->conn_state &= ~L2CAP_CONN_SAR_RETRY;
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3091

3092
		kfree_skb(chan->sdu);
3093 3094 3095 3096
		break;
	}

	kfree_skb(skb);
3097
	return 0;
3098 3099

drop:
3100 3101
	kfree_skb(chan->sdu);
	chan->sdu = NULL;
3102 3103

disconnect:
3104
	l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3105 3106 3107 3108
	kfree_skb(skb);
	return 0;
}

3109
static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
3110 3111 3112 3113 3114
{
	struct sk_buff *skb;
	u16 control;
	int err;

3115
	while ((skb = skb_dequeue(&chan->busy_q))) {
3116
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3117
		err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3118
		if (err < 0) {
3119
			skb_queue_head(&chan->busy_q, skb);
3120 3121 3122
			return -EBUSY;
		}

3123
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3124 3125
	}

3126
	if (!(chan->conn_state & L2CAP_CONN_RNR_SENT))
3127 3128
		goto done;

3129
	control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3130
	control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
3131
	l2cap_send_sframe(chan, control);
3132
	chan->retry_count = 1;
3133

3134
	del_timer(&chan->retrans_timer);
3135 3136
	__mod_monitor_timer();

3137
	chan->conn_state |= L2CAP_CONN_WAIT_F;
3138 3139

done:
3140 3141
	chan->conn_state &= ~L2CAP_CONN_LOCAL_BUSY;
	chan->conn_state &= ~L2CAP_CONN_RNR_SENT;
3142

3143
	BT_DBG("chan %p, Exit local busy", chan);
3144 3145 3146 3147

	return 0;
}

3148 3149 3150
static void l2cap_busy_work(struct work_struct *work)
{
	DECLARE_WAITQUEUE(wait, current);
3151 3152 3153
	struct l2cap_chan *chan =
		container_of(work, struct l2cap_chan, busy_work);
	struct sock *sk = chan->sk;
3154 3155 3156 3157 3158
	int n_tries = 0, timeo = HZ/5, err;
	struct sk_buff *skb;

	lock_sock(sk);

3159
	add_wait_queue(sk_sleep(sk), &wait);
3160
	while ((skb = skb_peek(&chan->busy_q))) {
3161 3162 3163 3164
		set_current_state(TASK_INTERRUPTIBLE);

		if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
			err = -EBUSY;
3165
			l2cap_send_disconn_req(chan->conn, chan, EBUSY);
3166
			break;
3167 3168 3169 3170 3171 3172 3173
		}

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
3174
			break;
3175 3176 3177 3178 3179 3180 3181 3182
		}

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

		err = sock_error(sk);
		if (err)
3183
			break;
3184

3185
		if (l2cap_try_push_rx_skb(chan) == 0)
3186 3187 3188 3189
			break;
	}

	set_current_state(TASK_RUNNING);
3190
	remove_wait_queue(sk_sleep(sk), &wait);
3191 3192 3193 3194

	release_sock(sk);
}

3195
static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3196 3197 3198
{
	int sctrl, err;

3199
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3200
		bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3201
		__skb_queue_tail(&chan->busy_q, skb);
3202
		return l2cap_try_push_rx_skb(chan);
3203 3204


3205 3206
	}

3207
	err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3208
	if (err >= 0) {
3209
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3210 3211 3212 3213
		return err;
	}

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

3216
	chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3217
	bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3218
	__skb_queue_tail(&chan->busy_q, skb);
3219

3220
	sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3221
	sctrl |= L2CAP_SUPER_RCV_NOT_READY;
3222
	l2cap_send_sframe(chan, sctrl);
3223

3224
	chan->conn_state |= L2CAP_CONN_RNR_SENT;
3225

3226
	del_timer(&chan->ack_timer);
3227

3228
	queue_work(_busy_wq, &chan->busy_work);
3229 3230 3231 3232

	return err;
}

3233
static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3234 3235 3236 3237
{
	struct sk_buff *_skb;
	int err = -EINVAL;

3238 3239 3240 3241 3242
	/*
	 * TODO: We have to notify the userland if some data is lost with the
	 * Streaming Mode.
	 */

3243 3244
	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3245
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3246
			kfree_skb(chan->sdu);
3247 3248 3249
			break;
		}

3250
		err = sock_queue_rcv_skb(chan->sk, skb);
3251 3252 3253 3254 3255 3256
		if (!err)
			return 0;

		break;

	case L2CAP_SDU_START:
3257
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3258
			kfree_skb(chan->sdu);
3259 3260 3261
			break;
		}

3262
		chan->sdu_len = get_unaligned_le16(skb->data);
3263 3264
		skb_pull(skb, 2);

3265
		if (chan->sdu_len > chan->imtu) {
3266 3267 3268 3269
			err = -EMSGSIZE;
			break;
		}

3270 3271
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu) {
3272 3273 3274 3275
			err = -ENOMEM;
			break;
		}

3276
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3277

3278
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3279
		chan->partial_sdu_len = skb->len;
3280 3281 3282 3283
		err = 0;
		break;

	case L2CAP_SDU_CONTINUE:
3284
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3285 3286
			break;

3287
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3288

3289 3290 3291
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
			kfree_skb(chan->sdu);
3292 3293 3294 3295 3296 3297
		else
			err = 0;

		break;

	case L2CAP_SDU_END:
3298
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3299 3300
			break;

3301
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3302

3303
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3304
		chan->partial_sdu_len += skb->len;
3305

3306
		if (chan->partial_sdu_len > chan->imtu)
3307 3308
			goto drop;

3309 3310
		if (chan->partial_sdu_len == chan->sdu_len) {
			_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3311
			err = sock_queue_rcv_skb(chan->sk, _skb);
3312 3313 3314 3315 3316
			if (err < 0)
				kfree_skb(_skb);
		}
		err = 0;

3317
drop:
3318
		kfree_skb(chan->sdu);
3319 3320 3321 3322 3323 3324 3325
		break;
	}

	kfree_skb(skb);
	return err;
}

3326
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3327 3328
{
	struct sk_buff *skb;
3329
	u16 control;
3330

3331
	while ((skb = skb_peek(&chan->srej_q))) {
3332 3333 3334
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3335
		skb = skb_dequeue(&chan->srej_q);
3336
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3337
		l2cap_ertm_reassembly_sdu(chan, skb, control);
3338 3339
		chan->buffer_seq_srej =
			(chan->buffer_seq_srej + 1) % 64;
3340
		tx_seq = (tx_seq + 1) % 64;
3341 3342 3343
	}
}

3344
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3345 3346 3347 3348
{
	struct srej_list *l, *tmp;
	u16 control;

3349
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3350 3351 3352 3353 3354 3355 3356
		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;
3357
		l2cap_send_sframe(chan, control);
3358
		list_del(&l->list);
3359
		list_add_tail(&l->list, &chan->srej_l);
3360 3361 3362
	}
}

3363
static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3364 3365 3366 3367
{
	struct srej_list *new;
	u16 control;

3368
	while (tx_seq != chan->expected_tx_seq) {
3369
		control = L2CAP_SUPER_SELECT_REJECT;
3370
		control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3371
		l2cap_send_sframe(chan, control);
3372 3373

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3374 3375
		new->tx_seq = chan->expected_tx_seq;
		chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3376
		list_add_tail(&new->list, &chan->srej_l);
3377
	}
3378
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3379 3380
}

3381
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3382 3383
{
	u8 tx_seq = __get_txseq(rx_control);
3384
	u8 req_seq = __get_reqseq(rx_control);
3385
	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3386
	int tx_seq_offset, expected_tx_seq_offset;
3387
	int num_to_ack = (chan->tx_win/6) + 1;
3388 3389
	int err = 0;

3390 3391
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
							tx_seq, rx_control);
3392

3393
	if (L2CAP_CTRL_FINAL & rx_control &&
3394
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3395
		del_timer(&chan->monitor_timer);
3396
		if (chan->unacked_frames > 0)
3397
			__mod_retrans_timer();
3398
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3399 3400
	}

3401 3402
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3403

3404
	if (tx_seq == chan->expected_tx_seq)
3405
		goto expected;
3406

3407
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3408 3409 3410 3411
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

	/* invalid tx_seq */
3412
	if (tx_seq_offset >= chan->tx_win) {
3413
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3414 3415 3416
		goto drop;
	}

3417
	if (chan->conn_state == L2CAP_CONN_LOCAL_BUSY)
3418 3419
		goto drop;

3420
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3421
		struct srej_list *first;
3422

3423
		first = list_first_entry(&chan->srej_l,
3424 3425
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3426
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3427
			l2cap_check_srej_gap(chan, tx_seq);
3428 3429 3430 3431

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

3432
			if (list_empty(&chan->srej_l)) {
3433
				chan->buffer_seq = chan->buffer_seq_srej;
3434 3435
				chan->conn_state &= ~L2CAP_CONN_SREJ_SENT;
				l2cap_send_ack(chan);
3436
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3437 3438 3439
			}
		} else {
			struct srej_list *l;
3440 3441

			/* duplicated tx_seq */
3442
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3443
				goto drop;
3444

3445
			list_for_each_entry(l, &chan->srej_l, list) {
3446
				if (l->tx_seq == tx_seq) {
3447
					l2cap_resend_srejframe(chan, tx_seq);
3448 3449 3450
					return 0;
				}
			}
3451
			l2cap_send_srejframe(chan, tx_seq);
3452 3453
		}
	} else {
3454
		expected_tx_seq_offset =
3455
			(chan->expected_tx_seq - chan->buffer_seq) % 64;
3456 3457 3458 3459 3460 3461 3462
		if (expected_tx_seq_offset < 0)
			expected_tx_seq_offset += 64;

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

3463
		chan->conn_state |= L2CAP_CONN_SREJ_SENT;
3464

3465
		BT_DBG("chan %p, Enter SREJ", chan);
3466

3467
		INIT_LIST_HEAD(&chan->srej_l);
3468
		chan->buffer_seq_srej = chan->buffer_seq;
3469

3470 3471
		__skb_queue_head_init(&chan->srej_q);
		__skb_queue_head_init(&chan->busy_q);
3472
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3473

3474
		chan->conn_state |= L2CAP_CONN_SEND_PBIT;
3475

3476
		l2cap_send_srejframe(chan, tx_seq);
3477

3478
		del_timer(&chan->ack_timer);
3479
	}
3480 3481
	return 0;

3482
expected:
3483
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3484

3485
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3486 3487
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3488
		__skb_queue_tail(&chan->srej_q, skb);
3489 3490 3491
		return 0;
	}

3492
	err = l2cap_push_rx_skb(chan, skb, rx_control);
3493 3494 3495
	if (err < 0)
		return 0;

3496
	if (rx_control & L2CAP_CTRL_FINAL) {
3497 3498
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3499
		else
3500
			l2cap_retransmit_frames(chan);
3501 3502
	}

3503 3504
	__mod_ack_timer();

3505 3506
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3507
		l2cap_send_ack(chan);
3508

3509
	return 0;
3510 3511 3512 3513

drop:
	kfree_skb(skb);
	return 0;
3514 3515
}

3516
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3517
{
3518
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3519 3520
						rx_control);

3521 3522
	chan->expected_ack_seq = __get_reqseq(rx_control);
	l2cap_drop_acked_frames(chan);
3523

3524
	if (rx_control & L2CAP_CTRL_POLL) {
3525 3526 3527
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
			if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3528
					(chan->unacked_frames > 0))
3529 3530
				__mod_retrans_timer();

3531 3532
			chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
			l2cap_send_srejtail(chan);
3533
		} else {
3534
			l2cap_send_i_or_rr_or_rnr(chan);
3535
		}
3536

3537
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3538
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3539

3540 3541
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3542
		else
3543
			l2cap_retransmit_frames(chan);
3544

3545
	} else {
3546
		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3547
				(chan->unacked_frames > 0))
3548
			__mod_retrans_timer();
3549

3550 3551 3552
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT)
			l2cap_send_ack(chan);
3553
		else
3554
			l2cap_ertm_send(chan);
3555 3556
	}
}
3557

3558
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3559 3560
{
	u8 tx_seq = __get_reqseq(rx_control);
3561

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

3564
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3565

3566 3567
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3568 3569

	if (rx_control & L2CAP_CTRL_FINAL) {
3570 3571
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3572
		else
3573
			l2cap_retransmit_frames(chan);
3574
	} else {
3575
		l2cap_retransmit_frames(chan);
3576

3577 3578
		if (chan->conn_state & L2CAP_CONN_WAIT_F)
			chan->conn_state |= L2CAP_CONN_REJ_ACT;
3579 3580
	}
}
3581
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3582 3583
{
	u8 tx_seq = __get_reqseq(rx_control);
3584

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

3587
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3588

3589
	if (rx_control & L2CAP_CTRL_POLL) {
3590 3591
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3592

3593 3594
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		l2cap_retransmit_one_frame(chan, tx_seq);
3595

3596
		l2cap_ertm_send(chan);
3597

3598
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3599
			chan->srej_save_reqseq = tx_seq;
3600
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3601
		}
3602
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3603
		if ((chan->conn_state & L2CAP_CONN_SREJ_ACT) &&
3604
				chan->srej_save_reqseq == tx_seq)
3605
			chan->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3606
		else
3607
			l2cap_retransmit_one_frame(chan, tx_seq);
3608
	} else {
3609 3610
		l2cap_retransmit_one_frame(chan, tx_seq);
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3611
			chan->srej_save_reqseq = tx_seq;
3612
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3613
		}
3614 3615 3616
	}
}

3617
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3618 3619 3620
{
	u8 tx_seq = __get_reqseq(rx_control);

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

3623
	chan->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3624 3625
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3626

3627
	if (rx_control & L2CAP_CTRL_POLL)
3628
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
3629

3630
	if (!(chan->conn_state & L2CAP_CONN_SREJ_SENT)) {
3631
		del_timer(&chan->retrans_timer);
3632
		if (rx_control & L2CAP_CTRL_POLL)
3633
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3634
		return;
3635
	}
3636 3637

	if (rx_control & L2CAP_CTRL_POLL)
3638
		l2cap_send_srejtail(chan);
3639
	else
3640
		l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3641 3642
}

3643
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3644
{
3645
	BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3646

3647
	if (L2CAP_CTRL_FINAL & rx_control &&
3648
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3649
		del_timer(&chan->monitor_timer);
3650
		if (chan->unacked_frames > 0)
3651
			__mod_retrans_timer();
3652
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3653 3654 3655 3656
	}

	switch (rx_control & L2CAP_CTRL_SUPERVISE) {
	case L2CAP_SUPER_RCV_READY:
3657
		l2cap_data_channel_rrframe(chan, rx_control);
3658 3659
		break;

3660
	case L2CAP_SUPER_REJECT:
3661
		l2cap_data_channel_rejframe(chan, rx_control);
3662
		break;
3663

3664
	case L2CAP_SUPER_SELECT_REJECT:
3665
		l2cap_data_channel_srejframe(chan, rx_control);
3666 3667 3668
		break;

	case L2CAP_SUPER_RCV_NOT_READY:
3669
		l2cap_data_channel_rnrframe(chan, rx_control);
3670 3671 3672
		break;
	}

3673
	kfree_skb(skb);
3674 3675 3676
	return 0;
}

3677 3678
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3679
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692
	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.
	 */
3693
	if (l2cap_check_fcs(chan, skb))
3694 3695 3696 3697 3698
		goto drop;

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

3699
	if (chan->fcs == L2CAP_FCS_CRC16)
3700 3701
		len -= 2;

3702
	if (len > chan->mps) {
3703
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3704 3705 3706 3707
		goto drop;
	}

	req_seq = __get_reqseq(control);
3708
	req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3709 3710 3711 3712
	if (req_seq_offset < 0)
		req_seq_offset += 64;

	next_tx_seq_offset =
3713
		(chan->next_tx_seq - chan->expected_ack_seq) % 64;
3714 3715 3716 3717 3718
	if (next_tx_seq_offset < 0)
		next_tx_seq_offset += 64;

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3719
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3720 3721 3722 3723 3724
		goto drop;
	}

	if (__is_iframe(control)) {
		if (len < 0) {
3725
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3726 3727 3728
			goto drop;
		}

3729
		l2cap_data_channel_iframe(chan, control, skb);
3730 3731 3732
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3733
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3734 3735 3736
			goto drop;
		}

3737
		l2cap_data_channel_sframe(chan, control, skb);
3738 3739 3740 3741 3742 3743 3744 3745 3746
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3747 3748
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3749
	struct l2cap_chan *chan;
3750
	struct sock *sk = NULL;
3751
	u16 control;
3752 3753
	u8 tx_seq;
	int len;
L
Linus Torvalds 已提交
3754

3755
	chan = l2cap_get_chan_by_scid(conn, cid);
3756
	if (!chan) {
L
Linus Torvalds 已提交
3757 3758 3759 3760
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3761
	sk = chan->sk;
3762

3763
	BT_DBG("chan %p, len %d", chan, skb->len);
L
Linus Torvalds 已提交
3764 3765 3766 3767

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

3768
	switch (chan->mode) {
3769 3770 3771 3772 3773
	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 已提交
3774

3775
		if (chan->imtu < skb->len)
3776
			goto drop;
L
Linus Torvalds 已提交
3777

3778 3779 3780 3781 3782
		if (!sock_queue_rcv_skb(sk, skb))
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3783 3784
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3785
		} else {
3786
			if (sk_add_backlog(sk, skb))
3787 3788
				goto drop;
		}
3789

3790
		goto done;
3791

3792 3793 3794 3795 3796
	case L2CAP_MODE_STREAMING:
		control = get_unaligned_le16(skb->data);
		skb_pull(skb, 2);
		len = skb->len;

3797
		if (l2cap_check_fcs(chan, skb))
3798 3799
			goto drop;

3800 3801 3802
		if (__is_sar_start(control))
			len -= 2;

3803
		if (chan->fcs == L2CAP_FCS_CRC16)
3804 3805
			len -= 2;

3806
		if (len > chan->mps || len < 0 || __is_sframe(control))
3807 3808 3809 3810
			goto drop;

		tx_seq = __get_txseq(control);

3811 3812
		if (chan->expected_tx_seq == tx_seq)
			chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3813
		else
3814
			chan->expected_tx_seq = (tx_seq + 1) % 64;
3815

3816
		l2cap_streaming_reassembly_sdu(chan, skb, control);
3817 3818 3819

		goto done;

3820
	default:
3821
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3822 3823
		break;
	}
L
Linus Torvalds 已提交
3824 3825 3826 3827 3828

drop:
	kfree_skb(skb);

done:
3829 3830 3831
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3832 3833 3834
	return 0;
}

3835
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3836
{
3837
	struct sock *sk = NULL;
3838
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3839

3840 3841
	chan = l2cap_global_chan_by_psm(0, psm, conn->src);
	if (!chan)
L
Linus Torvalds 已提交
3842 3843
		goto drop;

3844 3845
	sk = chan->sk;

3846 3847
	bh_lock_sock(sk);

L
Linus Torvalds 已提交
3848 3849 3850 3851 3852
	BT_DBG("sk %p, len %d", sk, skb->len);

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

3853
	if (l2cap_pi(sk)->chan->imtu < skb->len)
L
Linus Torvalds 已提交
3854 3855 3856 3857 3858 3859 3860 3861 3862
		goto drop;

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

drop:
	kfree_skb(skb);

done:
3863 3864
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3865 3866 3867
	return 0;
}

3868 3869
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
3870
	struct sock *sk = NULL;
3871
	struct l2cap_chan *chan;
3872

3873 3874
	chan = l2cap_global_chan_by_scid(0, cid, conn->src);
	if (!chan)
3875 3876
		goto drop;

3877 3878
	sk = chan->sk;

3879 3880 3881 3882 3883 3884 3885
	bh_lock_sock(sk);

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

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

3886
	if (l2cap_pi(sk)->chan->imtu < skb->len)
3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900
		goto drop;

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

drop:
	kfree_skb(skb);

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

L
Linus Torvalds 已提交
3901 3902 3903
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
3904 3905
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
3906 3907 3908 3909 3910

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

3911 3912 3913 3914 3915
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
3916 3917 3918
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
3919
	case L2CAP_CID_LE_SIGNALING:
3920
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
3921 3922 3923
		l2cap_sig_channel(conn, skb);
		break;

3924
	case L2CAP_CID_CONN_LESS:
3925
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
3926 3927 3928 3929
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

3930 3931 3932 3933
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

L
Linus Torvalds 已提交
3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944
	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;
3945
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
3946 3947

	if (type != ACL_LINK)
3948
		return -EINVAL;
L
Linus Torvalds 已提交
3949 3950 3951 3952

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

	/* Find listening sockets and check their link_mode */
3953 3954 3955
	read_lock(&chan_list_lock);
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
3956

L
Linus Torvalds 已提交
3957 3958 3959 3960
		if (sk->sk_state != BT_LISTEN)
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3961
			lm1 |= HCI_LM_ACCEPT;
3962
			if (c->role_switch)
3963
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
3964
			exact++;
3965 3966
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
3967
			if (c->role_switch)
3968 3969
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
3970
	}
3971
	read_unlock(&chan_list_lock);
L
Linus Torvalds 已提交
3972 3973 3974 3975 3976 3977

	return exact ? lm1 : lm2;
}

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

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

3982
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3983
		return -EINVAL;
L
Linus Torvalds 已提交
3984 3985 3986 3987 3988

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
3989
	} else
L
Linus Torvalds 已提交
3990 3991 3992 3993 3994
		l2cap_conn_del(hcon, bt_err(status));

	return 0;
}

3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007
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 已提交
4008 4009 4010
{
	BT_DBG("hcon %p reason %d", hcon, reason);

4011
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
4012
		return -EINVAL;
L
Linus Torvalds 已提交
4013 4014

	l2cap_conn_del(hcon, bt_err(reason));
4015

L
Linus Torvalds 已提交
4016 4017 4018
	return 0;
}

4019
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
4020
{
4021 4022
	struct sock *sk = chan->sk;

4023
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM)
4024 4025
		return;

4026
	if (encrypt == 0x00) {
4027
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
4028 4029
			l2cap_sock_clear_timer(sk);
			l2cap_sock_set_timer(sk, HZ * 5);
4030
		} else if (chan->sec_level == BT_SECURITY_HIGH)
4031
			__l2cap_chan_close(chan, ECONNREFUSED);
4032
	} else {
4033
		if (chan->sec_level == BT_SECURITY_MEDIUM)
4034 4035 4036 4037
			l2cap_sock_clear_timer(sk);
	}
}

4038
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
4039
{
4040
	struct l2cap_conn *conn = hcon->l2cap_data;
4041
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
4042

4043
	if (!conn)
L
Linus Torvalds 已提交
4044
		return 0;
4045

L
Linus Torvalds 已提交
4046 4047
	BT_DBG("conn %p", conn);

4048
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
4049

4050
	list_for_each_entry(chan, &conn->chan_l, list) {
4051
		struct sock *sk = chan->sk;
4052

L
Linus Torvalds 已提交
4053 4054
		bh_lock_sock(sk);

4055
		if (chan->conf_state & L2CAP_CONF_CONNECT_PEND) {
4056 4057 4058 4059
			bh_unlock_sock(sk);
			continue;
		}

4060
		if (!status && (sk->sk_state == BT_CONNECTED ||
4061
						sk->sk_state == BT_CONFIG)) {
4062
			l2cap_check_encryption(chan, encrypt);
4063 4064 4065 4066
			bh_unlock_sock(sk);
			continue;
		}

4067 4068 4069
		if (sk->sk_state == BT_CONNECT) {
			if (!status) {
				struct l2cap_conn_req req;
4070 4071
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
4072

4073
				chan->ident = l2cap_get_ident(conn);
4074
				chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
4075

4076
				l2cap_send_cmd(conn, chan->ident,
4077 4078 4079 4080 4081 4082 4083 4084
					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 已提交
4085

4086 4087 4088 4089 4090 4091 4092 4093 4094
			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;
			}

4095 4096
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
4097
			rsp.result = cpu_to_le16(result);
4098
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
4099 4100
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
4101
		}
L
Linus Torvalds 已提交
4102 4103 4104 4105

		bh_unlock_sock(sk);
	}

4106
	read_unlock(&conn->chan_lock);
4107

L
Linus Torvalds 已提交
4108 4109 4110 4111 4112 4113 4114
	return 0;
}

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

4115 4116 4117 4118
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
4119 4120 4121 4122
		goto drop;

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

4123
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
4124
		struct l2cap_hdr *hdr;
4125
		struct l2cap_chan *chan;
4126
		u16 cid;
L
Linus Torvalds 已提交
4127 4128 4129 4130 4131 4132 4133 4134 4135 4136
		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);
		}

4137 4138
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
4139 4140 4141 4142 4143 4144 4145
			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;
4146
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162

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

4163
		chan = l2cap_get_chan_by_scid(conn, cid);
4164

4165 4166
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4167

4168
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4169 4170
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4171
							chan->imtu);
4172 4173 4174 4175
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4176
			bh_unlock_sock(sk);
4177
		}
4178

L
Linus Torvalds 已提交
4179
		/* Allocate skb for the complete frame (with header) */
4180 4181
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4182 4183
			goto drop;

4184
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4185
								skb->len);
L
Linus Torvalds 已提交
4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205
		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;
		}

4206
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4207
								skb->len);
L
Linus Torvalds 已提交
4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221
		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;
}

4222
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4223
{
4224
	struct l2cap_chan *c;
L
Linus Torvalds 已提交
4225

4226
	read_lock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4227

4228 4229
	list_for_each_entry(c, &chan_list, global_l) {
		struct sock *sk = c->sk;
4230

4231
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4232 4233
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4234 4235 4236
					sk->sk_state, __le16_to_cpu(c->psm),
					c->scid, c->dcid, c->imtu, c->omtu,
					c->sec_level, c->mode);
4237
	}
L
Linus Torvalds 已提交
4238

4239
	read_unlock_bh(&chan_list_lock);
L
Linus Torvalds 已提交
4240

4241
	return 0;
L
Linus Torvalds 已提交
4242 4243
}

4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256
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 已提交
4257 4258 4259 4260 4261 4262 4263

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,
4264
	.disconn_cfm	= l2cap_disconn_cfm,
4265
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4266 4267 4268
	.recv_acldata	= l2cap_recv_acldata
};

4269
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4270 4271
{
	int err;
4272

4273
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4274 4275 4276
	if (err < 0)
		return err;

4277
	_busy_wq = create_singlethread_workqueue("l2cap");
4278
	if (!_busy_wq) {
4279
		err = -ENOMEM;
L
Linus Torvalds 已提交
4280 4281 4282 4283 4284 4285 4286 4287 4288 4289
		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;
	}

4290 4291 4292 4293 4294 4295
	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 已提交
4296 4297 4298 4299

	return 0;

error:
4300
	destroy_workqueue(_busy_wq);
4301
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4302 4303 4304
	return err;
}

4305
void l2cap_exit(void)
L
Linus Torvalds 已提交
4306
{
4307
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4308

4309 4310 4311
	flush_workqueue(_busy_wq);
	destroy_workqueue(_busy_wq);

L
Linus Torvalds 已提交
4312 4313 4314
	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4315
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4316 4317
}

4318 4319
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");