l2cap_sock.c 31.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/module.h>
31
#include <linux/export.h>
32

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

#include "smp.h"
38

39 40
bool enable_lecoc;

41 42 43 44
static struct bt_sock_list l2cap_sk_list = {
	.lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock)
};

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

50 51 52 53 54 55
bool l2cap_is_socket(struct socket *sock)
{
	return sock && sock->ops == &l2cap_sock_ops;
}
EXPORT_SYMBOL(l2cap_is_socket);

56 57 58
static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
{
	struct sock *sk = sock->sk;
59
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
60 61 62 63 64 65 66 67 68 69 70 71
	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);

72
	if (la.l2_cid && la.l2_psm)
73 74
		return -EINVAL;

75 76 77
	if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
		return -EINVAL;

78
	if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
79
		if (!enable_lecoc && la.l2_psm)
80 81
			return -EINVAL;
		/* We only allow ATT user space socket */
82 83
		if (la.l2_cid &&
		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
84 85 86
			return -EINVAL;
	}

87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109
	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;
		}
	}

110
	if (la.l2_cid)
S
Santosh Nayak 已提交
111
		err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid));
112 113
	else
		err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm);
114

115 116
	if (err < 0)
		goto done;
117

118
	switch (chan->chan_type) {
119 120 121 122
	case L2CAP_CHAN_CONN_LESS:
		if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP)
			chan->sec_level = BT_SECURITY_SDP;
		break;
123 124 125 126 127 128
	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;
	}
129

130
	bacpy(&chan->src, &la.l2_bdaddr);
131
	chan->src_type = la.l2_bdaddr_type;
132 133

	chan->state = BT_BOUND;
134
	sk->sk_state = BT_BOUND;
135 136 137 138 139 140

done:
	release_sock(sk);
	return err;
}

141 142
static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr,
			      int alen, int flags)
143 144
{
	struct sock *sk = sock->sk;
145
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
146 147 148 149 150 151 152 153 154 155 156 157 158
	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);

159
	if (la.l2_cid && la.l2_psm)
160 161
		return -EINVAL;

162 163 164
	if (!bdaddr_type_is_valid(la.l2_bdaddr_type))
		return -EINVAL;

165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189
	/* Check that the socket wasn't bound to something that
	 * conflicts with the address given to connect(). If chan->src
	 * is BDADDR_ANY it means bind() was never used, in which case
	 * chan->src_type and la.l2_bdaddr_type do not need to match.
	 */
	if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) &&
	    bdaddr_type_is_le(la.l2_bdaddr_type)) {
		/* Old user space versions will try to incorrectly bind
		 * the ATT socket using BDADDR_BREDR. We need to accept
		 * this and fix up the source address type only when
		 * both the source CID and destination CID indicate
		 * ATT. Anything else is an invalid combination.
		 */
		if (chan->scid != L2CAP_CID_ATT ||
		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
			return -EINVAL;

		/* We don't have the hdev available here to make a
		 * better decision on random vs public, but since all
		 * user space versions that exhibit this issue anyway do
		 * not support random local addresses assuming public
		 * here is good enough.
		 */
		chan->src_type = BDADDR_LE_PUBLIC;
	}
190 191 192 193

	if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR)
		return -EINVAL;

194
	if (bdaddr_type_is_le(la.l2_bdaddr_type)) {
195
		if (!enable_lecoc && la.l2_psm)
196 197
			return -EINVAL;
		/* We only allow ATT user space socket */
198 199
		if (la.l2_cid &&
		    la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT))
200 201 202
			return -EINVAL;
	}

S
Santosh Nayak 已提交
203
	err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid),
204
				 &la.l2_bdaddr, la.l2_bdaddr_type);
205
	if (err)
206
		return err;
207

208 209
	lock_sock(sk);

210
	err = bt_sock_wait_state(sk, BT_CONNECTED,
211
				 sock_sndtimeo(sk, flags & O_NONBLOCK));
212 213 214

	release_sock(sk);

215 216 217
	return err;
}

218 219 220
static int l2cap_sock_listen(struct socket *sock, int backlog)
{
	struct sock *sk = sock->sk;
221
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
222 223 224 225 226 227
	int err = 0;

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

	lock_sock(sk);

228
	if (sk->sk_state != BT_BOUND) {
229 230 231 232
		err = -EBADFD;
		goto done;
	}

233 234 235 236 237
	if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) {
		err = -EINVAL;
		goto done;
	}

238
	switch (chan->mode) {
239 240 241 242 243 244 245 246 247 248 249 250 251 252
	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;
253 254

	chan->state = BT_LISTEN;
255 256 257 258 259 260 261
	sk->sk_state = BT_LISTEN;

done:
	release_sock(sk);
	return err;
}

262 263
static int l2cap_sock_accept(struct socket *sock, struct socket *newsock,
			     int flags)
264 265 266 267 268 269 270 271 272 273 274 275 276 277
{
	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);
278
	while (1) {
279
		set_current_state(TASK_INTERRUPTIBLE);
280 281 282

		if (sk->sk_state != BT_LISTEN) {
			err = -EBADFD;
283 284 285
			break;
		}

286 287 288
		nsk = bt_accept_dequeue(sk, newsock);
		if (nsk)
			break;
289

290 291
		if (!timeo) {
			err = -EAGAIN;
292 293 294 295 296 297 298
			break;
		}

		if (signal_pending(current)) {
			err = sock_intr_errno(timeo);
			break;
		}
299 300 301 302

		release_sock(sk);
		timeo = schedule_timeout(timeo);
		lock_sock_nested(sk, SINGLE_DEPTH_NESTING);
303
	}
304
	__set_current_state(TASK_RUNNING);
305 306 307 308 309 310 311 312 313 314 315 316 317 318
	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;
}

319 320
static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr,
			      int *len, int peer)
321 322 323
{
	struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr;
	struct sock *sk = sock->sk;
324
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
325 326 327

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

328
	memset(la, 0, sizeof(struct sockaddr_l2));
329 330 331 332
	addr->sa_family = AF_BLUETOOTH;
	*len = sizeof(struct sockaddr_l2);

	if (peer) {
333
		la->l2_psm = chan->psm;
334
		bacpy(&la->l2_bdaddr, &chan->dst);
335
		la->l2_cid = cpu_to_le16(chan->dcid);
336
		la->l2_bdaddr_type = chan->dst_type;
337
	} else {
338
		la->l2_psm = chan->sport;
339
		bacpy(&la->l2_bdaddr, &chan->src);
340
		la->l2_cid = cpu_to_le16(chan->scid);
341
		la->l2_bdaddr_type = chan->src_type;
342 343 344 345 346
	}

	return 0;
}

347 348
static int l2cap_sock_getsockopt_old(struct socket *sock, int optname,
				     char __user *optval, int __user *optlen)
349 350
{
	struct sock *sk = sock->sk;
351
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
352 353 354 355 356 357 358 359 360 361 362 363 364 365
	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:
366
		memset(&opts, 0, sizeof(opts));
367 368 369 370
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
371 372
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
373
		opts.txwin_size = chan->tx_win;
374 375 376 377 378 379 380 381

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

		break;

	case L2CAP_LM:
382
		switch (chan->sec_level) {
383 384 385 386 387 388 389 390
		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 |
391
			      L2CAP_LM_SECURE;
392 393 394 395 396 397
			break;
		default:
			opt = 0;
			break;
		}

398
		if (test_bit(FLAG_ROLE_SWITCH, &chan->flags))
399 400
			opt |= L2CAP_LM_MASTER;

401
		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
402 403 404 405 406 407 408 409
			opt |= L2CAP_LM_RELIABLE;

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

	case L2CAP_CONNINFO:
		if (sk->sk_state != BT_CONNECTED &&
410 411
		    !(sk->sk_state == BT_CONNECT2 &&
		      test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) {
412 413 414 415
			err = -ENOTCONN;
			break;
		}

416
		memset(&cinfo, 0, sizeof(cinfo));
417 418
		cinfo.hci_handle = chan->conn->hcon->handle;
		memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3);
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434

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

435 436
static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, int __user *optlen)
437 438
{
	struct sock *sk = sock->sk;
439
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
440
	struct bt_security sec;
441
	struct bt_power pwr;
442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458
	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:
459
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
460
		    chan->chan_type != L2CAP_CHAN_RAW) {
461 462 463 464
			err = -EINVAL;
			break;
		}

465
		memset(&sec, 0, sizeof(sec));
466
		if (chan->conn) {
467
			sec.level = chan->conn->hcon->sec_level;
468

469 470 471 472 473
			if (sk->sk_state == BT_CONNECTED)
				sec.key_size = chan->conn->hcon->enc_key_size;
		} else {
			sec.level = chan->sec_level;
		}
474

475 476 477 478 479 480 481 482 483 484 485 486
		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;
		}

487 488
		if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
			     (u32 __user *) optval))
489 490 491 492 493
			err = -EFAULT;

		break;

	case BT_FLUSHABLE:
494
		if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags),
495
			     (u32 __user *) optval))
496 497 498 499
			err = -EFAULT;

		break;

500 501
	case BT_POWER:
		if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM
502
		    && sk->sk_type != SOCK_RAW) {
503 504 505 506
			err = -EINVAL;
			break;
		}

507
		pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
508 509 510 511 512 513 514

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

		break;

515 516 517 518 519
	case BT_CHANNEL_POLICY:
		if (put_user(chan->chan_policy, (u32 __user *) optval))
			err = -EFAULT;
		break;

520 521 522 523 524 525 526 527 528
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

529 530 531
static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu)
{
	switch (chan->scid) {
532
	case L2CAP_CID_ATT:
533
		if (mtu < L2CAP_LE_MIN_MTU)
534 535 536 537 538 539 540 541 542 543 544
			return false;
		break;

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

	return true;
}

545 546
static int l2cap_sock_setsockopt_old(struct socket *sock, int optname,
				     char __user *optval, unsigned int optlen)
547 548
{
	struct sock *sk = sock->sk;
549
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
550 551 552 553 554 555 556 557 558 559 560 561 562 563 564
	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;
		}

565 566 567 568
		opts.imtu     = chan->imtu;
		opts.omtu     = chan->omtu;
		opts.flush_to = chan->flush_to;
		opts.mode     = chan->mode;
569 570
		opts.fcs      = chan->fcs;
		opts.max_tx   = chan->max_tx;
571
		opts.txwin_size = chan->tx_win;
572 573 574 575 576 577 578

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

579
		if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) {
580 581 582 583
			err = -EINVAL;
			break;
		}

584 585 586 587 588
		if (!l2cap_valid_mtu(chan, opts.imtu)) {
			err = -EINVAL;
			break;
		}

589 590
		chan->mode = opts.mode;
		switch (chan->mode) {
591
		case L2CAP_MODE_BASIC:
592
			clear_bit(CONF_STATE2_DEVICE, &chan->conf_state);
593 594 595 596 597 598 599 600 601 602 603
			break;
		case L2CAP_MODE_ERTM:
		case L2CAP_MODE_STREAMING:
			if (!disable_ertm)
				break;
			/* fall through */
		default:
			err = -EINVAL;
			break;
		}

604 605
		chan->imtu = opts.imtu;
		chan->omtu = opts.omtu;
606 607
		chan->fcs  = opts.fcs;
		chan->max_tx = opts.max_tx;
608
		chan->tx_win = opts.txwin_size;
609
		chan->flush_to = opts.flush_to;
610 611 612 613 614 615 616 617 618
		break;

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

		if (opt & L2CAP_LM_AUTH)
619
			chan->sec_level = BT_SECURITY_LOW;
620
		if (opt & L2CAP_LM_ENCRYPT)
621
			chan->sec_level = BT_SECURITY_MEDIUM;
622
		if (opt & L2CAP_LM_SECURE)
623
			chan->sec_level = BT_SECURITY_HIGH;
624

625 626 627 628
		if (opt & L2CAP_LM_MASTER)
			set_bit(FLAG_ROLE_SWITCH, &chan->flags);
		else
			clear_bit(FLAG_ROLE_SWITCH, &chan->flags);
629 630 631 632 633

		if (opt & L2CAP_LM_RELIABLE)
			set_bit(FLAG_FORCE_RELIABLE, &chan->flags);
		else
			clear_bit(FLAG_FORCE_RELIABLE, &chan->flags);
634 635 636 637 638 639 640 641 642 643 644
		break;

	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}

645 646
static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
				 char __user *optval, unsigned int optlen)
647 648
{
	struct sock *sk = sock->sk;
649
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
650
	struct bt_security sec;
651
	struct bt_power pwr;
652
	struct l2cap_conn *conn;
653 654 655 656 657 658 659 660 661 662 663 664 665 666 667
	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:
668
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
669
		    chan->chan_type != L2CAP_CHAN_RAW) {
670 671 672 673 674 675 676 677 678 679 680 681 682
			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 ||
683
		    sec.level > BT_SECURITY_HIGH) {
684 685 686 687
			err = -EINVAL;
			break;
		}

688
		chan->sec_level = sec.level;
689

690 691 692
		if (!chan->conn)
			break;

693
		conn = chan->conn;
694 695

		/*change security for LE channels */
696
		if (chan->scid == L2CAP_CID_ATT) {
697 698 699 700 701
			if (!conn->hcon->out) {
				err = -EINVAL;
				break;
			}

702
			if (smp_conn_security(conn->hcon, sec.level))
703 704
				break;
			sk->sk_state = BT_CONFIG;
705
			chan->state = BT_CONFIG;
706

707 708
		/* or for ACL link */
		} else if ((sk->sk_state == BT_CONNECT2 &&
709
			    test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) ||
710 711
			   sk->sk_state == BT_CONNECTED) {
			if (!l2cap_chan_check_security(chan))
712
				set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
713 714
			else
				sk->sk_state_change(sk);
715 716
		} else {
			err = -EINVAL;
717
		}
718 719 720 721 722 723 724 725 726 727 728 729 730
		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;
		}

731
		if (opt) {
732
			set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
733 734
			set_bit(FLAG_DEFER_SETUP, &chan->flags);
		} else {
735
			clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
736 737
			clear_bit(FLAG_DEFER_SETUP, &chan->flags);
		}
738 739 740 741 742 743 744 745 746 747 748 749 750 751
		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) {
752
			conn = chan->conn;
L
Lucas De Marchi 已提交
753
			/* proceed further only when we have l2cap_conn and
754 755 756 757 758 759 760
			   No Flush support in the LM */
			if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) {
				err = -EINVAL;
				break;
			}
		}

761 762 763 764
		if (opt)
			set_bit(FLAG_FLUSHABLE, &chan->flags);
		else
			clear_bit(FLAG_FLUSHABLE, &chan->flags);
765 766
		break;

767 768
	case BT_POWER:
		if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED &&
769
		    chan->chan_type != L2CAP_CHAN_RAW) {
770 771 772 773 774 775 776 777 778 779 780
			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;
		}
781 782 783 784 785

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

788 789 790 791 792 793 794 795 796 797 798 799
	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 &&
800
		    chan->mode != L2CAP_MODE_STREAMING) {
801 802 803 804 805
			err = -EOPNOTSUPP;
			break;
		}

		chan->chan_policy = (u8) opt;
806 807 808 809 810

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

811 812
		break;

813 814 815 816 817 818 819 820
	default:
		err = -ENOPROTOOPT;
		break;
	}

	release_sock(sk);
	return err;
}
821

822 823
static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock,
			      struct msghdr *msg, size_t len)
824 825
{
	struct sock *sk = sock->sk;
826
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
827 828 829 830 831 832 833 834 835 836 837
	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;

838
	if (sk->sk_state != BT_CONNECTED)
839
		return -ENOTCONN;
840

841 842 843 844 845 846
	lock_sock(sk);
	err = bt_sock_wait_ready(sk, msg->msg_flags);
	release_sock(sk);
	if (err)
		return err;

847
	l2cap_chan_lock(chan);
848
	err = l2cap_chan_send(chan, msg, len, sk->sk_priority);
849
	l2cap_chan_unlock(chan);
850 851 852

	return err;
}
853

854 855
static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock,
			      struct msghdr *msg, size_t len, int flags)
856 857
{
	struct sock *sk = sock->sk;
858 859
	struct l2cap_pinfo *pi = l2cap_pi(sk);
	int err;
860 861 862

	lock_sock(sk);

863 864
	if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP,
						    &bt_sk(sk)->flags)) {
865
		sk->sk_state = BT_CONFIG;
866
		pi->chan->state = BT_CONFIG;
867

868
		__l2cap_connect_rsp_defer(pi->chan);
869 870
		err = 0;
		goto done;
871 872 873 874 875
	}

	release_sock(sk);

	if (sock->type == SOCK_STREAM)
876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
		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);
903

904 905 906
done:
	release_sock(sk);
	return err;
907 908
}

909 910 911
/* Kill socket (only if zapped and orphan)
 * Must be called on unlocked socket.
 */
912
static void l2cap_sock_kill(struct sock *sk)
913 914 915 916
{
	if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket)
		return;

917
	BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state));
918 919

	/* Kill poor orphan */
920

921
	l2cap_chan_put(l2cap_pi(sk)->chan);
922 923 924 925
	sock_set_flag(sk, SOCK_DEAD);
	sock_put(sk);
}

926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957
static int __l2cap_wait_ack(struct sock *sk)
{
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
	DECLARE_WAITQUEUE(wait, current);
	int err = 0;
	int timeo = HZ/5;

	add_wait_queue(sk_sleep(sk), &wait);
	set_current_state(TASK_INTERRUPTIBLE);
	while (chan->unacked_frames > 0 && chan->conn) {
		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);
		set_current_state(TASK_INTERRUPTIBLE);

		err = sock_error(sk);
		if (err)
			break;
	}
	set_current_state(TASK_RUNNING);
	remove_wait_queue(sk_sleep(sk), &wait);
	return err;
}

958 959 960
static int l2cap_sock_shutdown(struct socket *sock, int how)
{
	struct sock *sk = sock->sk;
961
	struct l2cap_chan *chan;
962
	struct l2cap_conn *conn;
963 964 965 966 967 968 969
	int err = 0;

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

	if (!sk)
		return 0;

970
	chan = l2cap_pi(sk)->chan;
971 972 973 974
	conn = chan->conn;

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

976
	l2cap_chan_lock(chan);
977
	lock_sock(sk);
978

979
	if (!sk->sk_shutdown) {
980
		if (chan->mode == L2CAP_MODE_ERTM)
981 982 983
			err = __l2cap_wait_ack(sk);

		sk->sk_shutdown = SHUTDOWN_MASK;
984

985
		release_sock(sk);
986
		l2cap_chan_close(chan, 0);
987
		lock_sock(sk);
988 989 990

		if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
			err = bt_sock_wait_state(sk, BT_CLOSED,
991
						 sk->sk_lingertime);
992 993 994 995 996 997
	}

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

	release_sock(sk);
998
	l2cap_chan_unlock(chan);
999 1000 1001 1002

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

1003 1004 1005
	return err;
}

1006 1007 1008 1009 1010 1011 1012 1013 1014 1015
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;

1016 1017
	bt_sock_unlink(&l2cap_sk_list, sk);

1018 1019 1020 1021 1022 1023 1024
	err = l2cap_sock_shutdown(sock, 2);

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

1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043
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);
	}
}

1044
static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan)
1045
{
1046
	struct sock *sk, *parent = chan->data;
1047

1048 1049
	lock_sock(parent);

1050 1051 1052 1053 1054 1055
	/* Check for backlog size */
	if (sk_acceptq_is_full(parent)) {
		BT_DBG("backlog full %d", parent->sk_ack_backlog);
		return NULL;
	}

1056
	sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP,
1057
			      GFP_ATOMIC);
1058 1059 1060
	if (!sk)
		return NULL;

1061 1062
	bt_sock_reclassify_lock(sk, BTPROTO_L2CAP);

1063 1064
	l2cap_sock_init(sk, parent);

1065 1066
	bt_accept_enqueue(parent, sk);

1067 1068
	release_sock(parent);

1069 1070 1071
	return l2cap_pi(sk)->chan;
}

1072
static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb)
1073
{
1074
	struct sock *sk = chan->data;
1075
	int err;
1076

1077 1078
	lock_sock(sk);

1079
	if (l2cap_pi(sk)->rx_busy_skb) {
1080 1081 1082
		err = -ENOMEM;
		goto done;
	}
1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094

	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.
	 */
1095 1096 1097
	if (err < 0 && chan->mode == L2CAP_MODE_ERTM) {
		l2cap_pi(sk)->rx_busy_skb = skb;
		l2cap_chan_busy(chan, 1);
1098 1099
		err = 0;
	}
1100

1101 1102 1103
done:
	release_sock(sk);

1104
	return err;
1105 1106
}

1107
static void l2cap_sock_close_cb(struct l2cap_chan *chan)
1108
{
1109
	struct sock *sk = chan->data;
1110 1111 1112 1113

	l2cap_sock_kill(sk);
}

1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154
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);
}

1155 1156
static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state,
				       int err)
1157
{
1158
	struct sock *sk = chan->data;
1159 1160

	sk->sk_state = state;
1161 1162 1163

	if (err)
		sk->sk_err = err;
1164 1165
}

1166
static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan,
1167
					       unsigned long len, int nb)
1168
{
1169
	struct sock *sk = chan->data;
1170 1171 1172
	struct sk_buff *skb;
	int err;

1173
	l2cap_chan_unlock(chan);
1174
	skb = bt_skb_send_alloc(sk, len, nb, &err);
1175 1176
	l2cap_chan_lock(chan);

1177 1178
	if (!skb)
		return ERR_PTR(err);
1179

1180 1181
	bt_cb(skb)->chan = chan;

1182
	return skb;
1183 1184
}

1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204
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);
}

1205 1206
static void l2cap_sock_defer_cb(struct l2cap_chan *chan)
{
1207 1208 1209
	struct sock *parent, *sk = chan->data;

	lock_sock(sk);
1210

1211
	parent = bt_sk(sk)->parent;
1212 1213
	if (parent)
		parent->sk_data_ready(parent, 0);
1214 1215

	release_sock(sk);
1216 1217
}

1218 1219 1220 1221 1222 1223 1224 1225
static void l2cap_sock_resume_cb(struct l2cap_chan *chan)
{
	struct sock *sk = chan->data;

	clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
	sk->sk_state_change(sk);
}

1226 1227 1228 1229 1230 1231 1232 1233 1234
static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan)
{
	struct sock *sk = chan->data;

	lock_sock(sk);
	sk->sk_shutdown = SHUTDOWN_MASK;
	release_sock(sk);
}

1235 1236 1237 1238 1239 1240 1241
static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan)
{
	struct sock *sk = chan->data;

	return sk->sk_sndtimeo;
}

1242 1243 1244
static struct l2cap_ops l2cap_chan_ops = {
	.name		= "L2CAP Socket Interface",
	.new_connection	= l2cap_sock_new_connection_cb,
1245
	.recv		= l2cap_sock_recv_cb,
1246
	.close		= l2cap_sock_close_cb,
1247
	.teardown	= l2cap_sock_teardown_cb,
1248
	.state_change	= l2cap_sock_state_change_cb,
1249
	.ready		= l2cap_sock_ready_cb,
1250
	.defer		= l2cap_sock_defer_cb,
1251
	.resume		= l2cap_sock_resume_cb,
1252
	.set_shutdown	= l2cap_sock_set_shutdown_cb,
1253
	.get_sndtimeo	= l2cap_sock_get_sndtimeo_cb,
1254
	.alloc_skb	= l2cap_sock_alloc_skb_cb,
1255 1256
};

1257 1258 1259 1260
static void l2cap_sock_destruct(struct sock *sk)
{
	BT_DBG("sk %p", sk);

1261 1262
	if (l2cap_pi(sk)->chan)
		l2cap_chan_put(l2cap_pi(sk)->chan);
1263

1264 1265 1266 1267 1268
	if (l2cap_pi(sk)->rx_busy_skb) {
		kfree_skb(l2cap_pi(sk)->rx_busy_skb);
		l2cap_pi(sk)->rx_busy_skb = NULL;
	}

1269 1270 1271 1272
	skb_queue_purge(&sk->sk_receive_queue);
	skb_queue_purge(&sk->sk_write_queue);
}

1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285
static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name,
			       int *msg_namelen)
{
	struct sockaddr_l2 *la = (struct sockaddr_l2 *) msg_name;

	memset(la, 0, sizeof(struct sockaddr_l2));
	la->l2_family = AF_BLUETOOTH;
	la->l2_psm = bt_cb(skb)->psm;
	bacpy(&la->l2_bdaddr, &bt_cb(skb)->bdaddr);

	*msg_namelen = sizeof(struct sockaddr_l2);
}

1286
static void l2cap_sock_init(struct sock *sk, struct sock *parent)
1287
{
1288
	struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1289 1290 1291 1292

	BT_DBG("sk %p", sk);

	if (parent) {
1293 1294
		struct l2cap_chan *pchan = l2cap_pi(parent)->chan;

1295
		sk->sk_type = parent->sk_type;
1296
		bt_sk(sk)->flags = bt_sk(parent)->flags;
1297

1298
		chan->chan_type = pchan->chan_type;
1299 1300
		chan->imtu = pchan->imtu;
		chan->omtu = pchan->omtu;
1301
		chan->conf_state = pchan->conf_state;
1302
		chan->mode = pchan->mode;
1303 1304 1305
		chan->fcs  = pchan->fcs;
		chan->max_tx = pchan->max_tx;
		chan->tx_win = pchan->tx_win;
1306
		chan->tx_win_max = pchan->tx_win_max;
1307
		chan->sec_level = pchan->sec_level;
1308
		chan->flags = pchan->flags;
1309 1310

		security_sk_clone(parent, sk);
1311
	} else {
1312 1313 1314 1315 1316 1317
		switch (sk->sk_type) {
		case SOCK_RAW:
			chan->chan_type = L2CAP_CHAN_RAW;
			break;
		case SOCK_DGRAM:
			chan->chan_type = L2CAP_CHAN_CONN_LESS;
1318
			bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name;
1319 1320 1321 1322 1323 1324 1325
			break;
		case SOCK_SEQPACKET:
		case SOCK_STREAM:
			chan->chan_type = L2CAP_CHAN_CONN_ORIENTED;
			break;
		}

1326 1327
		chan->imtu = L2CAP_DEFAULT_MTU;
		chan->omtu = 0;
1328
		if (!disable_ertm && sk->sk_type == SOCK_STREAM) {
1329
			chan->mode = L2CAP_MODE_ERTM;
1330
			set_bit(CONF_STATE2_DEVICE, &chan->conf_state);
1331
		} else {
1332
			chan->mode = L2CAP_MODE_BASIC;
1333
		}
1334 1335

		l2cap_chan_set_defaults(chan);
1336 1337 1338
	}

	/* Default config options */
1339
	chan->flush_to = L2CAP_DEFAULT_FLUSH_TO;
1340 1341 1342

	chan->data = sk;
	chan->ops = &l2cap_chan_ops;
1343 1344 1345 1346 1347 1348 1349 1350
}

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

1351 1352
static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock,
				     int proto, gfp_t prio)
1353 1354
{
	struct sock *sk;
1355
	struct l2cap_chan *chan;
1356 1357 1358 1359 1360 1361 1362 1363 1364

	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;
1365
	sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT;
1366 1367 1368 1369 1370 1371

	sock_reset_flag(sk, SOCK_ZAPPED);

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

1372
	chan = l2cap_chan_create();
1373
	if (!chan) {
1374
		sk_free(sk);
1375 1376 1377
		return NULL;
	}

1378 1379
	l2cap_chan_hold(chan);

1380 1381
	l2cap_pi(sk)->chan = chan;

1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394
	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 &&
1395
	    sock->type != SOCK_DGRAM && sock->type != SOCK_RAW)
1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407
		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);
1408
	bt_sock_link(&l2cap_sk_list, sk);
1409 1410 1411
	return 0;
}

1412
static const struct proto_ops l2cap_sock_ops = {
1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431
	.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
};

1432 1433 1434 1435 1436 1437 1438 1439
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)
{
1440
	int err;
1441

1442 1443 1444
	err = proto_register(&l2cap_proto, 0);
	if (err < 0)
		return err;
1445

1446
	err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops);
1447 1448
	if (err < 0) {
		BT_ERR("L2CAP socket registration failed");
1449
		goto error;
1450 1451
	}

1452
	err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list,
1453
			     NULL);
1454 1455 1456 1457 1458
	if (err < 0) {
		BT_ERR("Failed to create L2CAP proc file");
		bt_sock_unregister(BTPROTO_L2CAP);
		goto error;
	}
1459

1460
	BT_INFO("L2CAP socket layer initialized");
1461

1462
	return 0;
1463 1464

error:
1465 1466
	proto_unregister(&l2cap_proto);
	return err;
1467 1468 1469 1470
}

void l2cap_cleanup_sockets(void)
{
1471
	bt_procfs_cleanup(&init_net, "l2cap");
1472
	bt_sock_unregister(BTPROTO_L2CAP);
1473
	proto_unregister(&l2cap_proto);
1474
}
1475 1476 1477

module_param(enable_lecoc, bool, 0644);
MODULE_PARM_DESC(enable_lecoc, "Enable support for LE CoC");