l2cap_sock.c 27.1 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 105 106 107 108 109
	switch (chan->chan_type) {
	case L2CAP_CHAN_CONN_ORIENTED:
		if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP ||
		    __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM)
			chan->sec_level = BT_SECURITY_SDP;
		break;
	}
110

111
	bacpy(&bt_sk(sk)->src, &la.l2_bdaddr);
112 113

	chan->state = BT_BOUND;
114
	sk->sk_state = BT_BOUND;
115 116 117 118 119 120

done:
	release_sock(sk);
	return err;
}

121 122
static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
			      int alen, int flags)
123 124
{
	struct sock *sk = sock->sk;
125
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
126 127 128 129 130 131 132 133 134 135 136 137 138
	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);

139
	if (la.l2_cid && la.l2_psm)
140 141
		return -EINVAL;

S
Santosh Nayak 已提交
142
	err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
143
				 &la.l2_bdaddr, la.l2_bdaddr_type);
144
	if (err)
145
		return err;
146

147 148
	lock_sock(sk);

149
	err = bt_sock_wait_state(sk, BT_CONNECTED,
150
				 sock_sndtimeo(sk, flags & O_NONBLOCK));
151 152 153

	release_sock(sk);

154 155 156
	return err;
}

157 158 159
static int l2cap_sock_listen(struct socket *sock, int backlog)
{
	struct sock *sk = sock->sk;
160
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
161 162 163 164 165 166
	int err = 0;

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

	lock_sock(sk);

167
	if (sk->sk_state != BT_BOUND) {
168 169 170 171
		err = -EBADFD;
		goto done;
	}

172 173 174 175 176
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
		err = -EINVAL;
		goto done;
	}

177
	switch (chan->mode) {
178 179 180 181 182 183 184 185 186 187 188 189 190 191
	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;
192 193

	chan->state = BT_LISTEN;
194 195 196 197 198 199 200
	sk->sk_state = BT_LISTEN;

done:
	release_sock(sk);
	return err;
}

201 202
static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
			     int flags)
203 204 205 206 207 208 209 210 211 212 213 214 215 216
{
	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);
217
	while (1) {
218
		set_current_state(TASK_INTERRUPTIBLE);
219 220 221

		if (sk->sk_state != BT_LISTEN) {
			err = -EBADFD;
222 223 224
			break;
		}

225 226 227
		nsk = bt_accept_dequeue(sk, newsock);
		if (nsk)
			break;
228

229 230
		if (!timeo) {
			err = -EAGAIN;
231 232 233 234 235 236 237
			break;
		}

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
			break;
		}
238 239 240 241

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
242
	}
243
	__set_current_state(TASK_RUNNING);
244 245 246 247 248 249 250 251 252 253 254 255 256 257
	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;
}

258 259
static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
			      int *len, int peer)
260 261 262
{
	struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
	struct sock *sk = sock->sk;
263
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
264 265 266

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

267
	memset(la, 0, sizeof(struct sockaddr_l2));
268 269 270 271
	addr->sa_family = AF_BLUETOOTH;
	*len = sizeof(struct sockaddr_l2);

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

	return 0;
}

284 285
static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
				     char __user *optval, int __user *optlen)
286 287
{
	struct sock *sk = sock->sk;
288
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
289 290 291 292 293 294 295 296 297 298 299 300 301 302
	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:
303
		memset(&opts, 0, sizeof(opts));
304 305 306 307
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
308 309
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
310
		opts.txwin_size = chan->tx_win;
311 312 313 314 315 316 317 318

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

		break;

	case L2CAP_LM:
319
		switch (chan->sec_level) {
320 321 322 323 324 325 326 327
		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 |
328
			      L2CAP_LM_SECURE;
329 330 331 332 333 334
			break;
		default:
			opt = 0;
			break;
		}

335
		if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
336 337
			opt |= L2CAP_LM_MASTER;

338
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
339 340 341 342 343 344 345 346
			opt |= L2CAP_LM_RELIABLE;

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

	case L2CAP_CONNINFO:
		if (sk->sk_state != BT_CONNECTED &&
347 348
		    !(sk->sk_state == BT_CONNECT2 &&
		      test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
349 350 351 352
			err = -ENOTCONN;
			break;
		}

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

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

372 373
static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, int __user *optlen)
374 375
{
	struct sock *sk = sock->sk;
376
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
377
	struct bt_security sec;
378
	struct bt_power pwr;
379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395
	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:
396
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
397
		    chan->chan_type != L2CAP_CHAN_RAW) {
398 399 400 401
			err = -EINVAL;
			break;
		}

402
		memset(&sec, 0, sizeof(sec));
403
		if (chan->conn) {
404
			sec.level = chan->conn->hcon->sec_level;
405

406 407 408 409 410
			if (sk->sk_state == BT_CONNECTED)
				sec.key_size = chan->conn->hcon->enc_key_size;
		} else {
			sec.level = chan->sec_level;
		}
411

412 413 414 415 416 417 418 419 420 421 422 423
		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;
		}

424 425
		if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
			     (u32 __user *) optval))
426 427 428 429 430
			err = -EFAULT;

		break;

	case BT_FLUSHABLE:
431
		if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
432
			     (u32 __user *) optval))
433 434 435 436
			err = -EFAULT;

		break;

437 438
	case BT_POWER:
		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
439
		    && sk->sk_type != SOCK_RAW) {
440 441 442 443
			err = -EINVAL;
			break;
		}

444
		pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
445 446 447 448 449 450 451

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

		break;

452 453 454 455 456
	case BT_CHANNEL_POLICY:
		if (put_user(chan->chan_policy, (u32 __user *) optval))
			err = -EFAULT;
		break;

457 458 459 460 461 462 463 464 465
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

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

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

	return true;
}

482 483
static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
				     char __user *optval, unsigned int optlen)
484 485
{
	struct sock *sk = sock->sk;
486
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
487 488 489 490 491 492 493 494 495 496 497 498 499 500 501
	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;
		}

502 503 504 505
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
506 507
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
508
		opts.txwin_size = chan->tx_win;
509 510 511 512 513 514 515

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

516
		if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
517 518 519 520
			err = -EINVAL;
			break;
		}

521 522 523 524 525
		if (!l2cap_valid_mtu(chan, opts.imtu)) {
			err = -EINVAL;
			break;
		}

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

541 542
		chan->imtu = opts.imtu;
		chan->omtu = opts.omtu;
543 544
		chan->fcs  = opts.fcs;
		chan->max_tx = opts.max_tx;
545
		chan->tx_win = opts.txwin_size;
546
		chan->flush_to = opts.flush_to;
547 548 549 550 551 552 553 554 555
		break;

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

		if (opt & L2CAP_LM_AUTH)
556
			chan->sec_level = BT_SECURITY_LOW;
557
		if (opt & L2CAP_LM_ENCRYPT)
558
			chan->sec_level = BT_SECURITY_MEDIUM;
559
		if (opt & L2CAP_LM_SECURE)
560
			chan->sec_level = BT_SECURITY_HIGH;
561

562 563 564 565
		if (opt & L2CAP_LM_MASTER)
			set_bit(FLAG_ROLE_SWITCH, &chan->flags);
		else
			clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
566 567 568 569 570

		if (opt & L2CAP_LM_RELIABLE)
			set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
		else
			clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
571 572 573 574 575 576 577 578 579 580 581
		break;

	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

582 583
static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, unsigned int optlen)
584 585
{
	struct sock *sk = sock->sk;
586
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
587
	struct bt_security sec;
588
	struct bt_power pwr;
589
	struct l2cap_conn *conn;
590 591 592 593 594 595 596 597 598 599 600 601 602 603 604
	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:
605
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
606
		    chan->chan_type != L2CAP_CHAN_RAW) {
607 608 609 610 611 612 613 614 615 616 617 618 619
			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 ||
620
		    sec.level > BT_SECURITY_HIGH) {
621 622 623 624
			err = -EINVAL;
			break;
		}

625
		chan->sec_level = sec.level;
626

627 628 629
		if (!chan->conn)
			break;

630
		conn = chan->conn;
631 632

		/*change security for LE channels */
633
		if (chan->scid == L2CAP_CID_ATT) {
634 635 636 637 638
			if (!conn->hcon->out) {
				err = -EINVAL;
				break;
			}

639
			if (smp_conn_security(conn->hcon, sec.level))
640 641
				break;
			sk->sk_state = BT_CONFIG;
642
			chan->state = BT_CONFIG;
643

644 645
		/* or for ACL link */
		} else if ((sk->sk_state == BT_CONNECT2 &&
646
			    test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
647 648
			   sk->sk_state == BT_CONNECTED) {
			if (!l2cap_chan_check_security(chan))
649
				set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
650 651
			else
				sk->sk_state_change(sk);
652 653
		} else {
			err = -EINVAL;
654
		}
655 656 657 658 659 660 661 662 663 664 665 666 667
		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;
		}

668 669 670 671
		if (opt)
			set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
		else
			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
672 673 674 675 676 677 678 679 680 681 682 683 684 685
		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) {
686
			conn = chan->conn;
L
Lucas De Marchi 已提交
687
			/* proceed further only when we have l2cap_conn and
688 689 690 691 692 693 694
			   No Flush support in the LM */
			if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
				err = -EINVAL;
				break;
			}
		}

695 696 697 698
		if (opt)
			set_bit(FLAG_FLUSHABLE, &chan->flags);
		else
			clear_bit(FLAG_FLUSHABLE, &chan->flags);
699 700
		break;

701 702
	case BT_POWER:
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
703
		    chan->chan_type != L2CAP_CHAN_RAW) {
704 705 706 707 708 709 710 711 712 713 714
			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;
		}
715 716 717 718 719

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

722 723 724 725 726 727 728 729 730 731 732 733
	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 &&
734
		    chan->mode != L2CAP_MODE_STREAMING) {
735 736 737 738 739
			err = -EOPNOTSUPP;
			break;
		}

		chan->chan_policy = (u8) opt;
740 741 742 743 744

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

745 746
		break;

747 748 749 750 751 752 753 754
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}
755

756 757
static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
			      struct msghdr *msg, size_t len)
758 759
{
	struct sock *sk = sock->sk;
760
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
761 762 763 764 765 766 767 768 769 770 771
	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;

772
	if (sk->sk_state != BT_CONNECTED)
773
		return -ENOTCONN;
774

775 776 777 778 779 780
	lock_sock(sk);
	err = bt_sock_wait_ready(sk, msg->msg_flags);
	release_sock(sk);
	if (err)
		return err;

781
	l2cap_chan_lock(chan);
782
	err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
783
	l2cap_chan_unlock(chan);
784 785 786

	return err;
}
787

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

	lock_sock(sk);

797 798
	if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
						    &bt_sk(sk)->flags)) {
799
		sk->sk_state = BT_CONFIG;
800
		pi->chan->state = BT_CONFIG;
801

802
		__l2cap_connect_rsp_defer(pi->chan);
803 804
		err = 0;
		goto done;
805 806 807 808 809
	}

	release_sock(sk);

	if (sock->type == SOCK_STREAM)
810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836
		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);
837

838 839 840
done:
	release_sock(sk);
	return err;
841 842
}

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

851
	BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
852 853

	/* Kill poor orphan */
854

855
	l2cap_chan_put(l2cap_pi(sk)->chan);
856 857 858 859
	sock_set_flag(sk, SOCK_DEAD);
	sock_put(sk);
}

860 861 862
static int l2cap_sock_shutdown(struct socket *sock, int how)
{
	struct sock *sk = sock->sk;
863
	struct l2cap_chan *chan;
864
	struct l2cap_conn *conn;
865 866 867 868 869 870 871
	int err = 0;

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

	if (!sk)
		return 0;

872
	chan = l2cap_pi(sk)->chan;
873 874 875 876
	conn = chan->conn;

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

878
	l2cap_chan_lock(chan);
879
	lock_sock(sk);
880

881
	if (!sk->sk_shutdown) {
882
		if (chan->mode == L2CAP_MODE_ERTM)
883 884 885
			err = __l2cap_wait_ack(sk);

		sk->sk_shutdown = SHUTDOWN_MASK;
886

887
		release_sock(sk);
888
		l2cap_chan_close(chan, 0);
889
		lock_sock(sk);
890 891 892

		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
			err = bt_sock_wait_state(sk, BT_CLOSED,
893
						 sk->sk_lingertime);
894 895 896 897 898 899
	}

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

	release_sock(sk);
900
	l2cap_chan_unlock(chan);
901 902 903 904

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

905 906 907
	return err;
}

908 909 910 911 912 913 914 915 916 917
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;

918 919
	bt_sock_unlink(&l2cap_sk_list, sk);

920 921 922 923 924 925 926
	err = l2cap_sock_shutdown(sock, 2);

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

927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945
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);
	}
}

946
static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
947
{
948
	struct sock *sk, *parent = chan->data;
949

950 951 952 953 954 955
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		return NULL;
	}

956
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
957
			      GFP_ATOMIC);
958 959 960
	if (!sk)
		return NULL;

961 962
	bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);

963 964
	l2cap_sock_init(sk, parent);

965 966
	bt_accept_enqueue(parent, sk);

967 968 969
	return l2cap_pi(sk)->chan;
}

970
static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
971
{
972
	int err;
973
	struct sock *sk = chan->data;
974 975
	struct l2cap_pinfo *pi = l2cap_pi(sk);

976 977 978 979 980 981
	lock_sock(sk);

	if (pi->rx_busy_skb) {
		err = -ENOMEM;
		goto done;
	}
982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998

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

1000 1001 1002
done:
	release_sock(sk);

1003
	return err;
1004 1005
}

1006
static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1007
{
1008
	struct sock *sk = chan->data;
1009 1010 1011 1012

	l2cap_sock_kill(sk);
}

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 1050 1051 1052 1053
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);
}

1054
static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state)
1055
{
1056
	struct sock *sk = chan->data;
1057 1058 1059 1060

	sk->sk_state = state;
}

1061
static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1062
					       unsigned long len, int nb)
1063
{
1064 1065 1066
	struct sk_buff *skb;
	int err;

1067
	l2cap_chan_unlock(chan);
1068
	skb = bt_skb_send_alloc(chan->sk, len, nb, &err);
1069 1070
	l2cap_chan_lock(chan);

1071 1072
	if (!skb)
		return ERR_PTR(err);
1073

1074
	return skb;
1075 1076
}

1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096
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);
}

1097 1098 1099 1100 1101 1102 1103 1104 1105
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);
}

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

1118 1119 1120 1121
static void l2cap_sock_destruct(struct sock *sk)
{
	BT_DBG("sk %p", sk);

1122 1123
	if (l2cap_pi(sk)->chan)
		l2cap_chan_put(l2cap_pi(sk)->chan);
1124 1125 1126 1127 1128
	if (l2cap_pi(sk)->rx_busy_skb) {
		kfree_skb(l2cap_pi(sk)->rx_busy_skb);
		l2cap_pi(sk)->rx_busy_skb = NULL;
	}

1129 1130 1131 1132
	skb_queue_purge(&sk->sk_receive_queue);
	skb_queue_purge(&sk->sk_write_queue);
}

1133
static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1134 1135
{
	struct l2cap_pinfo *pi = l2cap_pi(sk);
1136
	struct l2cap_chan *chan = pi->chan;
1137 1138 1139 1140

	BT_DBG("sk %p", sk);

	if (parent) {
1141 1142
		struct l2cap_chan *pchan = l2cap_pi(parent)->chan;

1143
		sk->sk_type = parent->sk_type;
1144
		bt_sk(sk)->flags = bt_sk(parent)->flags;
1145

1146
		chan->chan_type = pchan->chan_type;
1147 1148
		chan->imtu = pchan->imtu;
		chan->omtu = pchan->omtu;
1149
		chan->conf_state = pchan->conf_state;
1150
		chan->mode = pchan->mode;
1151 1152 1153
		chan->fcs  = pchan->fcs;
		chan->max_tx = pchan->max_tx;
		chan->tx_win = pchan->tx_win;
1154
		chan->tx_win_max = pchan->tx_win_max;
1155
		chan->sec_level = pchan->sec_level;
1156
		chan->flags = pchan->flags;
1157 1158

		security_sk_clone(parent, sk);
1159
	} else {
1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173

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

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

		l2cap_chan_set_defaults(chan);
1184 1185 1186
	}

	/* Default config options */
1187
	chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1188 1189 1190

	chan->data = sk;
	chan->ops = &l2cap_chan_ops;
1191 1192 1193 1194 1195 1196 1197 1198
}

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

1199 1200
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
				     int proto, gfp_t prio)
1201 1202
{
	struct sock *sk;
1203
	struct l2cap_chan *chan;
1204 1205 1206 1207 1208 1209 1210 1211 1212

	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;
1213
	sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1214 1215 1216 1217 1218 1219

	sock_reset_flag(sk, SOCK_ZAPPED);

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

1220
	chan = l2cap_chan_create();
1221
	if (!chan) {
1222
		sk_free(sk);
1223 1224 1225
		return NULL;
	}

1226 1227
	l2cap_chan_hold(chan);

1228 1229
	chan->sk = sk;

1230 1231
	l2cap_pi(sk)->chan = chan;

1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244
	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 &&
1245
	    sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257
		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);
1258
	bt_sock_link(&l2cap_sk_list, sk);
1259 1260 1261
	return 0;
}

1262
static const struct proto_ops l2cap_sock_ops = {
1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281
	.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
};

1282 1283 1284 1285 1286 1287 1288 1289
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)
{
1290
	int err;
1291

1292 1293 1294
	err = proto_register(&l2cap_proto, 0);
	if (err < 0)
		return err;
1295

1296
	err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1297 1298
	if (err < 0) {
		BT_ERR("L2CAP socket registration failed");
1299
		goto error;
1300 1301
	}

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

1310
	BT_INFO("L2CAP socket layer initialized");
1311

1312
	return 0;
1313 1314

error:
1315 1316
	proto_unregister(&l2cap_proto);
	return err;
1317 1318 1319 1320
}

void l2cap_cleanup_sockets(void)
{
1321
	bt_procfs_cleanup(&init_net, "l2cap");
1322
	bt_sock_unregister(BTPROTO_L2CAP);
1323
	proto_unregister(&l2cap_proto);
1324
}