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

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

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

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

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

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

#include <linux/module.h>

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

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

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

58
int disable_ertm;
59

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

63 64
static struct workqueue_struct *_busy_wq;

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

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

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

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

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

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

88 89
}

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

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

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

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

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

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

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

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

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

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

	return 0;
}

150
struct l2cap_chan *l2cap_chan_alloc(struct sock *sk)
151 152 153 154 155 156 157 158 159 160 161 162
{
	struct l2cap_chan *chan;

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

	chan->sk = sk;

	return chan;
}

163 164 165 166 167
void l2cap_chan_free(struct l2cap_chan *chan)
{
	kfree(chan);
}

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

172
	BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
173
			chan->psm, chan->dcid);
174

175 176
	conn->disc_reason = 0x13;

177
	chan->conn = conn;
178

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

202 203 204
	sock_hold(sk);

	list_add(&chan->list, &conn->chan_l);
205 206
}

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

	l2cap_sock_clear_timer(sk);

217
	BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
218

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

226
		chan->conn = NULL;
227 228 229
		hci_conn_put(conn->hcon);
	}

230
	sk->sk_state = BT_CLOSED;
231 232 233 234 235 236 237 238 239 240
	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);
241

242 243
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE &&
			chan->conf_state & L2CAP_CONF_INPUT_DONE))
244
		return;
245

246
	skb_queue_purge(&chan->tx_q);
247

248
	if (chan->mode == L2CAP_MODE_ERTM) {
249 250
		struct srej_list *l, *tmp;

251 252 253
		del_timer(&chan->retrans_timer);
		del_timer(&chan->monitor_timer);
		del_timer(&chan->ack_timer);
254

255 256
		skb_queue_purge(&chan->srej_q);
		skb_queue_purge(&chan->busy_q);
257

258
		list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
259 260 261 262
			list_del(&l->list);
			kfree(l);
		}
	}
263 264
}

265
static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
266
{
267 268
	struct sock *sk = chan->sk;

269
	if (sk->sk_type == SOCK_RAW) {
270
		switch (chan->sec_level) {
271 272 273 274 275 276 277
		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;
		}
278
	} else if (chan->psm == cpu_to_le16(0x0001)) {
279 280
		if (chan->sec_level == BT_SECURITY_LOW)
			chan->sec_level = BT_SECURITY_SDP;
281

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

/* Service level security */
299
static inline int l2cap_check_security(struct l2cap_chan *chan)
300
{
301
	struct l2cap_conn *conn = chan->conn;
302 303
	__u8 auth_type;

304
	auth_type = l2cap_get_auth_type(chan);
305

306
	return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
307 308
}

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

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

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

	if (!skb)
339
		return;
340

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

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

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

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

362
	if (chan->fcs == L2CAP_FCS_CRC16)
363
		hlen += 2;
364

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

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

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

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

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

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

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

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

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

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

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

412
	l2cap_send_sframe(chan, control);
413 414
}

415
static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
416
{
417
	return !(chan->conf_state & L2CAP_CONF_CONNECT_PEND);
418 419
}

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

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

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

434
			chan->ident = l2cap_get_ident(conn);
435
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
436

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

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

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

476 477 478
	if (!conn)
		return;

479 480
	sk = chan->sk;

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

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

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

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

	BT_DBG("conn %p", conn);

503
	read_lock(&conn->chan_lock);
504

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

508 509
		bh_lock_sock(sk);

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

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

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

525
			if (!l2cap_mode_supported(chan->mode,
526
					conn->feat_mask)
527
					&& chan->conf_state &
528
					L2CAP_CONF_STATE2_DEVICE) {
529 530 531 532 533
				/* __l2cap_sock_close() calls list_del(chan)
				 * so release the lock */
				read_unlock_bh(&conn->chan_lock);
				 __l2cap_sock_close(sk, ECONNRESET);
				read_lock_bh(&conn->chan_lock);
534 535
				bh_unlock_sock(sk);
				continue;
536
			}
537

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

541
			chan->ident = l2cap_get_ident(conn);
542
			chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
543

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

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

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

570 571
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
572

573
			if (chan->conf_state & L2CAP_CONF_REQ_SENT ||
574 575 576 577 578
					rsp.result != L2CAP_CR_SUCCESS) {
				bh_unlock_sock(sk);
				continue;
			}

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

		bh_unlock_sock(sk);
	}

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

591 592 593 594 595
/* Find socket with cid and source bdaddr.
 * Returns closest match, locked.
 */
static struct sock *l2cap_get_sock_by_scid(int state, __le16 cid, bdaddr_t *src)
{
596
	struct sock *sk = NULL, *sk1 = NULL;
597 598 599 600 601
	struct hlist_node *node;

	read_lock(&l2cap_sk_list.lock);

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

604 605 606
		if (state && sk->sk_state != state)
			continue;

607
		if (chan->scid == cid) {
608 609 610 611 612 613 614 615 616
			/* Exact match. */
			if (!bacmp(&bt_sk(sk)->src, src))
				break;

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

618 619
	read_unlock(&l2cap_sk_list.lock);

620
	return node ? sk : sk1;
621 622 623 624
}

static void l2cap_le_conn_ready(struct l2cap_conn *conn)
{
625
	struct sock *parent, *sk;
626
	struct l2cap_chan *chan;
627 628 629 630 631 632 633 634 635

	BT_DBG("");

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

636 637
	bh_lock_sock(parent);

638 639 640 641 642 643 644 645 646 647
	/* 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;

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

654 655
	l2cap_pi(sk)->chan = chan;

656
	write_lock_bh(&conn->chan_lock);
657 658 659 660

	hci_conn_hold(conn->hcon);

	l2cap_sock_init(sk, parent);
661

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

665 666
	bt_accept_enqueue(parent, sk);

667 668
	__l2cap_chan_add(conn, chan);

669 670 671 672 673
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

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

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

clean:
	bh_unlock_sock(parent);
}

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

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

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

689
	read_lock(&conn->chan_lock);
690

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

694
		bh_lock_sock(sk);
695

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

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

710
		bh_unlock_sock(sk);
711
	}
712

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

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

	BT_DBG("conn %p", conn);

723
	read_lock(&conn->chan_lock);
724

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

728
		if (chan->force_reliable)
729 730 731
			sk->sk_err = err;
	}

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

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

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

742 743 744
	l2cap_conn_start(conn);
}

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

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

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

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

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

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

769 770
	conn->feat_mask = 0;

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

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

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

780 781
	conn->disc_reason = 0x13;

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

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

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

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

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

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

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

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

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

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

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

831 832
	read_lock(&l2cap_sk_list.lock);

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

L
Linus Torvalds 已提交
836 837 838
		if (state && sk->sk_state != state)
			continue;

839
		if (chan->psm == psm) {
L
Linus Torvalds 已提交
840 841 842 843 844 845 846 847 848 849 850
			/* Exact match. */
			if (!bacmp(&bt_sk(sk)->src, src))
				break;

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

	read_unlock(&l2cap_sk_list.lock);
851 852

	return node ? sk : sk1;
L
Linus Torvalds 已提交
853 854
}

855
int l2cap_chan_connect(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
856
{
857
	struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
858 859 860 861 862
	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;
863
	__u8 auth_type;
864
	int err;
L
Linus Torvalds 已提交
865

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

869 870
	hdev = hci_get_route(dst, src);
	if (!hdev)
L
Linus Torvalds 已提交
871 872 873 874
		return -EHOSTUNREACH;

	hci_dev_lock_bh(hdev);

875
	auth_type = l2cap_get_auth_type(chan);
876

877
	if (chan->dcid == L2CAP_CID_LE_DATA)
878
		hcon = hci_connect(hdev, LE_LINK, dst,
879
					chan->sec_level, auth_type);
880 881
	else
		hcon = hci_connect(hdev, ACL_LINK, dst,
882
					chan->sec_level, auth_type);
883

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

	conn = l2cap_conn_add(hcon, 0);
	if (!conn) {
		hci_conn_put(hcon);
892
		err = -ENOMEM;
L
Linus Torvalds 已提交
893 894 895 896 897 898
		goto done;
	}

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

899 900
	l2cap_chan_add(conn, chan);

L
Linus Torvalds 已提交
901 902 903 904
	sk->sk_state = BT_CONNECT;
	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

	if (hcon->state == BT_CONNECTED) {
905 906
		if (sk->sk_type != SOCK_SEQPACKET &&
				sk->sk_type != SOCK_STREAM) {
L
Linus Torvalds 已提交
907
			l2cap_sock_clear_timer(sk);
908
			if (l2cap_check_security(chan))
909
				sk->sk_state = BT_CONNECTED;
910
		} else
911
			l2cap_do_start(chan);
L
Linus Torvalds 已提交
912 913
	}

914 915
	err = 0;

L
Linus Torvalds 已提交
916 917 918 919 920 921
done:
	hci_dev_unlock_bh(hdev);
	hci_dev_put(hdev);
	return err;
}

922
int __l2cap_wait_ack(struct sock *sk)
923
{
924
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
925 926 927 928
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

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

954 955
static void l2cap_monitor_timeout(unsigned long arg)
{
956 957
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
958

959
	BT_DBG("chan %p", chan);
960

961
	bh_lock_sock(sk);
962
	if (chan->retry_count >= chan->remote_max_tx) {
963
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
964
		bh_unlock_sock(sk);
965 966 967
		return;
	}

968
	chan->retry_count++;
969 970
	__mod_monitor_timer();

971
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
972
	bh_unlock_sock(sk);
973 974 975 976
}

static void l2cap_retrans_timeout(unsigned long arg)
{
977 978
	struct l2cap_chan *chan = (void *) arg;
	struct sock *sk = chan->sk;
979

980
	BT_DBG("chan %p", chan);
981

982
	bh_lock_sock(sk);
983
	chan->retry_count = 1;
984 985
	__mod_monitor_timer();

986
	chan->conn_state |= L2CAP_CONN_WAIT_F;
987

988
	l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_POLL);
989
	bh_unlock_sock(sk);
990 991
}

992
static void l2cap_drop_acked_frames(struct l2cap_chan *chan)
L
Linus Torvalds 已提交
993
{
994
	struct sk_buff *skb;
L
Linus Torvalds 已提交
995

996
	while ((skb = skb_peek(&chan->tx_q)) &&
997
			chan->unacked_frames) {
998
		if (bt_cb(skb)->tx_seq == chan->expected_ack_seq)
999
			break;
L
Linus Torvalds 已提交
1000

1001
		skb = skb_dequeue(&chan->tx_q);
1002
		kfree_skb(skb);
L
Linus Torvalds 已提交
1003

1004
		chan->unacked_frames--;
1005
	}
L
Linus Torvalds 已提交
1006

1007
	if (!chan->unacked_frames)
1008
		del_timer(&chan->retrans_timer);
1009
}
L
Linus Torvalds 已提交
1010

1011
void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
1012
{
1013
	struct hci_conn *hcon = chan->conn->hcon;
1014
	u16 flags;
1015

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

1018
	if (!chan->flushable && lmp_no_flush_capable(hcon->hdev))
1019 1020 1021 1022 1023
		flags = ACL_START_NO_FLUSH;
	else
		flags = ACL_START;

	hci_send_acl(hcon, skb, flags);
1024 1025
}

1026
void l2cap_streaming_send(struct l2cap_chan *chan)
1027
{
1028
	struct sk_buff *skb;
1029
	u16 control, fcs;
1030

1031
	while ((skb = skb_dequeue(&chan->tx_q))) {
1032
		control = get_unaligned_le16(skb->data + L2CAP_HDR_SIZE);
1033
		control |= chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT;
1034
		put_unaligned_le16(control, skb->data + L2CAP_HDR_SIZE);
1035

1036
		if (chan->fcs == L2CAP_FCS_CRC16) {
1037 1038
			fcs = crc16(0, (u8 *)skb->data, skb->len - 2);
			put_unaligned_le16(fcs, skb->data + skb->len - 2);
1039 1040
		}

1041
		l2cap_do_send(chan, skb);
1042

1043
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1044 1045 1046
	}
}

1047
static void l2cap_retransmit_one_frame(struct l2cap_chan *chan, u8 tx_seq)
1048 1049 1050 1051
{
	struct sk_buff *skb, *tx_skb;
	u16 control, fcs;

1052
	skb = skb_peek(&chan->tx_q);
1053 1054
	if (!skb)
		return;
1055

1056 1057
	do {
		if (bt_cb(skb)->tx_seq == tx_seq)
1058 1059
			break;

1060
		if (skb_queue_is_last(&chan->tx_q, skb))
1061
			return;
1062

1063
	} while ((skb = skb_queue_next(&chan->tx_q, skb)));
1064

1065 1066
	if (chan->remote_max_tx &&
			bt_cb(skb)->retries == chan->remote_max_tx) {
1067
		l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1068 1069 1070 1071 1072 1073
		return;
	}

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

1076
	if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1077
		control |= L2CAP_CTRL_FINAL;
1078
		chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1079
	}
1080

1081
	control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
1082
			| (tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1083

1084 1085
	put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1086
	if (chan->fcs == L2CAP_FCS_CRC16) {
1087 1088 1089 1090
		fcs = crc16(0, (u8 *)tx_skb->data, tx_skb->len - 2);
		put_unaligned_le16(fcs, tx_skb->data + tx_skb->len - 2);
	}

1091
	l2cap_do_send(chan, tx_skb);
1092 1093
}

1094
int l2cap_ertm_send(struct l2cap_chan *chan)
1095 1096
{
	struct sk_buff *skb, *tx_skb;
1097
	struct sock *sk = chan->sk;
1098
	u16 control, fcs;
1099
	int nsent = 0;
1100

1101 1102
	if (sk->sk_state != BT_CONNECTED)
		return -ENOTCONN;
1103

1104
	while ((skb = chan->tx_send_head) && (!l2cap_tx_window_full(chan))) {
1105

1106 1107
		if (chan->remote_max_tx &&
				bt_cb(skb)->retries == chan->remote_max_tx) {
1108
			l2cap_send_disconn_req(chan->conn, chan, ECONNABORTED);
1109 1110 1111
			break;
		}

1112 1113
		tx_skb = skb_clone(skb, GFP_ATOMIC);

1114 1115
		bt_cb(skb)->retries++;

1116
		control = get_unaligned_le16(tx_skb->data + L2CAP_HDR_SIZE);
1117 1118
		control &= L2CAP_CTRL_SAR;

1119
		if (chan->conn_state & L2CAP_CONN_SEND_FBIT) {
1120
			control |= L2CAP_CTRL_FINAL;
1121
			chan->conn_state &= ~L2CAP_CONN_SEND_FBIT;
1122
		}
1123 1124
		control |= (chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT)
				| (chan->next_tx_seq << L2CAP_CTRL_TXSEQ_SHIFT);
1125 1126
		put_unaligned_le16(control, tx_skb->data + L2CAP_HDR_SIZE);

1127

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

1133
		l2cap_do_send(chan, tx_skb);
1134

1135
		__mod_retrans_timer();
1136

1137 1138
		bt_cb(skb)->tx_seq = chan->next_tx_seq;
		chan->next_tx_seq = (chan->next_tx_seq + 1) % 64;
1139

1140
		if (bt_cb(skb)->retries == 1)
1141
			chan->unacked_frames++;
1142

1143
		chan->frames_sent++;
1144

1145 1146
		if (skb_queue_is_last(&chan->tx_q, skb))
			chan->tx_send_head = NULL;
1147
		else
1148
			chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
1149 1150

		nsent++;
1151 1152
	}

1153 1154 1155
	return nsent;
}

1156
static int l2cap_retransmit_frames(struct l2cap_chan *chan)
1157 1158 1159
{
	int ret;

1160 1161
	if (!skb_queue_empty(&chan->tx_q))
		chan->tx_send_head = chan->tx_q.next;
1162

1163
	chan->next_tx_seq = chan->expected_ack_seq;
1164
	ret = l2cap_ertm_send(chan);
1165 1166 1167
	return ret;
}

1168
static void l2cap_send_ack(struct l2cap_chan *chan)
1169 1170 1171
{
	u16 control = 0;

1172
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
1173

1174
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
1175
		control |= L2CAP_SUPER_RCV_NOT_READY;
1176 1177
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
		l2cap_send_sframe(chan, control);
1178
		return;
1179
	}
1180

1181
	if (l2cap_ertm_send(chan) > 0)
1182 1183 1184
		return;

	control |= L2CAP_SUPER_RCV_READY;
1185
	l2cap_send_sframe(chan, control);
1186 1187
}

1188
static void l2cap_send_srejtail(struct l2cap_chan *chan)
1189 1190 1191 1192 1193 1194 1195
{
	struct srej_list *tail;
	u16 control;

	control = L2CAP_SUPER_SELECT_REJECT;
	control |= L2CAP_CTRL_FINAL;

1196
	tail = list_entry((&chan->srej_l)->prev, struct srej_list, list);
1197 1198
	control |= tail->tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;

1199
	l2cap_send_sframe(chan, control);
1200 1201
}

1202 1203
static inline int l2cap_skbuff_fromiovec(struct sock *sk, struct msghdr *msg, int len, int count, struct sk_buff *skb)
{
1204
	struct l2cap_conn *conn = l2cap_pi(sk)->chan->conn;
1205 1206
	struct sk_buff **frag;
	int err, sent = 0;
L
Linus Torvalds 已提交
1207

1208
	if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
1209
		return -EFAULT;
L
Linus Torvalds 已提交
1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220

	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)
1221
			return err;
1222 1223
		if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
			return -EFAULT;
L
Linus Torvalds 已提交
1224 1225 1226 1227 1228 1229 1230 1231

		sent += count;
		len  -= count;

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

	return sent;
1232
}
L
Linus Torvalds 已提交
1233

1234
struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1235
{
1236
	struct sock *sk = chan->sk;
1237
	struct l2cap_conn *conn = chan->conn;
1238 1239 1240 1241 1242 1243 1244 1245 1246 1247
	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)
1248
		return ERR_PTR(err);
1249 1250 1251

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1252
	lh->cid = cpu_to_le16(chan->dcid);
1253
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
1254
	put_unaligned_le16(chan->psm, skb_put(skb, 2));
1255 1256 1257 1258 1259 1260 1261 1262 1263

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

1264
struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1265
{
1266
	struct sock *sk = chan->sk;
1267
	struct l2cap_conn *conn = chan->conn;
1268 1269 1270 1271 1272 1273 1274 1275 1276 1277
	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)
1278
		return ERR_PTR(err);
1279 1280 1281

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1282
	lh->cid = cpu_to_le16(chan->dcid);
1283 1284 1285 1286 1287 1288 1289 1290 1291 1292
	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;
}

1293
struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len, u16 control, u16 sdulen)
1294
{
1295
	struct sock *sk = chan->sk;
1296
	struct l2cap_conn *conn = chan->conn;
1297 1298 1299 1300 1301 1302
	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);

1303 1304 1305
	if (!conn)
		return ERR_PTR(-ENOTCONN);

1306 1307 1308
	if (sdulen)
		hlen += 2;

1309
	if (chan->fcs == L2CAP_FCS_CRC16)
1310 1311
		hlen += 2;

1312 1313 1314 1315
	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)
1316
		return ERR_PTR(err);
1317 1318 1319

	/* Create L2CAP header */
	lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
1320
	lh->cid = cpu_to_le16(chan->dcid);
1321 1322
	lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
	put_unaligned_le16(control, skb_put(skb, 2));
1323 1324
	if (sdulen)
		put_unaligned_le16(sdulen, skb_put(skb, 2));
1325 1326 1327 1328 1329 1330

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

1332
	if (chan->fcs == L2CAP_FCS_CRC16)
1333 1334
		put_unaligned_le16(0, skb_put(skb, 2));

1335
	bt_cb(skb)->retries = 0;
1336
	return skb;
L
Linus Torvalds 已提交
1337 1338
}

1339
int l2cap_sar_segment_sdu(struct l2cap_chan *chan, struct msghdr *msg, size_t len)
1340 1341 1342 1343 1344 1345
{
	struct sk_buff *skb;
	struct sk_buff_head sar_queue;
	u16 control;
	size_t size = 0;

1346
	skb_queue_head_init(&sar_queue);
1347
	control = L2CAP_SDU_START;
1348
	skb = l2cap_create_iframe_pdu(chan, msg, chan->remote_mps, control, len);
1349 1350 1351 1352
	if (IS_ERR(skb))
		return PTR_ERR(skb);

	__skb_queue_tail(&sar_queue, skb);
1353 1354
	len -= chan->remote_mps;
	size += chan->remote_mps;
1355 1356 1357 1358

	while (len > 0) {
		size_t buflen;

1359
		if (len > chan->remote_mps) {
1360
			control = L2CAP_SDU_CONTINUE;
1361
			buflen = chan->remote_mps;
1362
		} else {
1363
			control = L2CAP_SDU_END;
1364 1365 1366
			buflen = len;
		}

1367
		skb = l2cap_create_iframe_pdu(chan, msg, buflen, control, 0);
1368 1369 1370 1371 1372 1373 1374 1375 1376
		if (IS_ERR(skb)) {
			skb_queue_purge(&sar_queue);
			return PTR_ERR(skb);
		}

		__skb_queue_tail(&sar_queue, skb);
		len -= buflen;
		size += buflen;
	}
1377 1378 1379
	skb_queue_splice_tail(&sar_queue, &chan->tx_q);
	if (chan->tx_send_head == NULL)
		chan->tx_send_head = sar_queue.next;
1380 1381 1382 1383

	return size;
}

L
Linus Torvalds 已提交
1384 1385 1386
static void l2cap_chan_ready(struct sock *sk)
{
	struct sock *parent = bt_sk(sk)->parent;
1387
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
L
Linus Torvalds 已提交
1388 1389 1390

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

1391
	chan->conf_state = 0;
L
Linus Torvalds 已提交
1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411
	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;
1412
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
1413 1414 1415

	BT_DBG("conn %p", conn);

1416 1417
	read_lock(&conn->chan_lock);
	list_for_each_entry(chan, &conn->chan_l, list) {
1418
		struct sock *sk = chan->sk;
L
Linus Torvalds 已提交
1419 1420 1421 1422 1423 1424
		if (sk->sk_type != SOCK_RAW)
			continue;

		/* Don't send frame to the socket it came from */
		if (skb->sk == sk)
			continue;
1425 1426
		nskb = skb_clone(skb, GFP_ATOMIC);
		if (!nskb)
L
Linus Torvalds 已提交
1427 1428 1429 1430 1431
			continue;

		if (sock_queue_rcv_skb(sk, nskb))
			kfree_skb(nskb);
	}
1432
	read_unlock(&conn->chan_lock);
L
Linus Torvalds 已提交
1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443
}

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

1444 1445
	BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %d",
			conn, code, ident, dlen);
L
Linus Torvalds 已提交
1446 1447 1448 1449 1450 1451 1452 1453 1454

	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);
1455
	lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
1456 1457 1458 1459 1460

	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 已提交
1461 1462 1463 1464

	cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
	cmd->code  = code;
	cmd->ident = ident;
1465
	cmd->len   = cpu_to_le16(dlen);
L
Linus Torvalds 已提交
1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515

	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:
1516
		*val = get_unaligned_le16(opt->val);
L
Linus Torvalds 已提交
1517 1518 1519
		break;

	case 4:
1520
		*val = get_unaligned_le32(opt->val);
L
Linus Torvalds 已提交
1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546
		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:
1547
		put_unaligned_le16(val, opt->val);
L
Linus Torvalds 已提交
1548 1549 1550
		break;

	case 4:
1551
		put_unaligned_le32(val, opt->val);
L
Linus Torvalds 已提交
1552 1553 1554 1555 1556 1557 1558 1559 1560 1561
		break;

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

	*ptr += L2CAP_CONF_OPT_SIZE + len;
}

1562 1563
static void l2cap_ack_timeout(unsigned long arg)
{
1564
	struct l2cap_chan *chan = (void *) arg;
1565

1566 1567 1568
	bh_lock_sock(chan->sk);
	l2cap_send_ack(chan);
	bh_unlock_sock(chan->sk);
1569 1570
}

1571
static inline void l2cap_ertm_init(struct l2cap_chan *chan)
1572
{
1573 1574
	struct sock *sk = chan->sk;

1575
	chan->expected_ack_seq = 0;
1576
	chan->unacked_frames = 0;
1577
	chan->buffer_seq = 0;
1578 1579
	chan->num_acked = 0;
	chan->frames_sent = 0;
1580

1581 1582 1583 1584 1585
	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);
1586

1587 1588
	skb_queue_head_init(&chan->srej_q);
	skb_queue_head_init(&chan->busy_q);
1589

1590 1591
	INIT_LIST_HEAD(&chan->srej_l);

1592
	INIT_WORK(&chan->busy_work, l2cap_busy_work);
1593 1594

	sk->sk_backlog_rcv = l2cap_ertm_data_rcv;
1595 1596
}

1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609
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;
	}
}

1610
static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1611 1612
{
	struct l2cap_conf_req *req = data;
1613
	struct l2cap_conf_rfc rfc = { .mode = chan->mode };
L
Linus Torvalds 已提交
1614 1615
	void *ptr = req->data;

1616
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1617

1618
	if (chan->num_conf_req || chan->num_conf_rsp)
1619 1620
		goto done;

1621
	switch (chan->mode) {
1622 1623
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1624
		if (chan->conf_state & L2CAP_CONF_STATE2_DEVICE)
1625 1626
			break;

1627
		/* fall through */
1628
	default:
1629
		chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
1630 1631 1632 1633
		break;
	}

done:
1634 1635
	if (chan->imtu != L2CAP_DEFAULT_MTU)
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1636

1637
	switch (chan->mode) {
1638
	case L2CAP_MODE_BASIC:
1639 1640
		if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
				!(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
1641 1642
			break;

1643 1644 1645 1646 1647 1648 1649
		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;

1650 1651
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
							(unsigned long) &rfc);
1652 1653 1654 1655
		break;

	case L2CAP_MODE_ERTM:
		rfc.mode            = L2CAP_MODE_ERTM;
1656 1657
		rfc.txwin_size      = chan->tx_win;
		rfc.max_transmit    = chan->max_tx;
1658 1659
		rfc.retrans_timeout = 0;
		rfc.monitor_timeout = 0;
1660
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1661 1662
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1663

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

1667
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1668 1669
			break;

1670
		if (chan->fcs == L2CAP_FCS_NONE ||
1671
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1672 1673
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1674
		}
1675 1676 1677 1678 1679 1680 1681 1682
		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;
1683
		rfc.max_pdu_size    = cpu_to_le16(L2CAP_DEFAULT_MAX_PDU_SIZE);
1684 1685
		if (L2CAP_DEFAULT_MAX_PDU_SIZE > chan->conn->mtu - 10)
			rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1686

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

1690
		if (!(chan->conn->feat_mask & L2CAP_FEAT_FCS))
1691 1692
			break;

1693
		if (chan->fcs == L2CAP_FCS_NONE ||
1694
				chan->conf_state & L2CAP_CONF_NO_FCS_RECV) {
1695 1696
			chan->fcs = L2CAP_FCS_NONE;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1, chan->fcs);
1697
		}
1698 1699
		break;
	}
L
Linus Torvalds 已提交
1700

1701
	req->dcid  = cpu_to_le16(chan->dcid);
1702
	req->flags = cpu_to_le16(0);
L
Linus Torvalds 已提交
1703 1704 1705 1706

	return ptr - data;
}

1707
static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
L
Linus Torvalds 已提交
1708
{
1709 1710
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;
1711 1712
	void *req = chan->conf_req;
	int len = chan->conf_len;
1713 1714
	int type, hint, olen;
	unsigned long val;
1715
	struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
1716
	u16 mtu = L2CAP_DEFAULT_MTU;
1717
	u16 result = L2CAP_CONF_SUCCESS;
L
Linus Torvalds 已提交
1718

1719
	BT_DBG("chan %p", chan);
1720

1721 1722
	while (len >= L2CAP_CONF_OPT_SIZE) {
		len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
L
Linus Torvalds 已提交
1723

1724
		hint  = type & L2CAP_CONF_HINT;
1725
		type &= L2CAP_CONF_MASK;
1726 1727 1728

		switch (type) {
		case L2CAP_CONF_MTU:
1729
			mtu = val;
1730 1731 1732
			break;

		case L2CAP_CONF_FLUSH_TO:
1733
			chan->flush_to = val;
1734 1735 1736 1737 1738
			break;

		case L2CAP_CONF_QOS:
			break;

1739 1740 1741 1742 1743
		case L2CAP_CONF_RFC:
			if (olen == sizeof(rfc))
				memcpy(&rfc, (void *) val, olen);
			break;

1744 1745
		case L2CAP_CONF_FCS:
			if (val == L2CAP_FCS_NONE)
1746
				chan->conf_state |= L2CAP_CONF_NO_FCS_RECV;
1747 1748 1749

			break;

1750 1751 1752 1753 1754 1755 1756 1757 1758 1759
		default:
			if (hint)
				break;

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

1760
	if (chan->num_conf_rsp || chan->num_conf_req > 1)
1761 1762
		goto done;

1763
	switch (chan->mode) {
1764 1765
	case L2CAP_MODE_STREAMING:
	case L2CAP_MODE_ERTM:
1766
		if (!(chan->conf_state & L2CAP_CONF_STATE2_DEVICE)) {
1767
			chan->mode = l2cap_select_mode(rfc.mode,
1768
					chan->conn->feat_mask);
1769 1770 1771
			break;
		}

1772
		if (chan->mode != rfc.mode)
1773
			return -ECONNREFUSED;
1774

1775 1776 1777 1778
		break;
	}

done:
1779
	if (chan->mode != rfc.mode) {
1780
		result = L2CAP_CONF_UNACCEPT;
1781
		rfc.mode = chan->mode;
1782

1783
		if (chan->num_conf_rsp == 1)
1784 1785 1786 1787 1788 1789 1790
			return -ECONNREFUSED;

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


1791 1792 1793 1794
	if (result == L2CAP_CONF_SUCCESS) {
		/* Configure output options and let the other side know
		 * which ones we don't like. */

1795 1796 1797
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			result = L2CAP_CONF_UNACCEPT;
		else {
1798
			chan->omtu = mtu;
1799
			chan->conf_state |= L2CAP_CONF_MTU_DONE;
1800
		}
1801
		l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
1802

1803 1804
		switch (rfc.mode) {
		case L2CAP_MODE_BASIC:
1805
			chan->fcs = L2CAP_FCS_NONE;
1806
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1807 1808 1809
			break;

		case L2CAP_MODE_ERTM:
1810 1811
			chan->remote_tx_win = rfc.txwin_size;
			chan->remote_max_tx = rfc.max_transmit;
1812

1813 1814
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1815

1816
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1817

1818 1819 1820 1821
			rfc.retrans_timeout =
				le16_to_cpu(L2CAP_DEFAULT_RETRANS_TO);
			rfc.monitor_timeout =
				le16_to_cpu(L2CAP_DEFAULT_MONITOR_TO);
1822

1823
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1824 1825 1826 1827

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

1828 1829 1830
			break;

		case L2CAP_MODE_STREAMING:
1831 1832
			if (le16_to_cpu(rfc.max_pdu_size) > chan->conn->mtu - 10)
				rfc.max_pdu_size = cpu_to_le16(chan->conn->mtu - 10);
1833

1834
			chan->remote_mps = le16_to_cpu(rfc.max_pdu_size);
1835

1836
			chan->conf_state |= L2CAP_CONF_MODE_DONE;
1837 1838 1839 1840

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

1841 1842 1843
			break;

		default:
1844 1845
			result = L2CAP_CONF_UNACCEPT;

1846
			memset(&rfc, 0, sizeof(rfc));
1847
			rfc.mode = chan->mode;
1848
		}
1849

1850
		if (result == L2CAP_CONF_SUCCESS)
1851
			chan->conf_state |= L2CAP_CONF_OUTPUT_DONE;
1852
	}
1853
	rsp->scid   = cpu_to_le16(chan->dcid);
1854 1855 1856 1857
	rsp->result = cpu_to_le16(result);
	rsp->flags  = cpu_to_le16(0x0000);

	return ptr - data;
L
Linus Torvalds 已提交
1858 1859
}

1860
static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len, void *data, u16 *result)
1861 1862 1863 1864 1865 1866 1867
{
	struct l2cap_conf_req *req = data;
	void *ptr = req->data;
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

1868
	BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
1869 1870 1871 1872 1873 1874 1875 1876

	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;
1877
				chan->imtu = L2CAP_DEFAULT_MIN_MTU;
1878
			} else
1879 1880
				chan->imtu = val;
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
1881 1882 1883
			break;

		case L2CAP_CONF_FLUSH_TO:
1884
			chan->flush_to = val;
1885
			l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
1886
							2, chan->flush_to);
1887 1888 1889 1890 1891 1892
			break;

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

1893
			if ((chan->conf_state & L2CAP_CONF_STATE2_DEVICE) &&
1894
							rfc.mode != chan->mode)
1895 1896
				return -ECONNREFUSED;

1897
			chan->fcs = 0;
1898 1899 1900 1901 1902 1903 1904

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

1905
	if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
1906 1907
		return -ECONNREFUSED;

1908
	chan->mode = rfc.mode;
1909

1910 1911 1912
	if (*result == L2CAP_CONF_SUCCESS) {
		switch (rfc.mode) {
		case L2CAP_MODE_ERTM:
1913 1914 1915
			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);
1916 1917
			break;
		case L2CAP_MODE_STREAMING:
1918
			chan->mps    = le16_to_cpu(rfc.max_pdu_size);
1919 1920 1921
		}
	}

1922
	req->dcid   = cpu_to_le16(chan->dcid);
1923 1924 1925 1926 1927
	req->flags  = cpu_to_le16(0x0000);

	return ptr - data;
}

1928
static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data, u16 result, u16 flags)
L
Linus Torvalds 已提交
1929 1930 1931 1932
{
	struct l2cap_conf_rsp *rsp = data;
	void *ptr = rsp->data;

1933
	BT_DBG("chan %p", chan);
L
Linus Torvalds 已提交
1934

1935
	rsp->scid   = cpu_to_le16(chan->dcid);
1936
	rsp->result = cpu_to_le16(result);
1937
	rsp->flags  = cpu_to_le16(flags);
L
Linus Torvalds 已提交
1938 1939 1940 1941

	return ptr - data;
}

1942
void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
1943 1944
{
	struct l2cap_conn_rsp rsp;
1945
	struct l2cap_conn *conn = chan->conn;
1946 1947
	u8 buf[128];

1948 1949
	rsp.scid   = cpu_to_le16(chan->dcid);
	rsp.dcid   = cpu_to_le16(chan->scid);
1950 1951 1952 1953 1954
	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);

1955
	if (chan->conf_state & L2CAP_CONF_REQ_SENT)
1956 1957
		return;

1958
	chan->conf_state |= L2CAP_CONF_REQ_SENT;
1959 1960 1961 1962 1963
	l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
			l2cap_build_conf_req(chan, buf), buf);
	chan->num_conf_req++;
}

1964
static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
1965 1966 1967 1968 1969
{
	int type, olen;
	unsigned long val;
	struct l2cap_conf_rfc rfc;

1970
	BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
1971

1972
	if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988
		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:
1989 1990 1991
		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);
1992 1993
		break;
	case L2CAP_MODE_STREAMING:
1994
		chan->mps    = le16_to_cpu(rfc.max_pdu_size);
1995 1996 1997
	}
}

1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
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);
2008 2009

		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2010
		conn->info_ident = 0;
2011

2012 2013 2014 2015 2016 2017
		l2cap_conn_start(conn);
	}

	return 0;
}

L
Linus Torvalds 已提交
2018 2019 2020 2021
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;
2022
	struct l2cap_chan *chan = NULL;
2023
	struct sock *parent, *sk = NULL;
2024
	int result, status = L2CAP_CS_NO_INFO;
L
Linus Torvalds 已提交
2025 2026

	u16 dcid = 0, scid = __le16_to_cpu(req->scid);
2027
	__le16 psm = req->psm;
L
Linus Torvalds 已提交
2028 2029 2030 2031 2032 2033 2034 2035 2036 2037

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

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

2038 2039
	bh_lock_sock(parent);

2040 2041 2042
	/* Check if the ACL is secure enough (if not SDP) */
	if (psm != cpu_to_le16(0x0001) &&
				!hci_conn_check_link_mode(conn->hcon)) {
2043
		conn->disc_reason = 0x05;
2044 2045 2046 2047
		result = L2CAP_CR_SEC_BLOCK;
		goto response;
	}

L
Linus Torvalds 已提交
2048 2049 2050 2051
	result = L2CAP_CR_NO_MEM;

	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
2052
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
L
Linus Torvalds 已提交
2053 2054 2055
		goto response;
	}

2056
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, GFP_ATOMIC);
L
Linus Torvalds 已提交
2057 2058 2059
	if (!sk)
		goto response;

2060 2061 2062 2063 2064 2065
	chan = l2cap_chan_alloc(sk);
	if (!chan) {
		l2cap_sock_kill(sk);
		goto response;
	}

2066 2067
	l2cap_pi(sk)->chan = chan;

2068
	write_lock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2069 2070

	/* Check if we already have channel with that dcid */
2071 2072
	if (__l2cap_get_chan_by_dcid(conn, scid)) {
		write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2073 2074 2075 2076 2077 2078 2079 2080 2081 2082
		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);
2083 2084
	chan->psm  = psm;
	chan->dcid = scid;
L
Linus Torvalds 已提交
2085

2086 2087
	bt_accept_enqueue(parent, sk);

2088 2089
	__l2cap_chan_add(conn, chan);

2090
	dcid = chan->scid;
L
Linus Torvalds 已提交
2091 2092 2093

	l2cap_sock_set_timer(sk, sk->sk_sndtimeo);

2094
	chan->ident = cmd->ident;
L
Linus Torvalds 已提交
2095

2096
	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
2097
		if (l2cap_check_security(chan)) {
2098 2099 2100 2101 2102 2103 2104 2105 2106 2107
			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;
			}
2108 2109 2110 2111 2112 2113 2114 2115 2116
		} 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 已提交
2117 2118
	}

2119
	write_unlock_bh(&conn->chan_lock);
L
Linus Torvalds 已提交
2120 2121 2122 2123 2124

response:
	bh_unlock_sock(parent);

sendresp:
2125 2126 2127 2128
	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 已提交
2129
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_RSP, sizeof(rsp), &rsp);
2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144

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

2145
	if (chan && !(chan->conf_state & L2CAP_CONF_REQ_SENT) &&
2146 2147
				result == L2CAP_CR_SUCCESS) {
		u8 buf[128];
2148
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2149
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2150 2151
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
2152 2153
	}

L
Linus Torvalds 已提交
2154 2155 2156 2157 2158 2159 2160
	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;
2161
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172
	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) {
2173
		chan = l2cap_get_chan_by_scid(conn, scid);
2174
		if (!chan)
2175
			return -EFAULT;
L
Linus Torvalds 已提交
2176
	} else {
2177
		chan = l2cap_get_chan_by_ident(conn, cmd->ident);
2178
		if (!chan)
2179
			return -EFAULT;
L
Linus Torvalds 已提交
2180 2181
	}

2182 2183
	sk = chan->sk;

L
Linus Torvalds 已提交
2184 2185 2186
	switch (result) {
	case L2CAP_CR_SUCCESS:
		sk->sk_state = BT_CONFIG;
2187
		chan->ident = 0;
2188
		chan->dcid = dcid;
2189
		chan->conf_state &= ~L2CAP_CONF_CONNECT_PEND;
2190

2191
		if (chan->conf_state & L2CAP_CONF_REQ_SENT)
2192 2193
			break;

2194
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
2195

L
Linus Torvalds 已提交
2196
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2197 2198
					l2cap_build_conf_req(chan, req), req);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2199 2200 2201
		break;

	case L2CAP_CR_PEND:
2202
		chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
2203 2204 2205
		break;

	default:
2206 2207 2208 2209 2210 2211 2212 2213
		/* 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;
		}

2214
		l2cap_chan_del(chan, ECONNREFUSED);
L
Linus Torvalds 已提交
2215 2216 2217 2218 2219 2220 2221
		break;
	}

	bh_unlock_sock(sk);
	return 0;
}

2222
static inline void set_default_fcs(struct l2cap_chan *chan)
2223
{
2224 2225
	struct l2cap_pinfo *pi = l2cap_pi(chan->sk);

2226 2227 2228
	/* FCS is enabled only in ERTM or streaming mode, if one or both
	 * sides request it.
	 */
2229
	if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
2230
		chan->fcs = L2CAP_FCS_NONE;
2231
	else if (!(pi->chan->conf_state & L2CAP_CONF_NO_FCS_RECV))
2232
		chan->fcs = L2CAP_FCS_CRC16;
2233 2234
}

2235
static inline int l2cap_config_req(struct l2cap_conn *conn, struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
L
Linus Torvalds 已提交
2236 2237 2238 2239
{
	struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
	u16 dcid, flags;
	u8 rsp[64];
2240
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2241
	struct sock *sk;
2242
	int len;
L
Linus Torvalds 已提交
2243 2244 2245 2246 2247 2248

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

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

2249
	chan = l2cap_get_chan_by_scid(conn, dcid);
2250
	if (!chan)
L
Linus Torvalds 已提交
2251 2252
		return -ENOENT;

2253 2254
	sk = chan->sk;

2255 2256 2257 2258 2259 2260
	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);
2261
		goto unlock;
2262
	}
2263

2264
	/* Reject if config buffer is too small. */
2265
	len = cmd_len - sizeof(*req);
2266
	if (chan->conf_len + len > sizeof(chan->conf_req)) {
2267
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2268
				l2cap_build_conf_rsp(chan, rsp,
2269 2270 2271 2272 2273
					L2CAP_CONF_REJECT, flags), rsp);
		goto unlock;
	}

	/* Store config. */
2274 2275
	memcpy(chan->conf_req + chan->conf_len, req->data, len);
	chan->conf_len += len;
L
Linus Torvalds 已提交
2276 2277 2278 2279

	if (flags & 0x0001) {
		/* Incomplete config. Send empty response. */
		l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
2280
				l2cap_build_conf_rsp(chan, rsp,
2281
					L2CAP_CONF_SUCCESS, 0x0001), rsp);
L
Linus Torvalds 已提交
2282 2283 2284 2285
		goto unlock;
	}

	/* Complete config. */
2286
	len = l2cap_parse_conf_req(chan, rsp);
2287
	if (len < 0) {
2288
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2289
		goto unlock;
2290
	}
L
Linus Torvalds 已提交
2291

2292
	l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
2293
	chan->num_conf_rsp++;
2294 2295

	/* Reset config buffer. */
2296
	chan->conf_len = 0;
2297

2298
	if (!(chan->conf_state & L2CAP_CONF_OUTPUT_DONE))
2299 2300
		goto unlock;

2301
	if (chan->conf_state & L2CAP_CONF_INPUT_DONE) {
2302
		set_default_fcs(chan);
2303

L
Linus Torvalds 已提交
2304
		sk->sk_state = BT_CONNECTED;
2305

2306 2307
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2308
		skb_queue_head_init(&chan->tx_q);
2309
		if (chan->mode == L2CAP_MODE_ERTM)
2310
			l2cap_ertm_init(chan);
2311

L
Linus Torvalds 已提交
2312
		l2cap_chan_ready(sk);
2313 2314 2315
		goto unlock;
	}

2316
	if (!(chan->conf_state & L2CAP_CONF_REQ_SENT)) {
2317
		u8 buf[64];
2318
		chan->conf_state |= L2CAP_CONF_REQ_SENT;
L
Linus Torvalds 已提交
2319
		l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
2320 2321
					l2cap_build_conf_req(chan, buf), buf);
		chan->num_conf_req++;
L
Linus Torvalds 已提交
2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332
	}

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;
2333
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2334
	struct sock *sk;
2335
	int len = cmd->len - sizeof(*rsp);
L
Linus Torvalds 已提交
2336 2337 2338 2339 2340

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

2341 2342
	BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x",
			scid, flags, result);
L
Linus Torvalds 已提交
2343

2344
	chan = l2cap_get_chan_by_scid(conn, scid);
2345
	if (!chan)
L
Linus Torvalds 已提交
2346 2347
		return 0;

2348 2349
	sk = chan->sk;

L
Linus Torvalds 已提交
2350 2351
	switch (result) {
	case L2CAP_CONF_SUCCESS:
2352
		l2cap_conf_rfc_get(chan, rsp->data, len);
L
Linus Torvalds 已提交
2353 2354 2355
		break;

	case L2CAP_CONF_UNACCEPT:
2356
		if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
2357 2358
			char req[64];

2359
			if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
2360
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2361 2362 2363
				goto done;
			}

2364 2365
			/* throw out any old stored conf requests */
			result = L2CAP_CONF_SUCCESS;
2366 2367
			len = l2cap_parse_conf_rsp(chan, rsp->data, len,
								req, &result);
2368
			if (len < 0) {
2369
				l2cap_send_disconn_req(conn, chan, ECONNRESET);
2370 2371 2372 2373 2374
				goto done;
			}

			l2cap_send_cmd(conn, l2cap_get_ident(conn),
						L2CAP_CONF_REQ, len, req);
2375
			chan->num_conf_req++;
2376 2377 2378
			if (result != L2CAP_CONF_SUCCESS)
				goto done;
			break;
L
Linus Torvalds 已提交
2379 2380
		}

2381
	default:
2382
		sk->sk_err = ECONNRESET;
L
Linus Torvalds 已提交
2383
		l2cap_sock_set_timer(sk, HZ * 5);
2384
		l2cap_send_disconn_req(conn, chan, ECONNRESET);
L
Linus Torvalds 已提交
2385 2386 2387 2388 2389 2390
		goto done;
	}

	if (flags & 0x01)
		goto done;

2391
	chan->conf_state |= L2CAP_CONF_INPUT_DONE;
L
Linus Torvalds 已提交
2392

2393
	if (chan->conf_state & L2CAP_CONF_OUTPUT_DONE) {
2394
		set_default_fcs(chan);
2395

L
Linus Torvalds 已提交
2396
		sk->sk_state = BT_CONNECTED;
2397 2398
		chan->next_tx_seq = 0;
		chan->expected_tx_seq = 0;
2399
		skb_queue_head_init(&chan->tx_q);
2400
		if (chan->mode ==  L2CAP_MODE_ERTM)
2401
			l2cap_ertm_init(chan);
2402

L
Linus Torvalds 已提交
2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415
		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;
2416
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2417 2418 2419 2420 2421 2422 2423
	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);

2424
	chan = l2cap_get_chan_by_scid(conn, dcid);
2425
	if (!chan)
L
Linus Torvalds 已提交
2426 2427
		return 0;

2428 2429
	sk = chan->sk;

2430 2431
	rsp.dcid = cpu_to_le16(chan->scid);
	rsp.scid = cpu_to_le16(chan->dcid);
L
Linus Torvalds 已提交
2432 2433 2434 2435
	l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);

	sk->sk_shutdown = SHUTDOWN_MASK;

2436 2437 2438 2439 2440 2441 2442 2443 2444
	/* 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;
	}

2445
	l2cap_chan_del(chan, ECONNRESET);
L
Linus Torvalds 已提交
2446 2447 2448 2449 2450 2451 2452 2453 2454 2455
	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;
2456
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
2457 2458 2459 2460 2461 2462 2463
	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);

2464
	chan = l2cap_get_chan_by_scid(conn, scid);
2465
	if (!chan)
L
Linus Torvalds 已提交
2466 2467
		return 0;

2468 2469
	sk = chan->sk;

2470 2471 2472 2473 2474 2475 2476 2477 2478
	/* 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;
	}

2479
	l2cap_chan_del(chan, 0);
L
Linus Torvalds 已提交
2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494
	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);

2495 2496
	if (type == L2CAP_IT_FEAT_MASK) {
		u8 buf[8];
2497
		u32 feat_mask = l2cap_feat_mask;
2498 2499 2500
		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);
2501
		if (!disable_ertm)
2502 2503
			feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
							 | L2CAP_FEAT_FCS;
2504
		put_unaligned_le32(feat_mask, rsp->data);
2505 2506
		l2cap_send_cmd(conn, cmd->ident,
					L2CAP_INFO_RSP, sizeof(buf), buf);
2507 2508 2509 2510 2511 2512 2513 2514
	} 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);
2515 2516 2517 2518 2519 2520 2521
	} 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 已提交
2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535

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

2536 2537 2538 2539 2540
	/* 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;

2541 2542
	del_timer(&conn->info_timer);

2543 2544 2545 2546 2547 2548 2549 2550 2551
	if (result != L2CAP_IR_SUCCESS) {
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
		conn->info_ident = 0;

		l2cap_conn_start(conn);

		return 0;
	}

2552
	if (type == L2CAP_IT_FEAT_MASK) {
2553
		conn->feat_mask = get_unaligned_le32(rsp->data);
2554

2555
		if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569
			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) {
2570
		conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
2571
		conn->info_ident = 0;
2572 2573 2574

		l2cap_conn_start(conn);
	}
2575

L
Linus Torvalds 已提交
2576 2577 2578
	return 0;
}

2579
static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606
							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;
2607
	int err;
2608 2609 2610 2611 2612 2613 2614 2615 2616

	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;
2617 2618
	min		= __le16_to_cpu(req->min);
	max		= __le16_to_cpu(req->max);
2619 2620 2621 2622 2623 2624 2625
	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));
2626 2627 2628

	err = l2cap_check_conn_param(min, max, latency, to_multiplier);
	if (err)
2629 2630 2631 2632 2633 2634 2635
		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);

2636 2637 2638
	if (!err)
		hci_le_conn_update(hcon, min, max, latency, to_multiplier);

2639 2640 2641
	return 0;
}

2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707
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:
2708
		return l2cap_conn_param_update_req(conn, cmd, data);
2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720

	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 已提交
2721 2722 2723 2724
{
	u8 *data = skb->data;
	int len = skb->len;
	struct l2cap_cmd_hdr cmd;
2725
	int err;
L
Linus Torvalds 已提交
2726 2727 2728 2729

	l2cap_raw_recv(conn, skb);

	while (len >= L2CAP_CMD_HDR_SIZE) {
2730
		u16 cmd_len;
L
Linus Torvalds 已提交
2731 2732 2733 2734
		memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
		data += L2CAP_CMD_HDR_SIZE;
		len  -= L2CAP_CMD_HDR_SIZE;

2735
		cmd_len = le16_to_cpu(cmd.len);
L
Linus Torvalds 已提交
2736

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

2739
		if (cmd_len > len || !cmd.ident) {
L
Linus Torvalds 已提交
2740 2741 2742 2743
			BT_DBG("corrupted command");
			break;
		}

2744 2745 2746 2747
		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 已提交
2748 2749 2750

		if (err) {
			struct l2cap_cmd_rej rej;
2751 2752

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

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

2759 2760
		data += cmd_len;
		len  -= cmd_len;
L
Linus Torvalds 已提交
2761 2762 2763 2764 2765
	}

	kfree_skb(skb);
}

2766
static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
2767 2768 2769 2770
{
	u16 our_fcs, rcv_fcs;
	int hdr_size = L2CAP_HDR_SIZE + 2;

2771
	if (chan->fcs == L2CAP_FCS_CRC16) {
2772 2773 2774 2775 2776
		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)
2777
			return -EBADMSG;
2778 2779 2780 2781
	}
	return 0;
}

2782
static inline void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
2783 2784 2785
{
	u16 control = 0;

2786
	chan->frames_sent = 0;
2787

2788
	control |= chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2789

2790
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
2791
		control |= L2CAP_SUPER_RCV_NOT_READY;
2792 2793
		l2cap_send_sframe(chan, control);
		chan->conn_state |= L2CAP_CONN_RNR_SENT;
2794 2795
	}

2796 2797
	if (chan->conn_state & L2CAP_CONN_REMOTE_BUSY)
		l2cap_retransmit_frames(chan);
2798

2799
	l2cap_ertm_send(chan);
2800

2801
	if (!(chan->conn_state & L2CAP_CONN_LOCAL_BUSY) &&
2802
			chan->frames_sent == 0) {
2803
		control |= L2CAP_SUPER_RCV_READY;
2804
		l2cap_send_sframe(chan, control);
2805 2806 2807
	}
}

2808
static int l2cap_add_to_srej_queue(struct l2cap_chan *chan, struct sk_buff *skb, u8 tx_seq, u8 sar)
2809 2810
{
	struct sk_buff *next_skb;
2811
	int tx_seq_offset, next_tx_seq_offset;
2812 2813 2814 2815

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

2816
	next_skb = skb_peek(&chan->srej_q);
2817
	if (!next_skb) {
2818
		__skb_queue_tail(&chan->srej_q, skb);
2819
		return 0;
2820 2821
	}

2822
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
2823 2824 2825
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

2826
	do {
2827 2828 2829
		if (bt_cb(next_skb)->tx_seq == tx_seq)
			return -EINVAL;

2830
		next_tx_seq_offset = (bt_cb(next_skb)->tx_seq -
2831
						chan->buffer_seq) % 64;
2832 2833 2834 2835
		if (next_tx_seq_offset < 0)
			next_tx_seq_offset += 64;

		if (next_tx_seq_offset > tx_seq_offset) {
2836
			__skb_queue_before(&chan->srej_q, next_skb, skb);
2837
			return 0;
2838 2839
		}

2840
		if (skb_queue_is_last(&chan->srej_q, next_skb))
2841 2842
			break;

2843
	} while ((next_skb = skb_queue_next(&chan->srej_q, next_skb)));
2844

2845
	__skb_queue_tail(&chan->srej_q, skb);
2846 2847

	return 0;
2848 2849
}

2850
static int l2cap_ertm_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
2851 2852
{
	struct sk_buff *_skb;
2853
	int err;
2854 2855 2856

	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
2857
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2858 2859
			goto drop;

2860
		err = sock_queue_rcv_skb(chan->sk, skb);
2861 2862 2863 2864 2865 2866
		if (!err)
			return err;

		break;

	case L2CAP_SDU_START:
2867
		if (chan->conn_state & L2CAP_CONN_SAR_SDU)
2868 2869
			goto drop;

2870
		chan->sdu_len = get_unaligned_le16(skb->data);
2871

2872
		if (chan->sdu_len > chan->imtu)
2873 2874
			goto disconnect;

2875 2876
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu)
2877 2878 2879 2880 2881 2882
			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);
2883

2884
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2885

2886
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
2887
		chan->partial_sdu_len = skb->len;
2888 2889 2890
		break;

	case L2CAP_SDU_CONTINUE:
2891
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
2892 2893
			goto disconnect;

2894
		if (!chan->sdu)
2895 2896
			goto disconnect;

2897 2898
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
2899 2900
			goto drop;

2901
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2902

2903 2904 2905
		break;

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

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

2912
		if (!(chan->conn_state & L2CAP_CONN_SAR_RETRY)) {
2913
			chan->partial_sdu_len += skb->len;
2914

2915
			if (chan->partial_sdu_len > chan->imtu)
2916
				goto drop;
2917

2918
			if (chan->partial_sdu_len != chan->sdu_len)
2919
				goto drop;
2920

2921
			memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
2922
		}
2923

2924
		_skb = skb_clone(chan->sdu, GFP_ATOMIC);
2925
		if (!_skb) {
2926
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2927 2928 2929
			return -ENOMEM;
		}

2930
		err = sock_queue_rcv_skb(chan->sk, _skb);
2931
		if (err < 0) {
2932
			kfree_skb(_skb);
2933
			chan->conn_state |= L2CAP_CONN_SAR_RETRY;
2934 2935 2936
			return err;
		}

2937 2938
		chan->conn_state &= ~L2CAP_CONN_SAR_RETRY;
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
2939

2940
		kfree_skb(chan->sdu);
2941 2942 2943 2944
		break;
	}

	kfree_skb(skb);
2945
	return 0;
2946 2947

drop:
2948 2949
	kfree_skb(chan->sdu);
	chan->sdu = NULL;
2950 2951

disconnect:
2952
	l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
2953 2954 2955 2956
	kfree_skb(skb);
	return 0;
}

2957
static int l2cap_try_push_rx_skb(struct l2cap_chan *chan)
2958 2959 2960 2961 2962
{
	struct sk_buff *skb;
	u16 control;
	int err;

2963
	while ((skb = skb_dequeue(&chan->busy_q))) {
2964
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
2965
		err = l2cap_ertm_reassembly_sdu(chan, skb, control);
2966
		if (err < 0) {
2967
			skb_queue_head(&chan->busy_q, skb);
2968 2969 2970
			return -EBUSY;
		}

2971
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
2972 2973
	}

2974
	if (!(chan->conn_state & L2CAP_CONN_RNR_SENT))
2975 2976
		goto done;

2977
	control = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
2978
	control |= L2CAP_SUPER_RCV_READY | L2CAP_CTRL_POLL;
2979
	l2cap_send_sframe(chan, control);
2980
	chan->retry_count = 1;
2981

2982
	del_timer(&chan->retrans_timer);
2983 2984
	__mod_monitor_timer();

2985
	chan->conn_state |= L2CAP_CONN_WAIT_F;
2986 2987

done:
2988 2989
	chan->conn_state &= ~L2CAP_CONN_LOCAL_BUSY;
	chan->conn_state &= ~L2CAP_CONN_RNR_SENT;
2990

2991
	BT_DBG("chan %p, Exit local busy", chan);
2992 2993 2994 2995

	return 0;
}

2996 2997 2998
static void l2cap_busy_work(struct work_struct *work)
{
	DECLARE_WAITQUEUE(wait, current);
2999 3000 3001
	struct l2cap_chan *chan =
		container_of(work, struct l2cap_chan, busy_work);
	struct sock *sk = chan->sk;
3002 3003 3004 3005 3006
	int n_tries = 0, timeo = HZ/5, err;
	struct sk_buff *skb;

	lock_sock(sk);

3007
	add_wait_queue(sk_sleep(sk), &wait);
3008
	while ((skb = skb_peek(&chan->busy_q))) {
3009 3010 3011 3012
		set_current_state(TASK_INTERRUPTIBLE);

		if (n_tries++ > L2CAP_LOCAL_BUSY_TRIES) {
			err = -EBUSY;
3013
			l2cap_send_disconn_req(chan->conn, chan, EBUSY);
3014
			break;
3015 3016 3017 3018 3019 3020 3021
		}

		if (!timeo)
			timeo = HZ/5;

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
3022
			break;
3023 3024 3025 3026 3027 3028 3029 3030
		}

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

		err = sock_error(sk);
		if (err)
3031
			break;
3032

3033
		if (l2cap_try_push_rx_skb(chan) == 0)
3034 3035 3036 3037
			break;
	}

	set_current_state(TASK_RUNNING);
3038
	remove_wait_queue(sk_sleep(sk), &wait);
3039 3040 3041 3042

	release_sock(sk);
}

3043
static int l2cap_push_rx_skb(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3044 3045 3046
{
	int sctrl, err;

3047
	if (chan->conn_state & L2CAP_CONN_LOCAL_BUSY) {
3048
		bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3049
		__skb_queue_tail(&chan->busy_q, skb);
3050
		return l2cap_try_push_rx_skb(chan);
3051 3052


3053 3054
	}

3055
	err = l2cap_ertm_reassembly_sdu(chan, skb, control);
3056
	if (err >= 0) {
3057
		chan->buffer_seq = (chan->buffer_seq + 1) % 64;
3058 3059 3060 3061
		return err;
	}

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

3064
	chan->conn_state |= L2CAP_CONN_LOCAL_BUSY;
3065
	bt_cb(skb)->sar = control >> L2CAP_CTRL_SAR_SHIFT;
3066
	__skb_queue_tail(&chan->busy_q, skb);
3067

3068
	sctrl = chan->buffer_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3069
	sctrl |= L2CAP_SUPER_RCV_NOT_READY;
3070
	l2cap_send_sframe(chan, sctrl);
3071

3072
	chan->conn_state |= L2CAP_CONN_RNR_SENT;
3073

3074
	del_timer(&chan->ack_timer);
3075

3076
	queue_work(_busy_wq, &chan->busy_work);
3077 3078 3079 3080

	return err;
}

3081
static int l2cap_streaming_reassembly_sdu(struct l2cap_chan *chan, struct sk_buff *skb, u16 control)
3082 3083 3084 3085
{
	struct sk_buff *_skb;
	int err = -EINVAL;

3086 3087 3088 3089 3090
	/*
	 * TODO: We have to notify the userland if some data is lost with the
	 * Streaming Mode.
	 */

3091 3092
	switch (control & L2CAP_CTRL_SAR) {
	case L2CAP_SDU_UNSEGMENTED:
3093
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3094
			kfree_skb(chan->sdu);
3095 3096 3097
			break;
		}

3098
		err = sock_queue_rcv_skb(chan->sk, skb);
3099 3100 3101 3102 3103 3104
		if (!err)
			return 0;

		break;

	case L2CAP_SDU_START:
3105
		if (chan->conn_state & L2CAP_CONN_SAR_SDU) {
3106
			kfree_skb(chan->sdu);
3107 3108 3109
			break;
		}

3110
		chan->sdu_len = get_unaligned_le16(skb->data);
3111 3112
		skb_pull(skb, 2);

3113
		if (chan->sdu_len > chan->imtu) {
3114 3115 3116 3117
			err = -EMSGSIZE;
			break;
		}

3118 3119
		chan->sdu = bt_skb_alloc(chan->sdu_len, GFP_ATOMIC);
		if (!chan->sdu) {
3120 3121 3122 3123
			err = -ENOMEM;
			break;
		}

3124
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3125

3126
		chan->conn_state |= L2CAP_CONN_SAR_SDU;
3127
		chan->partial_sdu_len = skb->len;
3128 3129 3130 3131
		err = 0;
		break;

	case L2CAP_SDU_CONTINUE:
3132
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3133 3134
			break;

3135
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3136

3137 3138 3139
		chan->partial_sdu_len += skb->len;
		if (chan->partial_sdu_len > chan->sdu_len)
			kfree_skb(chan->sdu);
3140 3141 3142 3143 3144 3145
		else
			err = 0;

		break;

	case L2CAP_SDU_END:
3146
		if (!(chan->conn_state & L2CAP_CONN_SAR_SDU))
3147 3148
			break;

3149
		memcpy(skb_put(chan->sdu, skb->len), skb->data, skb->len);
3150

3151
		chan->conn_state &= ~L2CAP_CONN_SAR_SDU;
3152
		chan->partial_sdu_len += skb->len;
3153

3154
		if (chan->partial_sdu_len > chan->imtu)
3155 3156
			goto drop;

3157 3158
		if (chan->partial_sdu_len == chan->sdu_len) {
			_skb = skb_clone(chan->sdu, GFP_ATOMIC);
3159
			err = sock_queue_rcv_skb(chan->sk, _skb);
3160 3161 3162 3163 3164
			if (err < 0)
				kfree_skb(_skb);
		}
		err = 0;

3165
drop:
3166
		kfree_skb(chan->sdu);
3167 3168 3169 3170 3171 3172 3173
		break;
	}

	kfree_skb(skb);
	return err;
}

3174
static void l2cap_check_srej_gap(struct l2cap_chan *chan, u8 tx_seq)
3175 3176
{
	struct sk_buff *skb;
3177
	u16 control;
3178

3179
	while ((skb = skb_peek(&chan->srej_q))) {
3180 3181 3182
		if (bt_cb(skb)->tx_seq != tx_seq)
			break;

3183
		skb = skb_dequeue(&chan->srej_q);
3184
		control = bt_cb(skb)->sar << L2CAP_CTRL_SAR_SHIFT;
3185
		l2cap_ertm_reassembly_sdu(chan, skb, control);
3186 3187
		chan->buffer_seq_srej =
			(chan->buffer_seq_srej + 1) % 64;
3188
		tx_seq = (tx_seq + 1) % 64;
3189 3190 3191
	}
}

3192
static void l2cap_resend_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3193 3194 3195 3196
{
	struct srej_list *l, *tmp;
	u16 control;

3197
	list_for_each_entry_safe(l, tmp, &chan->srej_l, list) {
3198 3199 3200 3201 3202 3203 3204
		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;
3205
		l2cap_send_sframe(chan, control);
3206
		list_del(&l->list);
3207
		list_add_tail(&l->list, &chan->srej_l);
3208 3209 3210
	}
}

3211
static void l2cap_send_srejframe(struct l2cap_chan *chan, u8 tx_seq)
3212 3213 3214 3215
{
	struct srej_list *new;
	u16 control;

3216
	while (tx_seq != chan->expected_tx_seq) {
3217
		control = L2CAP_SUPER_SELECT_REJECT;
3218
		control |= chan->expected_tx_seq << L2CAP_CTRL_REQSEQ_SHIFT;
3219
		l2cap_send_sframe(chan, control);
3220 3221

		new = kzalloc(sizeof(struct srej_list), GFP_ATOMIC);
3222 3223
		new->tx_seq = chan->expected_tx_seq;
		chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3224
		list_add_tail(&new->list, &chan->srej_l);
3225
	}
3226
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3227 3228
}

3229
static inline int l2cap_data_channel_iframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3230 3231
{
	u8 tx_seq = __get_txseq(rx_control);
3232
	u8 req_seq = __get_reqseq(rx_control);
3233
	u8 sar = rx_control >> L2CAP_CTRL_SAR_SHIFT;
3234
	int tx_seq_offset, expected_tx_seq_offset;
3235
	int num_to_ack = (chan->tx_win/6) + 1;
3236 3237
	int err = 0;

3238 3239
	BT_DBG("chan %p len %d tx_seq %d rx_control 0x%4.4x", chan, skb->len,
							tx_seq, rx_control);
3240

3241
	if (L2CAP_CTRL_FINAL & rx_control &&
3242
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3243
		del_timer(&chan->monitor_timer);
3244
		if (chan->unacked_frames > 0)
3245
			__mod_retrans_timer();
3246
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3247 3248
	}

3249 3250
	chan->expected_ack_seq = req_seq;
	l2cap_drop_acked_frames(chan);
3251

3252
	if (tx_seq == chan->expected_tx_seq)
3253
		goto expected;
3254

3255
	tx_seq_offset = (tx_seq - chan->buffer_seq) % 64;
3256 3257 3258 3259
	if (tx_seq_offset < 0)
		tx_seq_offset += 64;

	/* invalid tx_seq */
3260
	if (tx_seq_offset >= chan->tx_win) {
3261
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3262 3263 3264
		goto drop;
	}

3265
	if (chan->conn_state == L2CAP_CONN_LOCAL_BUSY)
3266 3267
		goto drop;

3268
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3269
		struct srej_list *first;
3270

3271
		first = list_first_entry(&chan->srej_l,
3272 3273
				struct srej_list, list);
		if (tx_seq == first->tx_seq) {
3274
			l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3275
			l2cap_check_srej_gap(chan, tx_seq);
3276 3277 3278 3279

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

3280
			if (list_empty(&chan->srej_l)) {
3281
				chan->buffer_seq = chan->buffer_seq_srej;
3282 3283
				chan->conn_state &= ~L2CAP_CONN_SREJ_SENT;
				l2cap_send_ack(chan);
3284
				BT_DBG("chan %p, Exit SREJ_SENT", chan);
3285 3286 3287
			}
		} else {
			struct srej_list *l;
3288 3289

			/* duplicated tx_seq */
3290
			if (l2cap_add_to_srej_queue(chan, skb, tx_seq, sar) < 0)
3291
				goto drop;
3292

3293
			list_for_each_entry(l, &chan->srej_l, list) {
3294
				if (l->tx_seq == tx_seq) {
3295
					l2cap_resend_srejframe(chan, tx_seq);
3296 3297 3298
					return 0;
				}
			}
3299
			l2cap_send_srejframe(chan, tx_seq);
3300 3301
		}
	} else {
3302
		expected_tx_seq_offset =
3303
			(chan->expected_tx_seq - chan->buffer_seq) % 64;
3304 3305 3306 3307 3308 3309 3310
		if (expected_tx_seq_offset < 0)
			expected_tx_seq_offset += 64;

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

3311
		chan->conn_state |= L2CAP_CONN_SREJ_SENT;
3312

3313
		BT_DBG("chan %p, Enter SREJ", chan);
3314

3315
		INIT_LIST_HEAD(&chan->srej_l);
3316
		chan->buffer_seq_srej = chan->buffer_seq;
3317

3318 3319
		__skb_queue_head_init(&chan->srej_q);
		__skb_queue_head_init(&chan->busy_q);
3320
		l2cap_add_to_srej_queue(chan, skb, tx_seq, sar);
3321

3322
		chan->conn_state |= L2CAP_CONN_SEND_PBIT;
3323

3324
		l2cap_send_srejframe(chan, tx_seq);
3325

3326
		del_timer(&chan->ack_timer);
3327
	}
3328 3329
	return 0;

3330
expected:
3331
	chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3332

3333
	if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
3334 3335
		bt_cb(skb)->tx_seq = tx_seq;
		bt_cb(skb)->sar = sar;
3336
		__skb_queue_tail(&chan->srej_q, skb);
3337 3338 3339
		return 0;
	}

3340
	err = l2cap_push_rx_skb(chan, skb, rx_control);
3341 3342 3343
	if (err < 0)
		return 0;

3344
	if (rx_control & L2CAP_CTRL_FINAL) {
3345 3346
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3347
		else
3348
			l2cap_retransmit_frames(chan);
3349 3350
	}

3351 3352
	__mod_ack_timer();

3353 3354
	chan->num_acked = (chan->num_acked + 1) % num_to_ack;
	if (chan->num_acked == num_to_ack - 1)
3355
		l2cap_send_ack(chan);
3356

3357
	return 0;
3358 3359 3360 3361

drop:
	kfree_skb(skb);
	return 0;
3362 3363
}

3364
static inline void l2cap_data_channel_rrframe(struct l2cap_chan *chan, u16 rx_control)
3365
{
3366
	BT_DBG("chan %p, req_seq %d ctrl 0x%4.4x", chan, __get_reqseq(rx_control),
3367 3368
						rx_control);

3369 3370
	chan->expected_ack_seq = __get_reqseq(rx_control);
	l2cap_drop_acked_frames(chan);
3371

3372
	if (rx_control & L2CAP_CTRL_POLL) {
3373 3374 3375
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT) {
			if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3376
					(chan->unacked_frames > 0))
3377 3378
				__mod_retrans_timer();

3379 3380
			chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
			l2cap_send_srejtail(chan);
3381
		} else {
3382
			l2cap_send_i_or_rr_or_rnr(chan);
3383
		}
3384

3385
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3386
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3387

3388 3389
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3390
		else
3391
			l2cap_retransmit_frames(chan);
3392

3393
	} else {
3394
		if ((chan->conn_state & L2CAP_CONN_REMOTE_BUSY) &&
3395
				(chan->unacked_frames > 0))
3396
			__mod_retrans_timer();
3397

3398 3399 3400
		chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
		if (chan->conn_state & L2CAP_CONN_SREJ_SENT)
			l2cap_send_ack(chan);
3401
		else
3402
			l2cap_ertm_send(chan);
3403 3404
	}
}
3405

3406
static inline void l2cap_data_channel_rejframe(struct l2cap_chan *chan, u16 rx_control)
3407 3408
{
	u8 tx_seq = __get_reqseq(rx_control);
3409

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

3412
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3413

3414 3415
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3416 3417

	if (rx_control & L2CAP_CTRL_FINAL) {
3418 3419
		if (chan->conn_state & L2CAP_CONN_REJ_ACT)
			chan->conn_state &= ~L2CAP_CONN_REJ_ACT;
3420
		else
3421
			l2cap_retransmit_frames(chan);
3422
	} else {
3423
		l2cap_retransmit_frames(chan);
3424

3425 3426
		if (chan->conn_state & L2CAP_CONN_WAIT_F)
			chan->conn_state |= L2CAP_CONN_REJ_ACT;
3427 3428
	}
}
3429
static inline void l2cap_data_channel_srejframe(struct l2cap_chan *chan, u16 rx_control)
3430 3431
{
	u8 tx_seq = __get_reqseq(rx_control);
3432

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

3435
	chan->conn_state &= ~L2CAP_CONN_REMOTE_BUSY;
3436

3437
	if (rx_control & L2CAP_CTRL_POLL) {
3438 3439
		chan->expected_ack_seq = tx_seq;
		l2cap_drop_acked_frames(chan);
3440

3441 3442
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
		l2cap_retransmit_one_frame(chan, tx_seq);
3443

3444
		l2cap_ertm_send(chan);
3445

3446
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3447
			chan->srej_save_reqseq = tx_seq;
3448
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3449
		}
3450
	} else if (rx_control & L2CAP_CTRL_FINAL) {
3451
		if ((chan->conn_state & L2CAP_CONN_SREJ_ACT) &&
3452
				chan->srej_save_reqseq == tx_seq)
3453
			chan->conn_state &= ~L2CAP_CONN_SREJ_ACT;
3454
		else
3455
			l2cap_retransmit_one_frame(chan, tx_seq);
3456
	} else {
3457 3458
		l2cap_retransmit_one_frame(chan, tx_seq);
		if (chan->conn_state & L2CAP_CONN_WAIT_F) {
3459
			chan->srej_save_reqseq = tx_seq;
3460
			chan->conn_state |= L2CAP_CONN_SREJ_ACT;
3461
		}
3462 3463 3464
	}
}

3465
static inline void l2cap_data_channel_rnrframe(struct l2cap_chan *chan, u16 rx_control)
3466 3467 3468
{
	u8 tx_seq = __get_reqseq(rx_control);

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

3471
	chan->conn_state |= L2CAP_CONN_REMOTE_BUSY;
3472 3473
	chan->expected_ack_seq = tx_seq;
	l2cap_drop_acked_frames(chan);
3474

3475
	if (rx_control & L2CAP_CTRL_POLL)
3476
		chan->conn_state |= L2CAP_CONN_SEND_FBIT;
3477

3478
	if (!(chan->conn_state & L2CAP_CONN_SREJ_SENT)) {
3479
		del_timer(&chan->retrans_timer);
3480
		if (rx_control & L2CAP_CTRL_POLL)
3481
			l2cap_send_rr_or_rnr(chan, L2CAP_CTRL_FINAL);
3482
		return;
3483
	}
3484 3485

	if (rx_control & L2CAP_CTRL_POLL)
3486
		l2cap_send_srejtail(chan);
3487
	else
3488
		l2cap_send_sframe(chan, L2CAP_SUPER_RCV_READY);
3489 3490
}

3491
static inline int l2cap_data_channel_sframe(struct l2cap_chan *chan, u16 rx_control, struct sk_buff *skb)
3492
{
3493
	BT_DBG("chan %p rx_control 0x%4.4x len %d", chan, rx_control, skb->len);
3494

3495
	if (L2CAP_CTRL_FINAL & rx_control &&
3496
			chan->conn_state & L2CAP_CONN_WAIT_F) {
3497
		del_timer(&chan->monitor_timer);
3498
		if (chan->unacked_frames > 0)
3499
			__mod_retrans_timer();
3500
		chan->conn_state &= ~L2CAP_CONN_WAIT_F;
3501 3502 3503 3504
	}

	switch (rx_control & L2CAP_CTRL_SUPERVISE) {
	case L2CAP_SUPER_RCV_READY:
3505
		l2cap_data_channel_rrframe(chan, rx_control);
3506 3507
		break;

3508
	case L2CAP_SUPER_REJECT:
3509
		l2cap_data_channel_rejframe(chan, rx_control);
3510
		break;
3511

3512
	case L2CAP_SUPER_SELECT_REJECT:
3513
		l2cap_data_channel_srejframe(chan, rx_control);
3514 3515 3516
		break;

	case L2CAP_SUPER_RCV_NOT_READY:
3517
		l2cap_data_channel_rnrframe(chan, rx_control);
3518 3519 3520
		break;
	}

3521
	kfree_skb(skb);
3522 3523 3524
	return 0;
}

3525 3526
static int l2cap_ertm_data_rcv(struct sock *sk, struct sk_buff *skb)
{
3527
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540
	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.
	 */
3541
	if (l2cap_check_fcs(chan, skb))
3542 3543 3544 3545 3546
		goto drop;

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

3547
	if (chan->fcs == L2CAP_FCS_CRC16)
3548 3549
		len -= 2;

3550
	if (len > chan->mps) {
3551
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3552 3553 3554 3555
		goto drop;
	}

	req_seq = __get_reqseq(control);
3556
	req_seq_offset = (req_seq - chan->expected_ack_seq) % 64;
3557 3558 3559 3560
	if (req_seq_offset < 0)
		req_seq_offset += 64;

	next_tx_seq_offset =
3561
		(chan->next_tx_seq - chan->expected_ack_seq) % 64;
3562 3563 3564 3565 3566
	if (next_tx_seq_offset < 0)
		next_tx_seq_offset += 64;

	/* check for invalid req-seq */
	if (req_seq_offset > next_tx_seq_offset) {
3567
		l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3568 3569 3570 3571 3572
		goto drop;
	}

	if (__is_iframe(control)) {
		if (len < 0) {
3573
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3574 3575 3576
			goto drop;
		}

3577
		l2cap_data_channel_iframe(chan, control, skb);
3578 3579 3580
	} else {
		if (len != 0) {
			BT_ERR("%d", len);
3581
			l2cap_send_disconn_req(chan->conn, chan, ECONNRESET);
3582 3583 3584
			goto drop;
		}

3585
		l2cap_data_channel_sframe(chan, control, skb);
3586 3587 3588 3589 3590 3591 3592 3593 3594
	}

	return 0;

drop:
	kfree_skb(skb);
	return 0;
}

L
Linus Torvalds 已提交
3595 3596
static inline int l2cap_data_channel(struct l2cap_conn *conn, u16 cid, struct sk_buff *skb)
{
3597
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3598
	struct sock *sk;
3599
	struct l2cap_pinfo *pi;
3600
	u16 control;
3601 3602
	u8 tx_seq;
	int len;
L
Linus Torvalds 已提交
3603

3604
	chan = l2cap_get_chan_by_scid(conn, cid);
3605
	if (!chan) {
L
Linus Torvalds 已提交
3606 3607 3608 3609
		BT_DBG("unknown cid 0x%4.4x", cid);
		goto drop;
	}

3610
	sk = chan->sk;
3611 3612
	pi = l2cap_pi(sk);

3613
	BT_DBG("chan %p, len %d", chan, skb->len);
L
Linus Torvalds 已提交
3614 3615 3616 3617

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

3618
	switch (chan->mode) {
3619 3620 3621 3622 3623
	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 已提交
3624

3625
		if (chan->imtu < skb->len)
3626
			goto drop;
L
Linus Torvalds 已提交
3627

3628 3629 3630 3631 3632
		if (!sock_queue_rcv_skb(sk, skb))
			goto done;
		break;

	case L2CAP_MODE_ERTM:
3633 3634
		if (!sock_owned_by_user(sk)) {
			l2cap_ertm_data_rcv(sk, skb);
3635
		} else {
3636
			if (sk_add_backlog(sk, skb))
3637 3638
				goto drop;
		}
3639

3640
		goto done;
3641

3642 3643 3644 3645 3646
	case L2CAP_MODE_STREAMING:
		control = get_unaligned_le16(skb->data);
		skb_pull(skb, 2);
		len = skb->len;

3647
		if (l2cap_check_fcs(chan, skb))
3648 3649
			goto drop;

3650 3651 3652
		if (__is_sar_start(control))
			len -= 2;

3653
		if (chan->fcs == L2CAP_FCS_CRC16)
3654 3655
			len -= 2;

3656
		if (len > chan->mps || len < 0 || __is_sframe(control))
3657 3658 3659 3660
			goto drop;

		tx_seq = __get_txseq(control);

3661 3662
		if (chan->expected_tx_seq == tx_seq)
			chan->expected_tx_seq = (chan->expected_tx_seq + 1) % 64;
3663
		else
3664
			chan->expected_tx_seq = (tx_seq + 1) % 64;
3665

3666
		l2cap_streaming_reassembly_sdu(chan, skb, control);
3667 3668 3669

		goto done;

3670
	default:
3671
		BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
3672 3673
		break;
	}
L
Linus Torvalds 已提交
3674 3675 3676 3677 3678

drop:
	kfree_skb(skb);

done:
3679 3680 3681
	if (sk)
		bh_unlock_sock(sk);

L
Linus Torvalds 已提交
3682 3683 3684
	return 0;
}

3685
static inline int l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm, struct sk_buff *skb)
L
Linus Torvalds 已提交
3686 3687 3688 3689 3690 3691 3692
{
	struct sock *sk;

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

3693 3694
	bh_lock_sock(sk);

L
Linus Torvalds 已提交
3695 3696 3697 3698 3699
	BT_DBG("sk %p, len %d", sk, skb->len);

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

3700
	if (l2cap_pi(sk)->chan->imtu < skb->len)
L
Linus Torvalds 已提交
3701 3702 3703 3704 3705 3706 3707 3708 3709
		goto drop;

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

drop:
	kfree_skb(skb);

done:
3710 3711
	if (sk)
		bh_unlock_sock(sk);
L
Linus Torvalds 已提交
3712 3713 3714
	return 0;
}

3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729
static inline int l2cap_att_channel(struct l2cap_conn *conn, __le16 cid, struct sk_buff *skb)
{
	struct sock *sk;

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

	bh_lock_sock(sk);

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

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

3730
	if (l2cap_pi(sk)->chan->imtu < skb->len)
3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744
		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 已提交
3745 3746 3747
static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
{
	struct l2cap_hdr *lh = (void *) skb->data;
3748 3749
	u16 cid, len;
	__le16 psm;
L
Linus Torvalds 已提交
3750 3751 3752 3753 3754

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

3755 3756 3757 3758 3759
	if (len != skb->len) {
		kfree_skb(skb);
		return;
	}

L
Linus Torvalds 已提交
3760 3761 3762
	BT_DBG("len %d, cid 0x%4.4x", len, cid);

	switch (cid) {
3763
	case L2CAP_CID_LE_SIGNALING:
3764
	case L2CAP_CID_SIGNALING:
L
Linus Torvalds 已提交
3765 3766 3767
		l2cap_sig_channel(conn, skb);
		break;

3768
	case L2CAP_CID_CONN_LESS:
3769
		psm = get_unaligned_le16(skb->data);
L
Linus Torvalds 已提交
3770 3771 3772 3773
		skb_pull(skb, 2);
		l2cap_conless_channel(conn, psm, skb);
		break;

3774 3775 3776 3777
	case L2CAP_CID_LE_DATA:
		l2cap_att_channel(conn, cid, skb);
		break;

L
Linus Torvalds 已提交
3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792
	default:
		l2cap_data_channel(conn, cid, skb);
		break;
	}
}

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

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

	if (type != ACL_LINK)
3793
		return -EINVAL;
L
Linus Torvalds 已提交
3794 3795 3796 3797 3798 3799

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

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

L
Linus Torvalds 已提交
3802 3803 3804 3805
		if (sk->sk_state != BT_LISTEN)
			continue;

		if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
3806
			lm1 |= HCI_LM_ACCEPT;
3807
			if (chan->role_switch)
3808
				lm1 |= HCI_LM_MASTER;
L
Linus Torvalds 已提交
3809
			exact++;
3810 3811
		} else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
			lm2 |= HCI_LM_ACCEPT;
3812
			if (chan->role_switch)
3813 3814
				lm2 |= HCI_LM_MASTER;
		}
L
Linus Torvalds 已提交
3815 3816 3817 3818 3819 3820 3821 3822
	}
	read_unlock(&l2cap_sk_list.lock);

	return exact ? lm1 : lm2;
}

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

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

3827
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3828
		return -EINVAL;
L
Linus Torvalds 已提交
3829 3830 3831 3832 3833

	if (!status) {
		conn = l2cap_conn_add(hcon, status);
		if (conn)
			l2cap_conn_ready(conn);
3834
	} else
L
Linus Torvalds 已提交
3835 3836 3837 3838 3839
		l2cap_conn_del(hcon, bt_err(status));

	return 0;
}

3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852
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 已提交
3853 3854 3855
{
	BT_DBG("hcon %p reason %d", hcon, reason);

3856
	if (!(hcon->type == ACL_LINK || hcon->type == LE_LINK))
3857
		return -EINVAL;
L
Linus Torvalds 已提交
3858 3859

	l2cap_conn_del(hcon, bt_err(reason));
3860

L
Linus Torvalds 已提交
3861 3862 3863
	return 0;
}

3864
static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
3865
{
3866 3867
	struct sock *sk = chan->sk;

3868
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM)
3869 3870
		return;

3871
	if (encrypt == 0x00) {
3872
		if (chan->sec_level == BT_SECURITY_MEDIUM) {
3873 3874
			l2cap_sock_clear_timer(sk);
			l2cap_sock_set_timer(sk, HZ * 5);
3875
		} else if (chan->sec_level == BT_SECURITY_HIGH)
3876 3877
			__l2cap_sock_close(sk, ECONNREFUSED);
	} else {
3878
		if (chan->sec_level == BT_SECURITY_MEDIUM)
3879 3880 3881 3882
			l2cap_sock_clear_timer(sk);
	}
}

3883
static int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
L
Linus Torvalds 已提交
3884
{
3885
	struct l2cap_conn *conn = hcon->l2cap_data;
3886
	struct l2cap_chan *chan;
L
Linus Torvalds 已提交
3887

3888
	if (!conn)
L
Linus Torvalds 已提交
3889
		return 0;
3890

L
Linus Torvalds 已提交
3891 3892
	BT_DBG("conn %p", conn);

3893
	read_lock(&conn->chan_lock);
L
Linus Torvalds 已提交
3894

3895
	list_for_each_entry(chan, &conn->chan_l, list) {
3896
		struct sock *sk = chan->sk;
3897

L
Linus Torvalds 已提交
3898 3899
		bh_lock_sock(sk);

3900
		if (chan->conf_state & L2CAP_CONF_CONNECT_PEND) {
3901 3902 3903 3904
			bh_unlock_sock(sk);
			continue;
		}

3905
		if (!status && (sk->sk_state == BT_CONNECTED ||
3906
						sk->sk_state == BT_CONFIG)) {
3907
			l2cap_check_encryption(chan, encrypt);
3908 3909 3910 3911
			bh_unlock_sock(sk);
			continue;
		}

3912 3913 3914
		if (sk->sk_state == BT_CONNECT) {
			if (!status) {
				struct l2cap_conn_req req;
3915 3916
				req.scid = cpu_to_le16(chan->scid);
				req.psm  = chan->psm;
L
Linus Torvalds 已提交
3917

3918
				chan->ident = l2cap_get_ident(conn);
3919
				chan->conf_state |= L2CAP_CONF_CONNECT_PEND;
L
Linus Torvalds 已提交
3920

3921
				l2cap_send_cmd(conn, chan->ident,
3922 3923 3924 3925 3926 3927 3928 3929
					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 已提交
3930

3931 3932 3933 3934 3935 3936 3937 3938 3939
			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;
			}

3940 3941
			rsp.scid   = cpu_to_le16(chan->dcid);
			rsp.dcid   = cpu_to_le16(chan->scid);
3942
			rsp.result = cpu_to_le16(result);
3943
			rsp.status = cpu_to_le16(L2CAP_CS_NO_INFO);
3944 3945
			l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
							sizeof(rsp), &rsp);
3946
		}
L
Linus Torvalds 已提交
3947 3948 3949 3950

		bh_unlock_sock(sk);
	}

3951
	read_unlock(&conn->chan_lock);
3952

L
Linus Torvalds 已提交
3953 3954 3955 3956 3957 3958 3959
	return 0;
}

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

3960 3961 3962 3963
	if (!conn)
		conn = l2cap_conn_add(hcon, 0);

	if (!conn)
L
Linus Torvalds 已提交
3964 3965 3966 3967
		goto drop;

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

3968
	if (!(flags & ACL_CONT)) {
L
Linus Torvalds 已提交
3969
		struct l2cap_hdr *hdr;
3970
		struct l2cap_chan *chan;
3971
		u16 cid;
L
Linus Torvalds 已提交
3972 3973 3974 3975 3976 3977 3978 3979 3980 3981
		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);
		}

3982 3983
		/* Start fragment always begin with Basic L2CAP header */
		if (skb->len < L2CAP_HDR_SIZE) {
L
Linus Torvalds 已提交
3984 3985 3986 3987 3988 3989 3990
			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;
3991
		cid = __le16_to_cpu(hdr->cid);
L
Linus Torvalds 已提交
3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007

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

4008
		chan = l2cap_get_chan_by_scid(conn, cid);
4009

4010 4011
		if (chan && chan->sk) {
			struct sock *sk = chan->sk;
4012

4013
			if (chan->imtu < len - L2CAP_HDR_SIZE) {
4014 4015
				BT_ERR("Frame exceeding recv MTU (len %d, "
							"MTU %d)", len,
4016
							chan->imtu);
4017 4018 4019 4020
				bh_unlock_sock(sk);
				l2cap_conn_unreliable(conn, ECOMM);
				goto drop;
			}
4021
			bh_unlock_sock(sk);
4022
		}
4023

L
Linus Torvalds 已提交
4024
		/* Allocate skb for the complete frame (with header) */
4025 4026
		conn->rx_skb = bt_skb_alloc(len, GFP_ATOMIC);
		if (!conn->rx_skb)
L
Linus Torvalds 已提交
4027 4028
			goto drop;

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

4051
		skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
4052
								skb->len);
L
Linus Torvalds 已提交
4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066
		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;
}

4067
static int l2cap_debugfs_show(struct seq_file *f, void *p)
L
Linus Torvalds 已提交
4068 4069 4070 4071 4072 4073
{
	struct sock *sk;
	struct hlist_node *node;

	read_lock_bh(&l2cap_sk_list.lock);

4074 4075
	sk_for_each(sk, node, &l2cap_sk_list.head) {
		struct l2cap_pinfo *pi = l2cap_pi(sk);
4076
		struct l2cap_chan *chan = pi->chan;
4077

4078
		seq_printf(f, "%s %s %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
4079 4080
					batostr(&bt_sk(sk)->src),
					batostr(&bt_sk(sk)->dst),
4081 4082
					sk->sk_state, __le16_to_cpu(chan->psm),
					chan->scid, chan->dcid,
4083 4084
					chan->imtu, chan->omtu, chan->sec_level,
					chan->mode);
4085
	}
L
Linus Torvalds 已提交
4086 4087 4088

	read_unlock_bh(&l2cap_sk_list.lock);

4089
	return 0;
L
Linus Torvalds 已提交
4090 4091
}

4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104
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 已提交
4105 4106 4107 4108 4109 4110 4111

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,
4112
	.disconn_cfm	= l2cap_disconn_cfm,
4113
	.security_cfm	= l2cap_security_cfm,
L
Linus Torvalds 已提交
4114 4115 4116
	.recv_acldata	= l2cap_recv_acldata
};

4117
int __init l2cap_init(void)
L
Linus Torvalds 已提交
4118 4119
{
	int err;
4120

4121
	err = l2cap_init_sockets();
L
Linus Torvalds 已提交
4122 4123 4124
	if (err < 0)
		return err;

4125
	_busy_wq = create_singlethread_workqueue("l2cap");
4126
	if (!_busy_wq) {
4127
		err = -ENOMEM;
L
Linus Torvalds 已提交
4128 4129 4130 4131 4132 4133 4134 4135 4136 4137
		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;
	}

4138 4139 4140 4141 4142 4143
	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 已提交
4144 4145 4146 4147

	return 0;

error:
4148
	destroy_workqueue(_busy_wq);
4149
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4150 4151 4152
	return err;
}

4153
void l2cap_exit(void)
L
Linus Torvalds 已提交
4154
{
4155
	debugfs_remove(l2cap_debugfs);
L
Linus Torvalds 已提交
4156

4157 4158 4159
	flush_workqueue(_busy_wq);
	destroy_workqueue(_busy_wq);

L
Linus Torvalds 已提交
4160 4161 4162
	if (hci_unregister_proto(&l2cap_hci_proto) < 0)
		BT_ERR("L2CAP protocol unregistration failed");

4163
	l2cap_cleanup_sockets();
L
Linus Torvalds 已提交
4164 4165
}

4166 4167
module_param(disable_ertm, bool, 0644);
MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");