l2cap_sock.c 27.0 KB
Newer Older
1 2 3 4 5
/*
   BlueZ - Bluetooth protocol stack for Linux
   Copyright (C) 2000-2001 Qualcomm Incorporated
   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
   Copyright (C) 2010 Google Inc.
6
   Copyright (C) 2011 ProFUSION Embedded Systems
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

   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
   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
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
   SOFTWARE IS DISCLAIMED.
*/

/* Bluetooth L2CAP sockets. */

30
#include <linux/export.h>
31

32
#include <net/bluetooth/bluetooth.h>
33
#include <net/bluetooth/hci_core.h>
34
#include <net/bluetooth/l2cap.h>
35 36

#include "smp.h"
37

38 39 40 41
static struct bt_sock_list l2cap_sk_list = {
	.lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
};

42
static const struct proto_ops l2cap_sock_ops;
43
static void l2cap_sock_init(struct sock *sk, struct sock *parent);
44 45
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
				     int proto, gfp_t prio);
46

47 48 49 50 51 52
bool l2cap_is_socket(struct socket *sock)
{
	return sock && sock->ops == &l2cap_sock_ops;
}
EXPORT_SYMBOL(l2cap_is_socket);

53 54 55
static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
{
	struct sock *sk = sock->sk;
56
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
57 58 59 60 61 62 63 64 65 66 67 68
	struct sockaddr_l2 la;
	int len, err = 0;

	BT_DBG("sk %p", sk);

	if (!addr || addr->sa_family != AF_BLUETOOTH)
		return -EINVAL;

	memset(&la, 0, sizeof(la));
	len = min_t(unsigned int, sizeof(la), alen);
	memcpy(&la, addr, len);

69
	if (la.l2_cid && la.l2_psm)
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
		return -EINVAL;

	lock_sock(sk);

	if (sk->sk_state != BT_OPEN) {
		err = -EBADFD;
		goto done;
	}

	if (la.l2_psm) {
		__u16 psm = __le16_to_cpu(la.l2_psm);

		/* PSM must be odd and lsb of upper byte must be 0 */
		if ((psm & 0x0101) != 0x0001) {
			err = -EINVAL;
			goto done;
		}

		/* Restrict usage of well-known PSMs */
		if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) {
			err = -EACCES;
			goto done;
		}
	}

95
	if (la.l2_cid)
S
Santosh Nayak 已提交
96
		err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
97 98
	else
		err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
99

100 101
	if (err < 0)
		goto done;
102

103 104
	if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
	    __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
105
		chan->sec_level = BT_SECURITY_SDP;
106

107
	bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
108 109

	chan->state = BT_BOUND;
110
	sk->sk_state = BT_BOUND;
111 112 113 114 115 116

done:
	release_sock(sk);
	return err;
}

117 118
static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
			      int alen, int flags)
119 120
{
	struct sock *sk = sock->sk;
121
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
122 123 124 125 126 127 128 129 130 131 132 133 134
	struct sockaddr_l2 la;
	int len, err = 0;

	BT_DBG("sk %p", sk);

	if (!addr || alen < sizeof(addr->sa_family) ||
	    addr->sa_family != AF_BLUETOOTH)
		return -EINVAL;

	memset(&la, 0, sizeof(la));
	len = min_t(unsigned int, sizeof(la), alen);
	memcpy(&la, addr, len);

135
	if (la.l2_cid && la.l2_psm)
136 137
		return -EINVAL;

S
Santosh Nayak 已提交
138
	err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
139
				 &la.l2_bdaddr, la.l2_bdaddr_type);
140
	if (err)
141
		return err;
142

143 144
	lock_sock(sk);

145
	err = bt_sock_wait_state(sk, BT_CONNECTED,
146
				 sock_sndtimeo(sk, flags & O_NONBLOCK));
147 148 149

	release_sock(sk);

150 151 152
	return err;
}

153 154 155
static int l2cap_sock_listen(struct socket *sock, int backlog)
{
	struct sock *sk = sock->sk;
156
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
157 158 159 160 161 162
	int err = 0;

	BT_DBG("sk %p backlog %d", sk, backlog);

	lock_sock(sk);

163
	if (sk->sk_state != BT_BOUND) {
164 165 166 167
		err = -EBADFD;
		goto done;
	}

168 169 170 171 172
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
		err = -EINVAL;
		goto done;
	}

173
	switch (chan->mode) {
174 175 176 177 178 179 180 181 182 183 184 185 186 187
	case L2CAP_MODE_BASIC:
		break;
	case L2CAP_MODE_ERTM:
	case L2CAP_MODE_STREAMING:
		if (!disable_ertm)
			break;
		/* fall through */
	default:
		err = -ENOTSUPP;
		goto done;
	}

	sk->sk_max_ack_backlog = backlog;
	sk->sk_ack_backlog = 0;
188 189

	chan->state = BT_LISTEN;
190 191 192 193 194 195 196
	sk->sk_state = BT_LISTEN;

done:
	release_sock(sk);
	return err;
}

197 198
static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
			     int flags)
199 200 201 202 203 204 205 206 207 208 209 210 211 212
{
	DECLARE_WAITQUEUE(wait, current);
	struct sock *sk = sock->sk, *nsk;
	long timeo;
	int err = 0;

	lock_sock_nested(sk, SINGLE_DEPTH_NESTING);

	timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK);

	BT_DBG("sk %p timeo %ld", sk, timeo);

	/* Wait for an incoming connection. (wake-one). */
	add_wait_queue_exclusive(sk_sleep(sk), &wait);
213
	while (1) {
214
		set_current_state(TASK_INTERRUPTIBLE);
215 216 217

		if (sk->sk_state != BT_LISTEN) {
			err = -EBADFD;
218 219 220
			break;
		}

221 222 223
		nsk = bt_accept_dequeue(sk, newsock);
		if (nsk)
			break;
224

225 226
		if (!timeo) {
			err = -EAGAIN;
227 228 229 230 231 232 233
			break;
		}

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
			break;
		}
234 235 236 237

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
238
	}
239
	__set_current_state(TASK_RUNNING);
240 241 242 243 244 245 246 247 248 249 250 251 252 253
	remove_wait_queue(sk_sleep(sk), &wait);

	if (err)
		goto done;

	newsock->state = SS_CONNECTED;

	BT_DBG("new socket %p", nsk);

done:
	release_sock(sk);
	return err;
}

254 255
static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
			      int *len, int peer)
256 257 258
{
	struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
	struct sock *sk = sock->sk;
259
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
260 261 262

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

263
	memset(la, 0, sizeof(struct sockaddr_l2));
264 265 266 267
	addr->sa_family = AF_BLUETOOTH;
	*len = sizeof(struct sockaddr_l2);

	if (peer) {
268
		la->l2_psm = chan->psm;
269
		bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst);
270
		la->l2_cid = cpu_to_le16(chan->dcid);
271
	} else {
272
		la->l2_psm = chan->sport;
273
		bacpy(&la->l2_bdaddr, &bt_sk(sk)->src);
274
		la->l2_cid = cpu_to_le16(chan->scid);
275 276 277 278 279
	}

	return 0;
}

280 281
static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
				     char __user *optval, int __user *optlen)
282 283
{
	struct sock *sk = sock->sk;
284
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
285 286 287 288 289 290 291 292 293 294 295 296 297 298
	struct l2cap_options opts;
	struct l2cap_conninfo cinfo;
	int len, err = 0;
	u32 opt;

	BT_DBG("sk %p", sk);

	if (get_user(len, optlen))
		return -EFAULT;

	lock_sock(sk);

	switch (optname) {
	case L2CAP_OPTIONS:
299
		memset(&opts, 0, sizeof(opts));
300 301 302 303
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
304 305
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
306
		opts.txwin_size = chan->tx_win;
307 308 309 310 311 312 313 314

		len = min_t(unsigned int, len, sizeof(opts));
		if (copy_to_user(optval, (char *) &opts, len))
			err = -EFAULT;

		break;

	case L2CAP_LM:
315
		switch (chan->sec_level) {
316 317 318 319 320 321 322 323
		case BT_SECURITY_LOW:
			opt = L2CAP_LM_AUTH;
			break;
		case BT_SECURITY_MEDIUM:
			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT;
			break;
		case BT_SECURITY_HIGH:
			opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT |
324
			      L2CAP_LM_SECURE;
325 326 327 328 329 330
			break;
		default:
			opt = 0;
			break;
		}

331
		if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
332 333
			opt |= L2CAP_LM_MASTER;

334
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
335 336 337 338 339 340 341 342
			opt |= L2CAP_LM_RELIABLE;

		if (put_user(opt, (u32 __user *) optval))
			err = -EFAULT;
		break;

	case L2CAP_CONNINFO:
		if (sk->sk_state != BT_CONNECTED &&
343 344
		    !(sk->sk_state == BT_CONNECT2 &&
		      test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
345 346 347 348
			err = -ENOTCONN;
			break;
		}

349
		memset(&cinfo, 0, sizeof(cinfo));
350 351
		cinfo.hci_handle = chan->conn->hcon->handle;
		memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367

		len = min_t(unsigned int, len, sizeof(cinfo));
		if (copy_to_user(optval, (char *) &cinfo, len))
			err = -EFAULT;

		break;

	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

368 369
static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, int __user *optlen)
370 371
{
	struct sock *sk = sock->sk;
372
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
373
	struct bt_security sec;
374
	struct bt_power pwr;
375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
	int len, err = 0;

	BT_DBG("sk %p", sk);

	if (level == SOL_L2CAP)
		return l2cap_sock_getsockopt_old(sock, optname, optval, optlen);

	if (level != SOL_BLUETOOTH)
		return -ENOPROTOOPT;

	if (get_user(len, optlen))
		return -EFAULT;

	lock_sock(sk);

	switch (optname) {
	case BT_SECURITY:
392
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
393
		    chan->chan_type != L2CAP_CHAN_RAW) {
394 395 396 397
			err = -EINVAL;
			break;
		}

398
		memset(&sec, 0, sizeof(sec));
399
		if (chan->conn) {
400
			sec.level = chan->conn->hcon->sec_level;
401

402 403 404 405 406
			if (sk->sk_state == BT_CONNECTED)
				sec.key_size = chan->conn->hcon->enc_key_size;
		} else {
			sec.level = chan->sec_level;
		}
407

408 409 410 411 412 413 414 415 416 417 418 419
		len = min_t(unsigned int, len, sizeof(sec));
		if (copy_to_user(optval, (char *) &sec, len))
			err = -EFAULT;

		break;

	case BT_DEFER_SETUP:
		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
			err = -EINVAL;
			break;
		}

420 421
		if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
			     (u32 __user *) optval))
422 423 424 425 426
			err = -EFAULT;

		break;

	case BT_FLUSHABLE:
427
		if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
428
			     (u32 __user *) optval))
429 430 431 432
			err = -EFAULT;

		break;

433 434
	case BT_POWER:
		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
435
		    && sk->sk_type != SOCK_RAW) {
436 437 438 439
			err = -EINVAL;
			break;
		}

440
		pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
441 442 443 444 445 446 447

		len = min_t(unsigned int, len, sizeof(pwr));
		if (copy_to_user(optval, (char *) &pwr, len))
			err = -EFAULT;

		break;

448 449 450 451 452
	case BT_CHANNEL_POLICY:
		if (put_user(chan->chan_policy, (u32 __user *) optval))
			err = -EFAULT;
		break;

453 454 455 456 457 458 459 460 461
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

462 463 464
static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
{
	switch (chan->scid) {
465
	case L2CAP_CID_ATT:
466
		if (mtu < L2CAP_LE_MIN_MTU)
467 468 469 470 471 472 473 474 475 476 477
			return false;
		break;

	default:
		if (mtu < L2CAP_DEFAULT_MIN_MTU)
			return false;
	}

	return true;
}

478 479
static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
				     char __user *optval, unsigned int optlen)
480 481
{
	struct sock *sk = sock->sk;
482
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
483 484 485 486 487 488 489 490 491 492 493 494 495 496 497
	struct l2cap_options opts;
	int len, err = 0;
	u32 opt;

	BT_DBG("sk %p", sk);

	lock_sock(sk);

	switch (optname) {
	case L2CAP_OPTIONS:
		if (sk->sk_state == BT_CONNECTED) {
			err = -EINVAL;
			break;
		}

498 499 500 501
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
502 503
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
504
		opts.txwin_size = chan->tx_win;
505 506 507 508 509 510 511

		len = min_t(unsigned int, sizeof(opts), optlen);
		if (copy_from_user((char *) &opts, optval, len)) {
			err = -EFAULT;
			break;
		}

512
		if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
513 514 515 516
			err = -EINVAL;
			break;
		}

517 518 519 520 521
		if (!l2cap_valid_mtu(chan, opts.imtu)) {
			err = -EINVAL;
			break;
		}

522 523
		chan->mode = opts.mode;
		switch (chan->mode) {
524
		case L2CAP_MODE_BASIC:
525
			clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
526 527 528 529 530 531 532 533 534 535 536
			break;
		case L2CAP_MODE_ERTM:
		case L2CAP_MODE_STREAMING:
			if (!disable_ertm)
				break;
			/* fall through */
		default:
			err = -EINVAL;
			break;
		}

537 538
		chan->imtu = opts.imtu;
		chan->omtu = opts.omtu;
539 540
		chan->fcs  = opts.fcs;
		chan->max_tx = opts.max_tx;
541
		chan->tx_win = opts.txwin_size;
542
		chan->flush_to = opts.flush_to;
543 544 545 546 547 548 549 550 551
		break;

	case L2CAP_LM:
		if (get_user(opt, (u32 __user *) optval)) {
			err = -EFAULT;
			break;
		}

		if (opt & L2CAP_LM_AUTH)
552
			chan->sec_level = BT_SECURITY_LOW;
553
		if (opt & L2CAP_LM_ENCRYPT)
554
			chan->sec_level = BT_SECURITY_MEDIUM;
555
		if (opt & L2CAP_LM_SECURE)
556
			chan->sec_level = BT_SECURITY_HIGH;
557

558 559 560 561
		if (opt & L2CAP_LM_MASTER)
			set_bit(FLAG_ROLE_SWITCH, &chan->flags);
		else
			clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
562 563 564 565 566

		if (opt & L2CAP_LM_RELIABLE)
			set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
		else
			clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
567 568 569 570 571 572 573 574 575 576 577
		break;

	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

578 579
static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, unsigned int optlen)
580 581
{
	struct sock *sk = sock->sk;
582
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
583
	struct bt_security sec;
584
	struct bt_power pwr;
585
	struct l2cap_conn *conn;
586 587 588 589 590 591 592 593 594 595 596 597 598 599 600
	int len, err = 0;
	u32 opt;

	BT_DBG("sk %p", sk);

	if (level == SOL_L2CAP)
		return l2cap_sock_setsockopt_old(sock, optname, optval, optlen);

	if (level != SOL_BLUETOOTH)
		return -ENOPROTOOPT;

	lock_sock(sk);

	switch (optname) {
	case BT_SECURITY:
601
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
602
		    chan->chan_type != L2CAP_CHAN_RAW) {
603 604 605 606 607 608 609 610 611 612 613 614 615
			err = -EINVAL;
			break;
		}

		sec.level = BT_SECURITY_LOW;

		len = min_t(unsigned int, sizeof(sec), optlen);
		if (copy_from_user((char *) &sec, optval, len)) {
			err = -EFAULT;
			break;
		}

		if (sec.level < BT_SECURITY_LOW ||
616
		    sec.level > BT_SECURITY_HIGH) {
617 618 619 620
			err = -EINVAL;
			break;
		}

621
		chan->sec_level = sec.level;
622

623 624 625
		if (!chan->conn)
			break;

626
		conn = chan->conn;
627 628

		/*change security for LE channels */
629
		if (chan->scid == L2CAP_CID_ATT) {
630 631 632 633 634
			if (!conn->hcon->out) {
				err = -EINVAL;
				break;
			}

635
			if (smp_conn_security(conn->hcon, sec.level))
636 637
				break;
			sk->sk_state = BT_CONFIG;
638
			chan->state = BT_CONFIG;
639

640 641
		/* or for ACL link */
		} else if ((sk->sk_state == BT_CONNECT2 &&
642
			    test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
643 644
			   sk->sk_state == BT_CONNECTED) {
			if (!l2cap_chan_check_security(chan))
645
				set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
646 647
			else
				sk->sk_state_change(sk);
648 649
		} else {
			err = -EINVAL;
650
		}
651 652 653 654 655 656 657 658 659 660 661 662 663
		break;

	case BT_DEFER_SETUP:
		if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
			err = -EINVAL;
			break;
		}

		if (get_user(opt, (u32 __user *) optval)) {
			err = -EFAULT;
			break;
		}

664 665 666 667
		if (opt)
			set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
		else
			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
668 669 670 671 672 673 674 675 676 677 678 679 680 681
		break;

	case BT_FLUSHABLE:
		if (get_user(opt, (u32 __user *) optval)) {
			err = -EFAULT;
			break;
		}

		if (opt > BT_FLUSHABLE_ON) {
			err = -EINVAL;
			break;
		}

		if (opt == BT_FLUSHABLE_OFF) {
682
			conn = chan->conn;
L
Lucas De Marchi 已提交
683
			/* proceed further only when we have l2cap_conn and
684 685 686 687 688 689 690
			   No Flush support in the LM */
			if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
				err = -EINVAL;
				break;
			}
		}

691 692 693 694
		if (opt)
			set_bit(FLAG_FLUSHABLE, &chan->flags);
		else
			clear_bit(FLAG_FLUSHABLE, &chan->flags);
695 696
		break;

697 698
	case BT_POWER:
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
699
		    chan->chan_type != L2CAP_CHAN_RAW) {
700 701 702 703 704 705 706 707 708 709 710
			err = -EINVAL;
			break;
		}

		pwr.force_active = BT_POWER_FORCE_ACTIVE_ON;

		len = min_t(unsigned int, sizeof(pwr), optlen);
		if (copy_from_user((char *) &pwr, optval, len)) {
			err = -EFAULT;
			break;
		}
711 712 713 714 715

		if (pwr.force_active)
			set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
		else
			clear_bit(FLAG_FORCE_ACTIVE, &chan->flags);
716 717
		break;

718 719 720 721 722 723 724 725 726 727 728 729
	case BT_CHANNEL_POLICY:
		if (get_user(opt, (u32 __user *) optval)) {
			err = -EFAULT;
			break;
		}

		if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) {
			err = -EINVAL;
			break;
		}

		if (chan->mode != L2CAP_MODE_ERTM &&
730
		    chan->mode != L2CAP_MODE_STREAMING) {
731 732 733 734 735
			err = -EOPNOTSUPP;
			break;
		}

		chan->chan_policy = (u8) opt;
736 737 738 739 740

		if (sk->sk_state == BT_CONNECTED &&
		    chan->move_role == L2CAP_MOVE_ROLE_NONE)
			l2cap_move_start(chan);

741 742
		break;

743 744 745 746 747 748 749 750
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}
751

752 753
static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
			      struct msghdr *msg, size_t len)
754 755
{
	struct sock *sk = sock->sk;
756
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
757 758 759 760 761 762 763 764 765 766 767
	int err;

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

	err = sock_error(sk);
	if (err)
		return err;

	if (msg->msg_flags & MSG_OOB)
		return -EOPNOTSUPP;

768
	if (sk->sk_state != BT_CONNECTED)
769
		return -ENOTCONN;
770

771 772 773 774 775 776
	lock_sock(sk);
	err = bt_sock_wait_ready(sk, msg->msg_flags);
	release_sock(sk);
	if (err)
		return err;

777
	l2cap_chan_lock(chan);
778
	err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
779
	l2cap_chan_unlock(chan);
780 781 782

	return err;
}
783

784 785
static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
			      struct msghdr *msg, size_t len, int flags)
786 787
{
	struct sock *sk = sock->sk;
788 789
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	int err;
790 791 792

	lock_sock(sk);

793 794
	if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
						    &bt_sk(sk)->flags)) {
795
		sk->sk_state = BT_CONFIG;
796
		pi->chan->state = BT_CONFIG;
797

798
		__l2cap_connect_rsp_defer(pi->chan);
799 800
		err = 0;
		goto done;
801 802 803 804 805
	}

	release_sock(sk);

	if (sock->type == SOCK_STREAM)
806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
		err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags);
	else
		err = bt_sock_recvmsg(iocb, sock, msg, len, flags);

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

	/* Attempt to put pending rx data in the socket buffer */

	lock_sock(sk);

	if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state))
		goto done;

	if (pi->rx_busy_skb) {
		if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb))
			pi->rx_busy_skb = NULL;
		else
			goto done;
	}

	/* Restore data flow when half of the receive buffer is
	 * available.  This avoids resending large numbers of
	 * frames.
	 */
	if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1)
		l2cap_chan_busy(pi->chan, 0);
833

834 835 836
done:
	release_sock(sk);
	return err;
837 838
}

839 840 841
/* Kill socket (only if zapped and orphan)
 * Must be called on unlocked socket.
 */
842
static void l2cap_sock_kill(struct sock *sk)
843 844 845 846
{
	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
		return;

847
	BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
848 849

	/* Kill poor orphan */
850

851
	l2cap_chan_put(l2cap_pi(sk)->chan);
852 853 854 855
	sock_set_flag(sk, SOCK_DEAD);
	sock_put(sk);
}

856 857 858
static int l2cap_sock_shutdown(struct socket *sock, int how)
{
	struct sock *sk = sock->sk;
859
	struct l2cap_chan *chan;
860
	struct l2cap_conn *conn;
861 862 863 864 865 866 867
	int err = 0;

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

	if (!sk)
		return 0;

868
	chan = l2cap_pi(sk)->chan;
869 870 871 872
	conn = chan->conn;

	if (conn)
		mutex_lock(&conn->chan_lock);
873

874
	l2cap_chan_lock(chan);
875
	lock_sock(sk);
876

877
	if (!sk->sk_shutdown) {
878
		if (chan->mode == L2CAP_MODE_ERTM)
879 880 881
			err = __l2cap_wait_ack(sk);

		sk->sk_shutdown = SHUTDOWN_MASK;
882

883
		release_sock(sk);
884
		l2cap_chan_close(chan, 0);
885
		lock_sock(sk);
886 887 888

		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
			err = bt_sock_wait_state(sk, BT_CLOSED,
889
						 sk->sk_lingertime);
890 891 892 893 894 895
	}

	if (!err && sk->sk_err)
		err = -sk->sk_err;

	release_sock(sk);
896
	l2cap_chan_unlock(chan);
897 898 899 900

	if (conn)
		mutex_unlock(&conn->chan_lock);

901 902 903
	return err;
}

904 905 906 907 908 909 910 911 912 913
static int l2cap_sock_release(struct socket *sock)
{
	struct sock *sk = sock->sk;
	int err;

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

	if (!sk)
		return 0;

914 915
	bt_sock_unlink(&l2cap_sk_list, sk);

916 917 918 919 920 921 922
	err = l2cap_sock_shutdown(sock, 2);

	sock_orphan(sk);
	l2cap_sock_kill(sk);
	return err;
}

923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941
static void l2cap_sock_cleanup_listen(struct sock *parent)
{
	struct sock *sk;

	BT_DBG("parent %p", parent);

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

		l2cap_chan_lock(chan);
		__clear_chan_timer(chan);
		l2cap_chan_close(chan, ECONNRESET);
		l2cap_chan_unlock(chan);

		l2cap_sock_kill(sk);
	}
}

942
static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
943
{
944
	struct sock *sk, *parent = chan->data;
945

946 947 948 949 950 951
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		return NULL;
	}

952
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
953
			      GFP_ATOMIC);
954 955 956
	if (!sk)
		return NULL;

957 958
	bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);

959 960
	l2cap_sock_init(sk, parent);

961 962
	bt_accept_enqueue(parent, sk);

963 964 965
	return l2cap_pi(sk)->chan;
}

966
static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
967
{
968
	int err;
969
	struct sock *sk = chan->data;
970 971
	struct l2cap_pinfo *pi = l2cap_pi(sk);

972 973 974 975 976 977
	lock_sock(sk);

	if (pi->rx_busy_skb) {
		err = -ENOMEM;
		goto done;
	}
978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994

	err = sock_queue_rcv_skb(sk, skb);

	/* For ERTM, handle one skb that doesn't fit into the recv
	 * buffer.  This is important to do because the data frames
	 * have already been acked, so the skb cannot be discarded.
	 *
	 * Notify the l2cap core that the buffer is full, so the
	 * LOCAL_BUSY state is entered and no more frames are
	 * acked and reassembled until there is buffer space
	 * available.
	 */
	if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) {
		pi->rx_busy_skb = skb;
		l2cap_chan_busy(pi->chan, 1);
		err = 0;
	}
995

996 997 998
done:
	release_sock(sk);

999
	return err;
1000 1001
}

1002
static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1003
{
1004
	struct sock *sk = chan->data;
1005 1006 1007 1008

	l2cap_sock_kill(sk);
}

1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049
static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err)
{
	struct sock *sk = chan->data;
	struct sock *parent;

	lock_sock(sk);

	parent = bt_sk(sk)->parent;

	sock_set_flag(sk, SOCK_ZAPPED);

	switch (chan->state) {
	case BT_OPEN:
	case BT_BOUND:
	case BT_CLOSED:
		break;
	case BT_LISTEN:
		l2cap_sock_cleanup_listen(sk);
		sk->sk_state = BT_CLOSED;
		chan->state = BT_CLOSED;

		break;
	default:
		sk->sk_state = BT_CLOSED;
		chan->state = BT_CLOSED;

		sk->sk_err = err;

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

		break;
	}

	release_sock(sk);
}

1050
static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state)
1051
{
1052
	struct sock *sk = chan->data;
1053 1054 1055 1056

	sk->sk_state = state;
}

1057
static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1058
					       unsigned long len, int nb)
1059
{
1060 1061 1062
	struct sk_buff *skb;
	int err;

1063
	l2cap_chan_unlock(chan);
1064
	skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
1065 1066
	l2cap_chan_lock(chan);

1067 1068
	if (!skb)
		return ERR_PTR(err);
1069

1070
	return skb;
1071 1072
}

1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092
static void l2cap_sock_ready_cb(struct l2cap_chan *chan)
{
	struct sock *sk = chan->data;
	struct sock *parent;

	lock_sock(sk);

	parent = bt_sk(sk)->parent;

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

	sk->sk_state = BT_CONNECTED;
	sk->sk_state_change(sk);

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

	release_sock(sk);
}

1093 1094 1095 1096 1097 1098 1099 1100 1101
static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
{
	struct sock *sk = chan->data;
	struct sock *parent = bt_sk(sk)->parent;

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

1102 1103 1104
static struct l2cap_ops l2cap_chan_ops = {
	.name		= "L2CAP Socket Interface",
	.new_connection	= l2cap_sock_new_connection_cb,
1105
	.recv		= l2cap_sock_recv_cb,
1106
	.close		= l2cap_sock_close_cb,
1107
	.teardown	= l2cap_sock_teardown_cb,
1108
	.state_change	= l2cap_sock_state_change_cb,
1109
	.ready		= l2cap_sock_ready_cb,
1110
	.defer		= l2cap_sock_defer_cb,
1111
	.alloc_skb	= l2cap_sock_alloc_skb_cb,
1112 1113
};

1114 1115 1116 1117
static void l2cap_sock_destruct(struct sock *sk)
{
	BT_DBG("sk %p", sk);

1118 1119
	if (l2cap_pi(sk)->chan)
		l2cap_chan_put(l2cap_pi(sk)->chan);
1120 1121 1122 1123 1124
	if (l2cap_pi(sk)->rx_busy_skb) {
		kfree_skb(l2cap_pi(sk)->rx_busy_skb);
		l2cap_pi(sk)->rx_busy_skb = NULL;
	}

1125 1126 1127 1128
	skb_queue_purge(&sk->sk_receive_queue);
	skb_queue_purge(&sk->sk_write_queue);
}

1129
static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1130 1131
{
	struct l2cap_pinfo *pi = l2cap_pi(sk);
1132
	struct l2cap_chan *chan = pi->chan;
1133 1134 1135 1136

	BT_DBG("sk %p", sk);

	if (parent) {
1137 1138
		struct l2cap_chan *pchan = l2cap_pi(parent)->chan;

1139
		sk->sk_type = parent->sk_type;
1140
		bt_sk(sk)->flags = bt_sk(parent)->flags;
1141

1142
		chan->chan_type = pchan->chan_type;
1143 1144
		chan->imtu = pchan->imtu;
		chan->omtu = pchan->omtu;
1145
		chan->conf_state = pchan->conf_state;
1146
		chan->mode = pchan->mode;
1147 1148 1149
		chan->fcs  = pchan->fcs;
		chan->max_tx = pchan->max_tx;
		chan->tx_win = pchan->tx_win;
1150
		chan->tx_win_max = pchan->tx_win_max;
1151
		chan->sec_level = pchan->sec_level;
1152
		chan->flags = pchan->flags;
1153 1154

		security_sk_clone(parent, sk);
1155
	} else {
1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169

		switch (sk->sk_type) {
		case SOCK_RAW:
			chan->chan_type = L2CAP_CHAN_RAW;
			break;
		case SOCK_DGRAM:
			chan->chan_type = L2CAP_CHAN_CONN_LESS;
			break;
		case SOCK_SEQPACKET:
		case SOCK_STREAM:
			chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
			break;
		}

1170 1171
		chan->imtu = L2CAP_DEFAULT_MTU;
		chan->omtu = 0;
1172
		if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1173
			chan->mode = L2CAP_MODE_ERTM;
1174
			set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1175
		} else {
1176
			chan->mode = L2CAP_MODE_BASIC;
1177
		}
1178 1179

		l2cap_chan_set_defaults(chan);
1180 1181 1182
	}

	/* Default config options */
1183
	chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1184 1185 1186

	chan->data = sk;
	chan->ops = &l2cap_chan_ops;
1187 1188 1189 1190 1191 1192 1193 1194
}

static struct proto l2cap_proto = {
	.name		= "L2CAP",
	.owner		= THIS_MODULE,
	.obj_size	= sizeof(struct l2cap_pinfo)
};

1195 1196
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
				     int proto, gfp_t prio)
1197 1198
{
	struct sock *sk;
1199
	struct l2cap_chan *chan;
1200 1201 1202 1203 1204 1205 1206 1207 1208

	sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto);
	if (!sk)
		return NULL;

	sock_init_data(sock, sk);
	INIT_LIST_HEAD(&bt_sk(sk)->accept_q);

	sk->sk_destruct = l2cap_sock_destruct;
1209
	sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1210 1211 1212 1213 1214 1215

	sock_reset_flag(sk, SOCK_ZAPPED);

	sk->sk_protocol = proto;
	sk->sk_state = BT_OPEN;

1216
	chan = l2cap_chan_create();
1217
	if (!chan) {
1218
		sk_free(sk);
1219 1220 1221
		return NULL;
	}

1222 1223
	l2cap_chan_hold(chan);

1224 1225
	chan->sk = sk;

1226 1227
	l2cap_pi(sk)->chan = chan;

1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240
	return sk;
}

static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol,
			     int kern)
{
	struct sock *sk;

	BT_DBG("sock %p", sock);

	sock->state = SS_UNCONNECTED;

	if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM &&
1241
	    sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253
		return -ESOCKTNOSUPPORT;

	if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW))
		return -EPERM;

	sock->ops = &l2cap_sock_ops;

	sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC);
	if (!sk)
		return -ENOMEM;

	l2cap_sock_init(sk, NULL);
1254
	bt_sock_link(&l2cap_sk_list, sk);
1255 1256 1257
	return 0;
}

1258
static const struct proto_ops l2cap_sock_ops = {
1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277
	.family		= PF_BLUETOOTH,
	.owner		= THIS_MODULE,
	.release	= l2cap_sock_release,
	.bind		= l2cap_sock_bind,
	.connect	= l2cap_sock_connect,
	.listen		= l2cap_sock_listen,
	.accept		= l2cap_sock_accept,
	.getname	= l2cap_sock_getname,
	.sendmsg	= l2cap_sock_sendmsg,
	.recvmsg	= l2cap_sock_recvmsg,
	.poll		= bt_sock_poll,
	.ioctl		= bt_sock_ioctl,
	.mmap		= sock_no_mmap,
	.socketpair	= sock_no_socketpair,
	.shutdown	= l2cap_sock_shutdown,
	.setsockopt	= l2cap_sock_setsockopt,
	.getsockopt	= l2cap_sock_getsockopt
};

1278 1279 1280 1281 1282 1283 1284 1285
static const struct net_proto_family l2cap_sock_family_ops = {
	.family	= PF_BLUETOOTH,
	.owner	= THIS_MODULE,
	.create	= l2cap_sock_create,
};

int __init l2cap_init_sockets(void)
{
1286
	int err;
1287

1288 1289 1290
	err = proto_register(&l2cap_proto, 0);
	if (err < 0)
		return err;
1291

1292
	err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1293 1294
	if (err < 0) {
		BT_ERR("L2CAP socket registration failed");
1295
		goto error;
1296 1297
	}

1298
	err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
1299
			     NULL);
1300 1301 1302 1303 1304
	if (err < 0) {
		BT_ERR("Failed to create L2CAP proc file");
		bt_sock_unregister(BTPROTO_L2CAP);
		goto error;
	}
1305

1306
	BT_INFO("L2CAP socket layer initialized");
1307

1308
	return 0;
1309 1310

error:
1311 1312
	proto_unregister(&l2cap_proto);
	return err;
1313 1314 1315 1316
}

void l2cap_cleanup_sockets(void)
{
1317
	bt_procfs_cleanup(&init_net, "l2cap");
1318
	bt_sock_unregister(BTPROTO_L2CAP);
1319
	proto_unregister(&l2cap_proto);
1320
}