l2cap_sock.c revision 0ce43ce60d5e0c079d33be1fe33ba92828c7e5da
1/* 2 BlueZ - Bluetooth protocol stack for Linux 3 Copyright (C) 2000-2001 Qualcomm Incorporated 4 Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org> 5 Copyright (C) 2010 Google Inc. 6 Copyright (C) 2011 ProFUSION Embedded Systems 7 8 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 9 10 This program is free software; you can redistribute it and/or modify 11 it under the terms of the GNU General Public License version 2 as 12 published by the Free Software Foundation; 13 14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 15 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. 17 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY 18 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 19 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 20 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 21 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 22 23 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 24 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 25 SOFTWARE IS DISCLAIMED. 26*/ 27 28/* Bluetooth L2CAP sockets. */ 29 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 39bool enable_lecoc; 40 41static struct bt_sock_list l2cap_sk_list = { 42 .lock = __RW_LOCK_UNLOCKED(l2cap_sk_list.lock) 43}; 44 45static const struct proto_ops l2cap_sock_ops; 46static void l2cap_sock_init(struct sock *sk, struct sock *parent); 47static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 48 int proto, gfp_t prio); 49 50bool l2cap_is_socket(struct socket *sock) 51{ 52 return sock && sock->ops == &l2cap_sock_ops; 53} 54EXPORT_SYMBOL(l2cap_is_socket); 55 56static int l2cap_validate_bredr_psm(u16 psm) 57{ 58 /* PSM must be odd and lsb of upper byte must be 0 */ 59 if ((psm & 0x0101) != 0x0001) 60 return -EINVAL; 61 62 /* Restrict usage of well-known PSMs */ 63 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) 64 return -EACCES; 65 66 return 0; 67} 68 69static int l2cap_validate_le_psm(u16 psm) 70{ 71 /* Valid LE_PSM ranges are defined only until 0x00ff */ 72 if (psm > 0x00ff) 73 return -EINVAL; 74 75 /* Restrict fixed, SIG assigned PSM values to CAP_NET_BIND_SERVICE */ 76 if (psm <= 0x007f && !capable(CAP_NET_BIND_SERVICE)) 77 return -EACCES; 78 79 return 0; 80} 81 82static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) 83{ 84 struct sock *sk = sock->sk; 85 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 86 struct sockaddr_l2 la; 87 int len, err = 0; 88 89 BT_DBG("sk %p", sk); 90 91 if (!addr || addr->sa_family != AF_BLUETOOTH) 92 return -EINVAL; 93 94 memset(&la, 0, sizeof(la)); 95 len = min_t(unsigned int, sizeof(la), alen); 96 memcpy(&la, addr, len); 97 98 if (la.l2_cid && la.l2_psm) 99 return -EINVAL; 100 101 if (!bdaddr_type_is_valid(la.l2_bdaddr_type)) 102 return -EINVAL; 103 104 if (bdaddr_type_is_le(la.l2_bdaddr_type)) { 105 if (!enable_lecoc && la.l2_psm) 106 return -EINVAL; 107 /* We only allow ATT user space socket */ 108 if (la.l2_cid && 109 la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT)) 110 return -EINVAL; 111 } 112 113 lock_sock(sk); 114 115 if (sk->sk_state != BT_OPEN) { 116 err = -EBADFD; 117 goto done; 118 } 119 120 if (la.l2_psm) { 121 __u16 psm = __le16_to_cpu(la.l2_psm); 122 123 if (la.l2_bdaddr_type == BDADDR_BREDR) 124 err = l2cap_validate_bredr_psm(psm); 125 else 126 err = l2cap_validate_le_psm(psm); 127 128 if (err) 129 goto done; 130 } 131 132 if (la.l2_cid) 133 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid)); 134 else 135 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm); 136 137 if (err < 0) 138 goto done; 139 140 switch (chan->chan_type) { 141 case L2CAP_CHAN_CONN_LESS: 142 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_3DSP) 143 chan->sec_level = BT_SECURITY_SDP; 144 break; 145 case L2CAP_CHAN_CONN_ORIENTED: 146 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP || 147 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM) 148 chan->sec_level = BT_SECURITY_SDP; 149 break; 150 } 151 152 bacpy(&chan->src, &la.l2_bdaddr); 153 chan->src_type = la.l2_bdaddr_type; 154 155 if (chan->psm && bdaddr_type_is_le(chan->src_type)) 156 chan->mode = L2CAP_MODE_LE_FLOWCTL; 157 158 chan->state = BT_BOUND; 159 sk->sk_state = BT_BOUND; 160 161done: 162 release_sock(sk); 163 return err; 164} 165 166static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, 167 int alen, int flags) 168{ 169 struct sock *sk = sock->sk; 170 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 171 struct sockaddr_l2 la; 172 int len, err = 0; 173 174 BT_DBG("sk %p", sk); 175 176 if (!addr || alen < sizeof(addr->sa_family) || 177 addr->sa_family != AF_BLUETOOTH) 178 return -EINVAL; 179 180 memset(&la, 0, sizeof(la)); 181 len = min_t(unsigned int, sizeof(la), alen); 182 memcpy(&la, addr, len); 183 184 if (la.l2_cid && la.l2_psm) 185 return -EINVAL; 186 187 if (!bdaddr_type_is_valid(la.l2_bdaddr_type)) 188 return -EINVAL; 189 190 /* Check that the socket wasn't bound to something that 191 * conflicts with the address given to connect(). If chan->src 192 * is BDADDR_ANY it means bind() was never used, in which case 193 * chan->src_type and la.l2_bdaddr_type do not need to match. 194 */ 195 if (chan->src_type == BDADDR_BREDR && bacmp(&chan->src, BDADDR_ANY) && 196 bdaddr_type_is_le(la.l2_bdaddr_type)) { 197 /* Old user space versions will try to incorrectly bind 198 * the ATT socket using BDADDR_BREDR. We need to accept 199 * this and fix up the source address type only when 200 * both the source CID and destination CID indicate 201 * ATT. Anything else is an invalid combination. 202 */ 203 if (chan->scid != L2CAP_CID_ATT || 204 la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT)) 205 return -EINVAL; 206 207 /* We don't have the hdev available here to make a 208 * better decision on random vs public, but since all 209 * user space versions that exhibit this issue anyway do 210 * not support random local addresses assuming public 211 * here is good enough. 212 */ 213 chan->src_type = BDADDR_LE_PUBLIC; 214 } 215 216 if (chan->src_type != BDADDR_BREDR && la.l2_bdaddr_type == BDADDR_BREDR) 217 return -EINVAL; 218 219 if (bdaddr_type_is_le(la.l2_bdaddr_type)) { 220 if (!enable_lecoc && la.l2_psm) 221 return -EINVAL; 222 /* We only allow ATT user space socket */ 223 if (la.l2_cid && 224 la.l2_cid != __constant_cpu_to_le16(L2CAP_CID_ATT)) 225 return -EINVAL; 226 } 227 228 if (chan->psm && bdaddr_type_is_le(chan->src_type)) 229 chan->mode = L2CAP_MODE_LE_FLOWCTL; 230 231 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), 232 &la.l2_bdaddr, la.l2_bdaddr_type); 233 if (err) 234 return err; 235 236 lock_sock(sk); 237 238 err = bt_sock_wait_state(sk, BT_CONNECTED, 239 sock_sndtimeo(sk, flags & O_NONBLOCK)); 240 241 release_sock(sk); 242 243 return err; 244} 245 246static int l2cap_sock_listen(struct socket *sock, int backlog) 247{ 248 struct sock *sk = sock->sk; 249 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 250 int err = 0; 251 252 BT_DBG("sk %p backlog %d", sk, backlog); 253 254 lock_sock(sk); 255 256 if (sk->sk_state != BT_BOUND) { 257 err = -EBADFD; 258 goto done; 259 } 260 261 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { 262 err = -EINVAL; 263 goto done; 264 } 265 266 switch (chan->mode) { 267 case L2CAP_MODE_BASIC: 268 case L2CAP_MODE_LE_FLOWCTL: 269 break; 270 case L2CAP_MODE_ERTM: 271 case L2CAP_MODE_STREAMING: 272 if (!disable_ertm) 273 break; 274 /* fall through */ 275 default: 276 err = -ENOTSUPP; 277 goto done; 278 } 279 280 sk->sk_max_ack_backlog = backlog; 281 sk->sk_ack_backlog = 0; 282 283 chan->state = BT_LISTEN; 284 sk->sk_state = BT_LISTEN; 285 286done: 287 release_sock(sk); 288 return err; 289} 290 291static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, 292 int flags) 293{ 294 DECLARE_WAITQUEUE(wait, current); 295 struct sock *sk = sock->sk, *nsk; 296 long timeo; 297 int err = 0; 298 299 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 300 301 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 302 303 BT_DBG("sk %p timeo %ld", sk, timeo); 304 305 /* Wait for an incoming connection. (wake-one). */ 306 add_wait_queue_exclusive(sk_sleep(sk), &wait); 307 while (1) { 308 set_current_state(TASK_INTERRUPTIBLE); 309 310 if (sk->sk_state != BT_LISTEN) { 311 err = -EBADFD; 312 break; 313 } 314 315 nsk = bt_accept_dequeue(sk, newsock); 316 if (nsk) 317 break; 318 319 if (!timeo) { 320 err = -EAGAIN; 321 break; 322 } 323 324 if (signal_pending(current)) { 325 err = sock_intr_errno(timeo); 326 break; 327 } 328 329 release_sock(sk); 330 timeo = schedule_timeout(timeo); 331 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 332 } 333 __set_current_state(TASK_RUNNING); 334 remove_wait_queue(sk_sleep(sk), &wait); 335 336 if (err) 337 goto done; 338 339 newsock->state = SS_CONNECTED; 340 341 BT_DBG("new socket %p", nsk); 342 343done: 344 release_sock(sk); 345 return err; 346} 347 348static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, 349 int *len, int peer) 350{ 351 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr; 352 struct sock *sk = sock->sk; 353 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 354 355 BT_DBG("sock %p, sk %p", sock, sk); 356 357 memset(la, 0, sizeof(struct sockaddr_l2)); 358 addr->sa_family = AF_BLUETOOTH; 359 *len = sizeof(struct sockaddr_l2); 360 361 if (peer) { 362 la->l2_psm = chan->psm; 363 bacpy(&la->l2_bdaddr, &chan->dst); 364 la->l2_cid = cpu_to_le16(chan->dcid); 365 la->l2_bdaddr_type = chan->dst_type; 366 } else { 367 la->l2_psm = chan->sport; 368 bacpy(&la->l2_bdaddr, &chan->src); 369 la->l2_cid = cpu_to_le16(chan->scid); 370 la->l2_bdaddr_type = chan->src_type; 371 } 372 373 return 0; 374} 375 376static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, 377 char __user *optval, int __user *optlen) 378{ 379 struct sock *sk = sock->sk; 380 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 381 struct l2cap_options opts; 382 struct l2cap_conninfo cinfo; 383 int len, err = 0; 384 u32 opt; 385 386 BT_DBG("sk %p", sk); 387 388 if (get_user(len, optlen)) 389 return -EFAULT; 390 391 lock_sock(sk); 392 393 switch (optname) { 394 case L2CAP_OPTIONS: 395 /* LE sockets should use BT_SNDMTU/BT_RCVMTU, but since 396 * legacy ATT code depends on getsockopt for 397 * L2CAP_OPTIONS we need to let this pass. 398 */ 399 if (bdaddr_type_is_le(chan->src_type) && 400 chan->scid != L2CAP_CID_ATT) { 401 err = -EINVAL; 402 break; 403 } 404 405 memset(&opts, 0, sizeof(opts)); 406 opts.imtu = chan->imtu; 407 opts.omtu = chan->omtu; 408 opts.flush_to = chan->flush_to; 409 opts.mode = chan->mode; 410 opts.fcs = chan->fcs; 411 opts.max_tx = chan->max_tx; 412 opts.txwin_size = chan->tx_win; 413 414 len = min_t(unsigned int, len, sizeof(opts)); 415 if (copy_to_user(optval, (char *) &opts, len)) 416 err = -EFAULT; 417 418 break; 419 420 case L2CAP_LM: 421 switch (chan->sec_level) { 422 case BT_SECURITY_LOW: 423 opt = L2CAP_LM_AUTH; 424 break; 425 case BT_SECURITY_MEDIUM: 426 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT; 427 break; 428 case BT_SECURITY_HIGH: 429 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT | 430 L2CAP_LM_SECURE; 431 break; 432 default: 433 opt = 0; 434 break; 435 } 436 437 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags)) 438 opt |= L2CAP_LM_MASTER; 439 440 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) 441 opt |= L2CAP_LM_RELIABLE; 442 443 if (put_user(opt, (u32 __user *) optval)) 444 err = -EFAULT; 445 break; 446 447 case L2CAP_CONNINFO: 448 if (sk->sk_state != BT_CONNECTED && 449 !(sk->sk_state == BT_CONNECT2 && 450 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { 451 err = -ENOTCONN; 452 break; 453 } 454 455 memset(&cinfo, 0, sizeof(cinfo)); 456 cinfo.hci_handle = chan->conn->hcon->handle; 457 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3); 458 459 len = min_t(unsigned int, len, sizeof(cinfo)); 460 if (copy_to_user(optval, (char *) &cinfo, len)) 461 err = -EFAULT; 462 463 break; 464 465 default: 466 err = -ENOPROTOOPT; 467 break; 468 } 469 470 release_sock(sk); 471 return err; 472} 473 474static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, 475 char __user *optval, int __user *optlen) 476{ 477 struct sock *sk = sock->sk; 478 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 479 struct bt_security sec; 480 struct bt_power pwr; 481 int len, err = 0; 482 483 BT_DBG("sk %p", sk); 484 485 if (level == SOL_L2CAP) 486 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen); 487 488 if (level != SOL_BLUETOOTH) 489 return -ENOPROTOOPT; 490 491 if (get_user(len, optlen)) 492 return -EFAULT; 493 494 lock_sock(sk); 495 496 switch (optname) { 497 case BT_SECURITY: 498 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 499 chan->chan_type != L2CAP_CHAN_RAW) { 500 err = -EINVAL; 501 break; 502 } 503 504 memset(&sec, 0, sizeof(sec)); 505 if (chan->conn) { 506 sec.level = chan->conn->hcon->sec_level; 507 508 if (sk->sk_state == BT_CONNECTED) 509 sec.key_size = chan->conn->hcon->enc_key_size; 510 } else { 511 sec.level = chan->sec_level; 512 } 513 514 len = min_t(unsigned int, len, sizeof(sec)); 515 if (copy_to_user(optval, (char *) &sec, len)) 516 err = -EFAULT; 517 518 break; 519 520 case BT_DEFER_SETUP: 521 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 522 err = -EINVAL; 523 break; 524 } 525 526 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), 527 (u32 __user *) optval)) 528 err = -EFAULT; 529 530 break; 531 532 case BT_FLUSHABLE: 533 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags), 534 (u32 __user *) optval)) 535 err = -EFAULT; 536 537 break; 538 539 case BT_POWER: 540 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 541 && sk->sk_type != SOCK_RAW) { 542 err = -EINVAL; 543 break; 544 } 545 546 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags); 547 548 len = min_t(unsigned int, len, sizeof(pwr)); 549 if (copy_to_user(optval, (char *) &pwr, len)) 550 err = -EFAULT; 551 552 break; 553 554 case BT_CHANNEL_POLICY: 555 if (put_user(chan->chan_policy, (u32 __user *) optval)) 556 err = -EFAULT; 557 break; 558 559 case BT_SNDMTU: 560 if (!enable_lecoc) { 561 err = -EPROTONOSUPPORT; 562 break; 563 } 564 565 if (!bdaddr_type_is_le(chan->src_type)) { 566 err = -EINVAL; 567 break; 568 } 569 570 if (sk->sk_state != BT_CONNECTED) { 571 err = -ENOTCONN; 572 break; 573 } 574 575 if (put_user(chan->omtu, (u16 __user *) optval)) 576 err = -EFAULT; 577 break; 578 579 case BT_RCVMTU: 580 if (!enable_lecoc) { 581 err = -EPROTONOSUPPORT; 582 break; 583 } 584 585 if (!bdaddr_type_is_le(chan->src_type)) { 586 err = -EINVAL; 587 break; 588 } 589 590 if (put_user(chan->imtu, (u16 __user *) optval)) 591 err = -EFAULT; 592 break; 593 594 default: 595 err = -ENOPROTOOPT; 596 break; 597 } 598 599 release_sock(sk); 600 return err; 601} 602 603static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu) 604{ 605 switch (chan->scid) { 606 case L2CAP_CID_ATT: 607 if (mtu < L2CAP_LE_MIN_MTU) 608 return false; 609 break; 610 611 default: 612 if (mtu < L2CAP_DEFAULT_MIN_MTU) 613 return false; 614 } 615 616 return true; 617} 618 619static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, 620 char __user *optval, unsigned int optlen) 621{ 622 struct sock *sk = sock->sk; 623 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 624 struct l2cap_options opts; 625 int len, err = 0; 626 u32 opt; 627 628 BT_DBG("sk %p", sk); 629 630 lock_sock(sk); 631 632 switch (optname) { 633 case L2CAP_OPTIONS: 634 if (bdaddr_type_is_le(chan->src_type)) { 635 err = -EINVAL; 636 break; 637 } 638 639 if (sk->sk_state == BT_CONNECTED) { 640 err = -EINVAL; 641 break; 642 } 643 644 opts.imtu = chan->imtu; 645 opts.omtu = chan->omtu; 646 opts.flush_to = chan->flush_to; 647 opts.mode = chan->mode; 648 opts.fcs = chan->fcs; 649 opts.max_tx = chan->max_tx; 650 opts.txwin_size = chan->tx_win; 651 652 len = min_t(unsigned int, sizeof(opts), optlen); 653 if (copy_from_user((char *) &opts, optval, len)) { 654 err = -EFAULT; 655 break; 656 } 657 658 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) { 659 err = -EINVAL; 660 break; 661 } 662 663 if (!l2cap_valid_mtu(chan, opts.imtu)) { 664 err = -EINVAL; 665 break; 666 } 667 668 chan->mode = opts.mode; 669 switch (chan->mode) { 670 case L2CAP_MODE_LE_FLOWCTL: 671 break; 672 case L2CAP_MODE_BASIC: 673 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state); 674 break; 675 case L2CAP_MODE_ERTM: 676 case L2CAP_MODE_STREAMING: 677 if (!disable_ertm) 678 break; 679 /* fall through */ 680 default: 681 err = -EINVAL; 682 break; 683 } 684 685 chan->imtu = opts.imtu; 686 chan->omtu = opts.omtu; 687 chan->fcs = opts.fcs; 688 chan->max_tx = opts.max_tx; 689 chan->tx_win = opts.txwin_size; 690 chan->flush_to = opts.flush_to; 691 break; 692 693 case L2CAP_LM: 694 if (get_user(opt, (u32 __user *) optval)) { 695 err = -EFAULT; 696 break; 697 } 698 699 if (opt & L2CAP_LM_AUTH) 700 chan->sec_level = BT_SECURITY_LOW; 701 if (opt & L2CAP_LM_ENCRYPT) 702 chan->sec_level = BT_SECURITY_MEDIUM; 703 if (opt & L2CAP_LM_SECURE) 704 chan->sec_level = BT_SECURITY_HIGH; 705 706 if (opt & L2CAP_LM_MASTER) 707 set_bit(FLAG_ROLE_SWITCH, &chan->flags); 708 else 709 clear_bit(FLAG_ROLE_SWITCH, &chan->flags); 710 711 if (opt & L2CAP_LM_RELIABLE) 712 set_bit(FLAG_FORCE_RELIABLE, &chan->flags); 713 else 714 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags); 715 break; 716 717 default: 718 err = -ENOPROTOOPT; 719 break; 720 } 721 722 release_sock(sk); 723 return err; 724} 725 726static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, 727 char __user *optval, unsigned int optlen) 728{ 729 struct sock *sk = sock->sk; 730 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 731 struct bt_security sec; 732 struct bt_power pwr; 733 struct l2cap_conn *conn; 734 int len, err = 0; 735 u32 opt; 736 737 BT_DBG("sk %p", sk); 738 739 if (level == SOL_L2CAP) 740 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen); 741 742 if (level != SOL_BLUETOOTH) 743 return -ENOPROTOOPT; 744 745 lock_sock(sk); 746 747 switch (optname) { 748 case BT_SECURITY: 749 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 750 chan->chan_type != L2CAP_CHAN_RAW) { 751 err = -EINVAL; 752 break; 753 } 754 755 sec.level = BT_SECURITY_LOW; 756 757 len = min_t(unsigned int, sizeof(sec), optlen); 758 if (copy_from_user((char *) &sec, optval, len)) { 759 err = -EFAULT; 760 break; 761 } 762 763 if (sec.level < BT_SECURITY_LOW || 764 sec.level > BT_SECURITY_HIGH) { 765 err = -EINVAL; 766 break; 767 } 768 769 chan->sec_level = sec.level; 770 771 if (!chan->conn) 772 break; 773 774 conn = chan->conn; 775 776 /*change security for LE channels */ 777 if (chan->scid == L2CAP_CID_ATT) { 778 if (!conn->hcon->out) { 779 err = -EINVAL; 780 break; 781 } 782 783 if (smp_conn_security(conn->hcon, sec.level)) 784 break; 785 sk->sk_state = BT_CONFIG; 786 chan->state = BT_CONFIG; 787 788 /* or for ACL link */ 789 } else if ((sk->sk_state == BT_CONNECT2 && 790 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || 791 sk->sk_state == BT_CONNECTED) { 792 if (!l2cap_chan_check_security(chan)) 793 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 794 else 795 sk->sk_state_change(sk); 796 } else { 797 err = -EINVAL; 798 } 799 break; 800 801 case BT_DEFER_SETUP: 802 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 803 err = -EINVAL; 804 break; 805 } 806 807 if (get_user(opt, (u32 __user *) optval)) { 808 err = -EFAULT; 809 break; 810 } 811 812 if (opt) { 813 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 814 set_bit(FLAG_DEFER_SETUP, &chan->flags); 815 } else { 816 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 817 clear_bit(FLAG_DEFER_SETUP, &chan->flags); 818 } 819 break; 820 821 case BT_FLUSHABLE: 822 if (get_user(opt, (u32 __user *) optval)) { 823 err = -EFAULT; 824 break; 825 } 826 827 if (opt > BT_FLUSHABLE_ON) { 828 err = -EINVAL; 829 break; 830 } 831 832 if (opt == BT_FLUSHABLE_OFF) { 833 conn = chan->conn; 834 /* proceed further only when we have l2cap_conn and 835 No Flush support in the LM */ 836 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) { 837 err = -EINVAL; 838 break; 839 } 840 } 841 842 if (opt) 843 set_bit(FLAG_FLUSHABLE, &chan->flags); 844 else 845 clear_bit(FLAG_FLUSHABLE, &chan->flags); 846 break; 847 848 case BT_POWER: 849 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 850 chan->chan_type != L2CAP_CHAN_RAW) { 851 err = -EINVAL; 852 break; 853 } 854 855 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON; 856 857 len = min_t(unsigned int, sizeof(pwr), optlen); 858 if (copy_from_user((char *) &pwr, optval, len)) { 859 err = -EFAULT; 860 break; 861 } 862 863 if (pwr.force_active) 864 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); 865 else 866 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags); 867 break; 868 869 case BT_CHANNEL_POLICY: 870 if (get_user(opt, (u32 __user *) optval)) { 871 err = -EFAULT; 872 break; 873 } 874 875 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) { 876 err = -EINVAL; 877 break; 878 } 879 880 if (chan->mode != L2CAP_MODE_ERTM && 881 chan->mode != L2CAP_MODE_STREAMING) { 882 err = -EOPNOTSUPP; 883 break; 884 } 885 886 chan->chan_policy = (u8) opt; 887 888 if (sk->sk_state == BT_CONNECTED && 889 chan->move_role == L2CAP_MOVE_ROLE_NONE) 890 l2cap_move_start(chan); 891 892 break; 893 894 case BT_SNDMTU: 895 if (!enable_lecoc) { 896 err = -EPROTONOSUPPORT; 897 break; 898 } 899 900 if (!bdaddr_type_is_le(chan->src_type)) { 901 err = -EINVAL; 902 break; 903 } 904 905 /* Setting is not supported as it's the remote side that 906 * decides this. 907 */ 908 err = -EPERM; 909 break; 910 911 case BT_RCVMTU: 912 if (!enable_lecoc) { 913 err = -EPROTONOSUPPORT; 914 break; 915 } 916 917 if (!bdaddr_type_is_le(chan->src_type)) { 918 err = -EINVAL; 919 break; 920 } 921 922 if (sk->sk_state == BT_CONNECTED) { 923 err = -EISCONN; 924 break; 925 } 926 927 if (get_user(opt, (u32 __user *) optval)) { 928 err = -EFAULT; 929 break; 930 } 931 932 chan->imtu = opt; 933 break; 934 935 default: 936 err = -ENOPROTOOPT; 937 break; 938 } 939 940 release_sock(sk); 941 return err; 942} 943 944static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, 945 struct msghdr *msg, size_t len) 946{ 947 struct sock *sk = sock->sk; 948 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 949 int err; 950 951 BT_DBG("sock %p, sk %p", sock, sk); 952 953 err = sock_error(sk); 954 if (err) 955 return err; 956 957 if (msg->msg_flags & MSG_OOB) 958 return -EOPNOTSUPP; 959 960 if (sk->sk_state != BT_CONNECTED) 961 return -ENOTCONN; 962 963 lock_sock(sk); 964 err = bt_sock_wait_ready(sk, msg->msg_flags); 965 release_sock(sk); 966 if (err) 967 return err; 968 969 l2cap_chan_lock(chan); 970 err = l2cap_chan_send(chan, msg, len, sk->sk_priority); 971 l2cap_chan_unlock(chan); 972 973 return err; 974} 975 976static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, 977 struct msghdr *msg, size_t len, int flags) 978{ 979 struct sock *sk = sock->sk; 980 struct l2cap_pinfo *pi = l2cap_pi(sk); 981 int err; 982 983 lock_sock(sk); 984 985 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, 986 &bt_sk(sk)->flags)) { 987 if (bdaddr_type_is_le(pi->chan->src_type)) { 988 sk->sk_state = BT_CONNECTED; 989 pi->chan->state = BT_CONNECTED; 990 __l2cap_le_connect_rsp_defer(pi->chan); 991 } else { 992 sk->sk_state = BT_CONFIG; 993 pi->chan->state = BT_CONFIG; 994 __l2cap_connect_rsp_defer(pi->chan); 995 } 996 997 err = 0; 998 goto done; 999 } 1000 1001 release_sock(sk); 1002 1003 if (sock->type == SOCK_STREAM) 1004 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags); 1005 else 1006 err = bt_sock_recvmsg(iocb, sock, msg, len, flags); 1007 1008 if (pi->chan->mode != L2CAP_MODE_ERTM) 1009 return err; 1010 1011 /* Attempt to put pending rx data in the socket buffer */ 1012 1013 lock_sock(sk); 1014 1015 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state)) 1016 goto done; 1017 1018 if (pi->rx_busy_skb) { 1019 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb)) 1020 pi->rx_busy_skb = NULL; 1021 else 1022 goto done; 1023 } 1024 1025 /* Restore data flow when half of the receive buffer is 1026 * available. This avoids resending large numbers of 1027 * frames. 1028 */ 1029 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) 1030 l2cap_chan_busy(pi->chan, 0); 1031 1032done: 1033 release_sock(sk); 1034 return err; 1035} 1036 1037/* Kill socket (only if zapped and orphan) 1038 * Must be called on unlocked socket. 1039 */ 1040static void l2cap_sock_kill(struct sock *sk) 1041{ 1042 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) 1043 return; 1044 1045 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); 1046 1047 /* Kill poor orphan */ 1048 1049 l2cap_chan_put(l2cap_pi(sk)->chan); 1050 sock_set_flag(sk, SOCK_DEAD); 1051 sock_put(sk); 1052} 1053 1054static int __l2cap_wait_ack(struct sock *sk) 1055{ 1056 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 1057 DECLARE_WAITQUEUE(wait, current); 1058 int err = 0; 1059 int timeo = HZ/5; 1060 1061 add_wait_queue(sk_sleep(sk), &wait); 1062 set_current_state(TASK_INTERRUPTIBLE); 1063 while (chan->unacked_frames > 0 && chan->conn) { 1064 if (!timeo) 1065 timeo = HZ/5; 1066 1067 if (signal_pending(current)) { 1068 err = sock_intr_errno(timeo); 1069 break; 1070 } 1071 1072 release_sock(sk); 1073 timeo = schedule_timeout(timeo); 1074 lock_sock(sk); 1075 set_current_state(TASK_INTERRUPTIBLE); 1076 1077 err = sock_error(sk); 1078 if (err) 1079 break; 1080 } 1081 set_current_state(TASK_RUNNING); 1082 remove_wait_queue(sk_sleep(sk), &wait); 1083 return err; 1084} 1085 1086static int l2cap_sock_shutdown(struct socket *sock, int how) 1087{ 1088 struct sock *sk = sock->sk; 1089 struct l2cap_chan *chan; 1090 struct l2cap_conn *conn; 1091 int err = 0; 1092 1093 BT_DBG("sock %p, sk %p", sock, sk); 1094 1095 if (!sk) 1096 return 0; 1097 1098 chan = l2cap_pi(sk)->chan; 1099 conn = chan->conn; 1100 1101 if (conn) 1102 mutex_lock(&conn->chan_lock); 1103 1104 l2cap_chan_lock(chan); 1105 lock_sock(sk); 1106 1107 if (!sk->sk_shutdown) { 1108 if (chan->mode == L2CAP_MODE_ERTM) 1109 err = __l2cap_wait_ack(sk); 1110 1111 sk->sk_shutdown = SHUTDOWN_MASK; 1112 1113 release_sock(sk); 1114 l2cap_chan_close(chan, 0); 1115 lock_sock(sk); 1116 1117 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) 1118 err = bt_sock_wait_state(sk, BT_CLOSED, 1119 sk->sk_lingertime); 1120 } 1121 1122 if (!err && sk->sk_err) 1123 err = -sk->sk_err; 1124 1125 release_sock(sk); 1126 l2cap_chan_unlock(chan); 1127 1128 if (conn) 1129 mutex_unlock(&conn->chan_lock); 1130 1131 return err; 1132} 1133 1134static int l2cap_sock_release(struct socket *sock) 1135{ 1136 struct sock *sk = sock->sk; 1137 int err; 1138 1139 BT_DBG("sock %p, sk %p", sock, sk); 1140 1141 if (!sk) 1142 return 0; 1143 1144 bt_sock_unlink(&l2cap_sk_list, sk); 1145 1146 err = l2cap_sock_shutdown(sock, 2); 1147 1148 sock_orphan(sk); 1149 l2cap_sock_kill(sk); 1150 return err; 1151} 1152 1153static void l2cap_sock_cleanup_listen(struct sock *parent) 1154{ 1155 struct sock *sk; 1156 1157 BT_DBG("parent %p", parent); 1158 1159 /* Close not yet accepted channels */ 1160 while ((sk = bt_accept_dequeue(parent, NULL))) { 1161 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 1162 1163 l2cap_chan_lock(chan); 1164 __clear_chan_timer(chan); 1165 l2cap_chan_close(chan, ECONNRESET); 1166 l2cap_chan_unlock(chan); 1167 1168 l2cap_sock_kill(sk); 1169 } 1170} 1171 1172static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan) 1173{ 1174 struct sock *sk, *parent = chan->data; 1175 1176 lock_sock(parent); 1177 1178 /* Check for backlog size */ 1179 if (sk_acceptq_is_full(parent)) { 1180 BT_DBG("backlog full %d", parent->sk_ack_backlog); 1181 return NULL; 1182 } 1183 1184 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, 1185 GFP_ATOMIC); 1186 if (!sk) 1187 return NULL; 1188 1189 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); 1190 1191 l2cap_sock_init(sk, parent); 1192 1193 bt_accept_enqueue(parent, sk); 1194 1195 release_sock(parent); 1196 1197 return l2cap_pi(sk)->chan; 1198} 1199 1200static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb) 1201{ 1202 struct sock *sk = chan->data; 1203 int err; 1204 1205 lock_sock(sk); 1206 1207 if (l2cap_pi(sk)->rx_busy_skb) { 1208 err = -ENOMEM; 1209 goto done; 1210 } 1211 1212 err = sock_queue_rcv_skb(sk, skb); 1213 1214 /* For ERTM, handle one skb that doesn't fit into the recv 1215 * buffer. This is important to do because the data frames 1216 * have already been acked, so the skb cannot be discarded. 1217 * 1218 * Notify the l2cap core that the buffer is full, so the 1219 * LOCAL_BUSY state is entered and no more frames are 1220 * acked and reassembled until there is buffer space 1221 * available. 1222 */ 1223 if (err < 0 && chan->mode == L2CAP_MODE_ERTM) { 1224 l2cap_pi(sk)->rx_busy_skb = skb; 1225 l2cap_chan_busy(chan, 1); 1226 err = 0; 1227 } 1228 1229done: 1230 release_sock(sk); 1231 1232 return err; 1233} 1234 1235static void l2cap_sock_close_cb(struct l2cap_chan *chan) 1236{ 1237 struct sock *sk = chan->data; 1238 1239 l2cap_sock_kill(sk); 1240} 1241 1242static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) 1243{ 1244 struct sock *sk = chan->data; 1245 struct sock *parent; 1246 1247 lock_sock(sk); 1248 1249 parent = bt_sk(sk)->parent; 1250 1251 sock_set_flag(sk, SOCK_ZAPPED); 1252 1253 switch (chan->state) { 1254 case BT_OPEN: 1255 case BT_BOUND: 1256 case BT_CLOSED: 1257 break; 1258 case BT_LISTEN: 1259 l2cap_sock_cleanup_listen(sk); 1260 sk->sk_state = BT_CLOSED; 1261 chan->state = BT_CLOSED; 1262 1263 break; 1264 default: 1265 sk->sk_state = BT_CLOSED; 1266 chan->state = BT_CLOSED; 1267 1268 sk->sk_err = err; 1269 1270 if (parent) { 1271 bt_accept_unlink(sk); 1272 parent->sk_data_ready(parent, 0); 1273 } else { 1274 sk->sk_state_change(sk); 1275 } 1276 1277 break; 1278 } 1279 1280 release_sock(sk); 1281} 1282 1283static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state, 1284 int err) 1285{ 1286 struct sock *sk = chan->data; 1287 1288 sk->sk_state = state; 1289 1290 if (err) 1291 sk->sk_err = err; 1292} 1293 1294static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan, 1295 unsigned long len, int nb) 1296{ 1297 struct sock *sk = chan->data; 1298 struct sk_buff *skb; 1299 int err; 1300 1301 l2cap_chan_unlock(chan); 1302 skb = bt_skb_send_alloc(sk, len, nb, &err); 1303 l2cap_chan_lock(chan); 1304 1305 if (!skb) 1306 return ERR_PTR(err); 1307 1308 bt_cb(skb)->chan = chan; 1309 1310 return skb; 1311} 1312 1313static void l2cap_sock_ready_cb(struct l2cap_chan *chan) 1314{ 1315 struct sock *sk = chan->data; 1316 struct sock *parent; 1317 1318 lock_sock(sk); 1319 1320 parent = bt_sk(sk)->parent; 1321 1322 BT_DBG("sk %p, parent %p", sk, parent); 1323 1324 sk->sk_state = BT_CONNECTED; 1325 sk->sk_state_change(sk); 1326 1327 if (parent) 1328 parent->sk_data_ready(parent, 0); 1329 1330 release_sock(sk); 1331} 1332 1333static void l2cap_sock_defer_cb(struct l2cap_chan *chan) 1334{ 1335 struct sock *parent, *sk = chan->data; 1336 1337 lock_sock(sk); 1338 1339 parent = bt_sk(sk)->parent; 1340 if (parent) 1341 parent->sk_data_ready(parent, 0); 1342 1343 release_sock(sk); 1344} 1345 1346static void l2cap_sock_resume_cb(struct l2cap_chan *chan) 1347{ 1348 struct sock *sk = chan->data; 1349 1350 clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 1351 sk->sk_state_change(sk); 1352} 1353 1354static void l2cap_sock_set_shutdown_cb(struct l2cap_chan *chan) 1355{ 1356 struct sock *sk = chan->data; 1357 1358 lock_sock(sk); 1359 sk->sk_shutdown = SHUTDOWN_MASK; 1360 release_sock(sk); 1361} 1362 1363static long l2cap_sock_get_sndtimeo_cb(struct l2cap_chan *chan) 1364{ 1365 struct sock *sk = chan->data; 1366 1367 return sk->sk_sndtimeo; 1368} 1369 1370static void l2cap_sock_suspend_cb(struct l2cap_chan *chan) 1371{ 1372 struct sock *sk = chan->data; 1373 1374 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 1375 sk->sk_state_change(sk); 1376} 1377 1378static struct l2cap_ops l2cap_chan_ops = { 1379 .name = "L2CAP Socket Interface", 1380 .new_connection = l2cap_sock_new_connection_cb, 1381 .recv = l2cap_sock_recv_cb, 1382 .close = l2cap_sock_close_cb, 1383 .teardown = l2cap_sock_teardown_cb, 1384 .state_change = l2cap_sock_state_change_cb, 1385 .ready = l2cap_sock_ready_cb, 1386 .defer = l2cap_sock_defer_cb, 1387 .resume = l2cap_sock_resume_cb, 1388 .suspend = l2cap_sock_suspend_cb, 1389 .set_shutdown = l2cap_sock_set_shutdown_cb, 1390 .get_sndtimeo = l2cap_sock_get_sndtimeo_cb, 1391 .alloc_skb = l2cap_sock_alloc_skb_cb, 1392}; 1393 1394static void l2cap_sock_destruct(struct sock *sk) 1395{ 1396 BT_DBG("sk %p", sk); 1397 1398 if (l2cap_pi(sk)->chan) 1399 l2cap_chan_put(l2cap_pi(sk)->chan); 1400 1401 if (l2cap_pi(sk)->rx_busy_skb) { 1402 kfree_skb(l2cap_pi(sk)->rx_busy_skb); 1403 l2cap_pi(sk)->rx_busy_skb = NULL; 1404 } 1405 1406 skb_queue_purge(&sk->sk_receive_queue); 1407 skb_queue_purge(&sk->sk_write_queue); 1408} 1409 1410static void l2cap_skb_msg_name(struct sk_buff *skb, void *msg_name, 1411 int *msg_namelen) 1412{ 1413 struct sockaddr_l2 *la = (struct sockaddr_l2 *) msg_name; 1414 1415 memset(la, 0, sizeof(struct sockaddr_l2)); 1416 la->l2_family = AF_BLUETOOTH; 1417 la->l2_psm = bt_cb(skb)->psm; 1418 bacpy(&la->l2_bdaddr, &bt_cb(skb)->bdaddr); 1419 1420 *msg_namelen = sizeof(struct sockaddr_l2); 1421} 1422 1423static void l2cap_sock_init(struct sock *sk, struct sock *parent) 1424{ 1425 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 1426 1427 BT_DBG("sk %p", sk); 1428 1429 if (parent) { 1430 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; 1431 1432 sk->sk_type = parent->sk_type; 1433 bt_sk(sk)->flags = bt_sk(parent)->flags; 1434 1435 chan->chan_type = pchan->chan_type; 1436 chan->imtu = pchan->imtu; 1437 chan->omtu = pchan->omtu; 1438 chan->conf_state = pchan->conf_state; 1439 chan->mode = pchan->mode; 1440 chan->fcs = pchan->fcs; 1441 chan->max_tx = pchan->max_tx; 1442 chan->tx_win = pchan->tx_win; 1443 chan->tx_win_max = pchan->tx_win_max; 1444 chan->sec_level = pchan->sec_level; 1445 chan->flags = pchan->flags; 1446 chan->tx_credits = pchan->tx_credits; 1447 chan->rx_credits = pchan->rx_credits; 1448 1449 security_sk_clone(parent, sk); 1450 } else { 1451 switch (sk->sk_type) { 1452 case SOCK_RAW: 1453 chan->chan_type = L2CAP_CHAN_RAW; 1454 break; 1455 case SOCK_DGRAM: 1456 chan->chan_type = L2CAP_CHAN_CONN_LESS; 1457 bt_sk(sk)->skb_msg_name = l2cap_skb_msg_name; 1458 break; 1459 case SOCK_SEQPACKET: 1460 case SOCK_STREAM: 1461 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED; 1462 break; 1463 } 1464 1465 chan->imtu = L2CAP_DEFAULT_MTU; 1466 chan->omtu = 0; 1467 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 1468 chan->mode = L2CAP_MODE_ERTM; 1469 set_bit(CONF_STATE2_DEVICE, &chan->conf_state); 1470 } else { 1471 chan->mode = L2CAP_MODE_BASIC; 1472 } 1473 1474 l2cap_chan_set_defaults(chan); 1475 } 1476 1477 /* Default config options */ 1478 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; 1479 1480 chan->data = sk; 1481 chan->ops = &l2cap_chan_ops; 1482} 1483 1484static struct proto l2cap_proto = { 1485 .name = "L2CAP", 1486 .owner = THIS_MODULE, 1487 .obj_size = sizeof(struct l2cap_pinfo) 1488}; 1489 1490static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, 1491 int proto, gfp_t prio) 1492{ 1493 struct sock *sk; 1494 struct l2cap_chan *chan; 1495 1496 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto); 1497 if (!sk) 1498 return NULL; 1499 1500 sock_init_data(sock, sk); 1501 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); 1502 1503 sk->sk_destruct = l2cap_sock_destruct; 1504 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; 1505 1506 sock_reset_flag(sk, SOCK_ZAPPED); 1507 1508 sk->sk_protocol = proto; 1509 sk->sk_state = BT_OPEN; 1510 1511 chan = l2cap_chan_create(); 1512 if (!chan) { 1513 sk_free(sk); 1514 return NULL; 1515 } 1516 1517 l2cap_chan_hold(chan); 1518 1519 l2cap_pi(sk)->chan = chan; 1520 1521 return sk; 1522} 1523 1524static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol, 1525 int kern) 1526{ 1527 struct sock *sk; 1528 1529 BT_DBG("sock %p", sock); 1530 1531 sock->state = SS_UNCONNECTED; 1532 1533 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM && 1534 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 1535 return -ESOCKTNOSUPPORT; 1536 1537 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW)) 1538 return -EPERM; 1539 1540 sock->ops = &l2cap_sock_ops; 1541 1542 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC); 1543 if (!sk) 1544 return -ENOMEM; 1545 1546 l2cap_sock_init(sk, NULL); 1547 bt_sock_link(&l2cap_sk_list, sk); 1548 return 0; 1549} 1550 1551static const struct proto_ops l2cap_sock_ops = { 1552 .family = PF_BLUETOOTH, 1553 .owner = THIS_MODULE, 1554 .release = l2cap_sock_release, 1555 .bind = l2cap_sock_bind, 1556 .connect = l2cap_sock_connect, 1557 .listen = l2cap_sock_listen, 1558 .accept = l2cap_sock_accept, 1559 .getname = l2cap_sock_getname, 1560 .sendmsg = l2cap_sock_sendmsg, 1561 .recvmsg = l2cap_sock_recvmsg, 1562 .poll = bt_sock_poll, 1563 .ioctl = bt_sock_ioctl, 1564 .mmap = sock_no_mmap, 1565 .socketpair = sock_no_socketpair, 1566 .shutdown = l2cap_sock_shutdown, 1567 .setsockopt = l2cap_sock_setsockopt, 1568 .getsockopt = l2cap_sock_getsockopt 1569}; 1570 1571static const struct net_proto_family l2cap_sock_family_ops = { 1572 .family = PF_BLUETOOTH, 1573 .owner = THIS_MODULE, 1574 .create = l2cap_sock_create, 1575}; 1576 1577int __init l2cap_init_sockets(void) 1578{ 1579 int err; 1580 1581 err = proto_register(&l2cap_proto, 0); 1582 if (err < 0) 1583 return err; 1584 1585 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops); 1586 if (err < 0) { 1587 BT_ERR("L2CAP socket registration failed"); 1588 goto error; 1589 } 1590 1591 err = bt_procfs_init(&init_net, "l2cap", &l2cap_sk_list, 1592 NULL); 1593 if (err < 0) { 1594 BT_ERR("Failed to create L2CAP proc file"); 1595 bt_sock_unregister(BTPROTO_L2CAP); 1596 goto error; 1597 } 1598 1599 BT_INFO("L2CAP socket layer initialized"); 1600 1601 return 0; 1602 1603error: 1604 proto_unregister(&l2cap_proto); 1605 return err; 1606} 1607 1608void l2cap_cleanup_sockets(void) 1609{ 1610 bt_procfs_cleanup(&init_net, "l2cap"); 1611 bt_sock_unregister(BTPROTO_L2CAP); 1612 proto_unregister(&l2cap_proto); 1613} 1614 1615module_param(enable_lecoc, bool, 0644); 1616MODULE_PARM_DESC(enable_lecoc, "Enable support for LE CoC"); 1617