l2cap_sock.c revision 682877c31fc1b6510b694b6b8e78d8dde53a47cc
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/export.h> 31 32#include <net/bluetooth/bluetooth.h> 33#include <net/bluetooth/hci_core.h> 34#include <net/bluetooth/l2cap.h> 35#include <net/bluetooth/smp.h> 36 37static const struct proto_ops l2cap_sock_ops; 38static void l2cap_sock_init(struct sock *sk, struct sock *parent); 39static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio); 40 41static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen) 42{ 43 struct sock *sk = sock->sk; 44 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 45 struct sockaddr_l2 la; 46 int len, err = 0; 47 48 BT_DBG("sk %p", sk); 49 50 if (!addr || addr->sa_family != AF_BLUETOOTH) 51 return -EINVAL; 52 53 memset(&la, 0, sizeof(la)); 54 len = min_t(unsigned int, sizeof(la), alen); 55 memcpy(&la, addr, len); 56 57 if (la.l2_cid && la.l2_psm) 58 return -EINVAL; 59 60 lock_sock(sk); 61 62 if (sk->sk_state != BT_OPEN) { 63 err = -EBADFD; 64 goto done; 65 } 66 67 if (la.l2_psm) { 68 __u16 psm = __le16_to_cpu(la.l2_psm); 69 70 /* PSM must be odd and lsb of upper byte must be 0 */ 71 if ((psm & 0x0101) != 0x0001) { 72 err = -EINVAL; 73 goto done; 74 } 75 76 /* Restrict usage of well-known PSMs */ 77 if (psm < 0x1001 && !capable(CAP_NET_BIND_SERVICE)) { 78 err = -EACCES; 79 goto done; 80 } 81 } 82 83 if (la.l2_cid) 84 err = l2cap_add_scid(chan, __le16_to_cpu(la.l2_cid)); 85 else 86 err = l2cap_add_psm(chan, &la.l2_bdaddr, la.l2_psm); 87 88 if (err < 0) 89 goto done; 90 91 if (__le16_to_cpu(la.l2_psm) == L2CAP_PSM_SDP || 92 __le16_to_cpu(la.l2_psm) == L2CAP_PSM_RFCOMM) 93 chan->sec_level = BT_SECURITY_SDP; 94 95 bacpy(&bt_sk(sk)->src, &la.l2_bdaddr); 96 97 chan->state = BT_BOUND; 98 sk->sk_state = BT_BOUND; 99 100done: 101 release_sock(sk); 102 return err; 103} 104 105static int l2cap_sock_connect(struct socket *sock, struct sockaddr *addr, int alen, int flags) 106{ 107 struct sock *sk = sock->sk; 108 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 109 struct sockaddr_l2 la; 110 int len, err = 0; 111 112 BT_DBG("sk %p", sk); 113 114 if (!addr || alen < sizeof(addr->sa_family) || 115 addr->sa_family != AF_BLUETOOTH) 116 return -EINVAL; 117 118 memset(&la, 0, sizeof(la)); 119 len = min_t(unsigned int, sizeof(la), alen); 120 memcpy(&la, addr, len); 121 122 if (la.l2_cid && la.l2_psm) 123 return -EINVAL; 124 125 err = l2cap_chan_connect(chan, la.l2_psm, __le16_to_cpu(la.l2_cid), 126 &la.l2_bdaddr, la.l2_bdaddr_type); 127 if (err) 128 return err; 129 130 lock_sock(sk); 131 132 err = bt_sock_wait_state(sk, BT_CONNECTED, 133 sock_sndtimeo(sk, flags & O_NONBLOCK)); 134 135 release_sock(sk); 136 137 return err; 138} 139 140static int l2cap_sock_listen(struct socket *sock, int backlog) 141{ 142 struct sock *sk = sock->sk; 143 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 144 int err = 0; 145 146 BT_DBG("sk %p backlog %d", sk, backlog); 147 148 lock_sock(sk); 149 150 if (sk->sk_state != BT_BOUND) { 151 err = -EBADFD; 152 goto done; 153 } 154 155 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM) { 156 err = -EINVAL; 157 goto done; 158 } 159 160 switch (chan->mode) { 161 case L2CAP_MODE_BASIC: 162 break; 163 case L2CAP_MODE_ERTM: 164 case L2CAP_MODE_STREAMING: 165 if (!disable_ertm) 166 break; 167 /* fall through */ 168 default: 169 err = -ENOTSUPP; 170 goto done; 171 } 172 173 sk->sk_max_ack_backlog = backlog; 174 sk->sk_ack_backlog = 0; 175 176 chan->state = BT_LISTEN; 177 sk->sk_state = BT_LISTEN; 178 179done: 180 release_sock(sk); 181 return err; 182} 183 184static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, int flags) 185{ 186 DECLARE_WAITQUEUE(wait, current); 187 struct sock *sk = sock->sk, *nsk; 188 long timeo; 189 int err = 0; 190 191 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 192 193 timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); 194 195 BT_DBG("sk %p timeo %ld", sk, timeo); 196 197 /* Wait for an incoming connection. (wake-one). */ 198 add_wait_queue_exclusive(sk_sleep(sk), &wait); 199 while (1) { 200 set_current_state(TASK_INTERRUPTIBLE); 201 202 if (sk->sk_state != BT_LISTEN) { 203 err = -EBADFD; 204 break; 205 } 206 207 nsk = bt_accept_dequeue(sk, newsock); 208 if (nsk) 209 break; 210 211 if (!timeo) { 212 err = -EAGAIN; 213 break; 214 } 215 216 if (signal_pending(current)) { 217 err = sock_intr_errno(timeo); 218 break; 219 } 220 221 release_sock(sk); 222 timeo = schedule_timeout(timeo); 223 lock_sock_nested(sk, SINGLE_DEPTH_NESTING); 224 } 225 __set_current_state(TASK_RUNNING); 226 remove_wait_queue(sk_sleep(sk), &wait); 227 228 if (err) 229 goto done; 230 231 newsock->state = SS_CONNECTED; 232 233 BT_DBG("new socket %p", nsk); 234 235done: 236 release_sock(sk); 237 return err; 238} 239 240static int l2cap_sock_getname(struct socket *sock, struct sockaddr *addr, int *len, int peer) 241{ 242 struct sockaddr_l2 *la = (struct sockaddr_l2 *) addr; 243 struct sock *sk = sock->sk; 244 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 245 246 BT_DBG("sock %p, sk %p", sock, sk); 247 248 addr->sa_family = AF_BLUETOOTH; 249 *len = sizeof(struct sockaddr_l2); 250 251 if (peer) { 252 la->l2_psm = chan->psm; 253 bacpy(&la->l2_bdaddr, &bt_sk(sk)->dst); 254 la->l2_cid = cpu_to_le16(chan->dcid); 255 } else { 256 la->l2_psm = chan->sport; 257 bacpy(&la->l2_bdaddr, &bt_sk(sk)->src); 258 la->l2_cid = cpu_to_le16(chan->scid); 259 } 260 261 return 0; 262} 263 264static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __user *optval, int __user *optlen) 265{ 266 struct sock *sk = sock->sk; 267 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 268 struct l2cap_options opts; 269 struct l2cap_conninfo cinfo; 270 int len, err = 0; 271 u32 opt; 272 273 BT_DBG("sk %p", sk); 274 275 if (get_user(len, optlen)) 276 return -EFAULT; 277 278 lock_sock(sk); 279 280 switch (optname) { 281 case L2CAP_OPTIONS: 282 memset(&opts, 0, sizeof(opts)); 283 opts.imtu = chan->imtu; 284 opts.omtu = chan->omtu; 285 opts.flush_to = chan->flush_to; 286 opts.mode = chan->mode; 287 opts.fcs = chan->fcs; 288 opts.max_tx = chan->max_tx; 289 opts.txwin_size = chan->tx_win; 290 291 len = min_t(unsigned int, len, sizeof(opts)); 292 if (copy_to_user(optval, (char *) &opts, len)) 293 err = -EFAULT; 294 295 break; 296 297 case L2CAP_LM: 298 switch (chan->sec_level) { 299 case BT_SECURITY_LOW: 300 opt = L2CAP_LM_AUTH; 301 break; 302 case BT_SECURITY_MEDIUM: 303 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT; 304 break; 305 case BT_SECURITY_HIGH: 306 opt = L2CAP_LM_AUTH | L2CAP_LM_ENCRYPT | 307 L2CAP_LM_SECURE; 308 break; 309 default: 310 opt = 0; 311 break; 312 } 313 314 if (test_bit(FLAG_ROLE_SWITCH, &chan->flags)) 315 opt |= L2CAP_LM_MASTER; 316 317 if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags)) 318 opt |= L2CAP_LM_RELIABLE; 319 320 if (put_user(opt, (u32 __user *) optval)) 321 err = -EFAULT; 322 break; 323 324 case L2CAP_CONNINFO: 325 if (sk->sk_state != BT_CONNECTED && 326 !(sk->sk_state == BT_CONNECT2 && 327 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { 328 err = -ENOTCONN; 329 break; 330 } 331 332 memset(&cinfo, 0, sizeof(cinfo)); 333 cinfo.hci_handle = chan->conn->hcon->handle; 334 memcpy(cinfo.dev_class, chan->conn->hcon->dev_class, 3); 335 336 len = min_t(unsigned int, len, sizeof(cinfo)); 337 if (copy_to_user(optval, (char *) &cinfo, len)) 338 err = -EFAULT; 339 340 break; 341 342 default: 343 err = -ENOPROTOOPT; 344 break; 345 } 346 347 release_sock(sk); 348 return err; 349} 350 351static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, char __user *optval, int __user *optlen) 352{ 353 struct sock *sk = sock->sk; 354 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 355 struct bt_security sec; 356 struct bt_power pwr; 357 int len, err = 0; 358 359 BT_DBG("sk %p", sk); 360 361 if (level == SOL_L2CAP) 362 return l2cap_sock_getsockopt_old(sock, optname, optval, optlen); 363 364 if (level != SOL_BLUETOOTH) 365 return -ENOPROTOOPT; 366 367 if (get_user(len, optlen)) 368 return -EFAULT; 369 370 lock_sock(sk); 371 372 switch (optname) { 373 case BT_SECURITY: 374 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 375 chan->chan_type != L2CAP_CHAN_RAW) { 376 err = -EINVAL; 377 break; 378 } 379 380 memset(&sec, 0, sizeof(sec)); 381 if (chan->conn) 382 sec.level = chan->conn->hcon->sec_level; 383 else 384 sec.level = chan->sec_level; 385 386 if (sk->sk_state == BT_CONNECTED) 387 sec.key_size = chan->conn->hcon->enc_key_size; 388 389 len = min_t(unsigned int, len, sizeof(sec)); 390 if (copy_to_user(optval, (char *) &sec, len)) 391 err = -EFAULT; 392 393 break; 394 395 case BT_DEFER_SETUP: 396 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 397 err = -EINVAL; 398 break; 399 } 400 401 if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), 402 (u32 __user *) optval)) 403 err = -EFAULT; 404 405 break; 406 407 case BT_FLUSHABLE: 408 if (put_user(test_bit(FLAG_FLUSHABLE, &chan->flags), 409 (u32 __user *) optval)) 410 err = -EFAULT; 411 412 break; 413 414 case BT_POWER: 415 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 416 && sk->sk_type != SOCK_RAW) { 417 err = -EINVAL; 418 break; 419 } 420 421 pwr.force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags); 422 423 len = min_t(unsigned int, len, sizeof(pwr)); 424 if (copy_to_user(optval, (char *) &pwr, len)) 425 err = -EFAULT; 426 427 break; 428 429 case BT_CHANNEL_POLICY: 430 if (!enable_hs) { 431 err = -ENOPROTOOPT; 432 break; 433 } 434 435 if (put_user(chan->chan_policy, (u32 __user *) optval)) 436 err = -EFAULT; 437 break; 438 439 default: 440 err = -ENOPROTOOPT; 441 break; 442 } 443 444 release_sock(sk); 445 return err; 446} 447 448static bool l2cap_valid_mtu(struct l2cap_chan *chan, u16 mtu) 449{ 450 switch (chan->scid) { 451 case L2CAP_CID_LE_DATA: 452 if (mtu < L2CAP_LE_DEFAULT_MTU) 453 return false; 454 break; 455 456 default: 457 if (mtu < L2CAP_DEFAULT_MIN_MTU) 458 return false; 459 } 460 461 return true; 462} 463 464static int l2cap_sock_setsockopt_old(struct socket *sock, int optname, char __user *optval, unsigned int optlen) 465{ 466 struct sock *sk = sock->sk; 467 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 468 struct l2cap_options opts; 469 int len, err = 0; 470 u32 opt; 471 472 BT_DBG("sk %p", sk); 473 474 lock_sock(sk); 475 476 switch (optname) { 477 case L2CAP_OPTIONS: 478 if (sk->sk_state == BT_CONNECTED) { 479 err = -EINVAL; 480 break; 481 } 482 483 opts.imtu = chan->imtu; 484 opts.omtu = chan->omtu; 485 opts.flush_to = chan->flush_to; 486 opts.mode = chan->mode; 487 opts.fcs = chan->fcs; 488 opts.max_tx = chan->max_tx; 489 opts.txwin_size = chan->tx_win; 490 491 len = min_t(unsigned int, sizeof(opts), optlen); 492 if (copy_from_user((char *) &opts, optval, len)) { 493 err = -EFAULT; 494 break; 495 } 496 497 if (opts.txwin_size > L2CAP_DEFAULT_EXT_WINDOW) { 498 err = -EINVAL; 499 break; 500 } 501 502 if (!l2cap_valid_mtu(chan, opts.imtu)) { 503 err = -EINVAL; 504 break; 505 } 506 507 chan->mode = opts.mode; 508 switch (chan->mode) { 509 case L2CAP_MODE_BASIC: 510 clear_bit(CONF_STATE2_DEVICE, &chan->conf_state); 511 break; 512 case L2CAP_MODE_ERTM: 513 case L2CAP_MODE_STREAMING: 514 if (!disable_ertm) 515 break; 516 /* fall through */ 517 default: 518 err = -EINVAL; 519 break; 520 } 521 522 chan->imtu = opts.imtu; 523 chan->omtu = opts.omtu; 524 chan->fcs = opts.fcs; 525 chan->max_tx = opts.max_tx; 526 chan->tx_win = opts.txwin_size; 527 break; 528 529 case L2CAP_LM: 530 if (get_user(opt, (u32 __user *) optval)) { 531 err = -EFAULT; 532 break; 533 } 534 535 if (opt & L2CAP_LM_AUTH) 536 chan->sec_level = BT_SECURITY_LOW; 537 if (opt & L2CAP_LM_ENCRYPT) 538 chan->sec_level = BT_SECURITY_MEDIUM; 539 if (opt & L2CAP_LM_SECURE) 540 chan->sec_level = BT_SECURITY_HIGH; 541 542 if (opt & L2CAP_LM_MASTER) 543 set_bit(FLAG_ROLE_SWITCH, &chan->flags); 544 else 545 clear_bit(FLAG_ROLE_SWITCH, &chan->flags); 546 547 if (opt & L2CAP_LM_RELIABLE) 548 set_bit(FLAG_FORCE_RELIABLE, &chan->flags); 549 else 550 clear_bit(FLAG_FORCE_RELIABLE, &chan->flags); 551 break; 552 553 default: 554 err = -ENOPROTOOPT; 555 break; 556 } 557 558 release_sock(sk); 559 return err; 560} 561 562static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, char __user *optval, unsigned int optlen) 563{ 564 struct sock *sk = sock->sk; 565 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 566 struct bt_security sec; 567 struct bt_power pwr; 568 struct l2cap_conn *conn; 569 int len, err = 0; 570 u32 opt; 571 572 BT_DBG("sk %p", sk); 573 574 if (level == SOL_L2CAP) 575 return l2cap_sock_setsockopt_old(sock, optname, optval, optlen); 576 577 if (level != SOL_BLUETOOTH) 578 return -ENOPROTOOPT; 579 580 lock_sock(sk); 581 582 switch (optname) { 583 case BT_SECURITY: 584 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 585 chan->chan_type != L2CAP_CHAN_RAW) { 586 err = -EINVAL; 587 break; 588 } 589 590 sec.level = BT_SECURITY_LOW; 591 592 len = min_t(unsigned int, sizeof(sec), optlen); 593 if (copy_from_user((char *) &sec, optval, len)) { 594 err = -EFAULT; 595 break; 596 } 597 598 if (sec.level < BT_SECURITY_LOW || 599 sec.level > BT_SECURITY_HIGH) { 600 err = -EINVAL; 601 break; 602 } 603 604 chan->sec_level = sec.level; 605 606 if (!chan->conn) 607 break; 608 609 conn = chan->conn; 610 611 /*change security for LE channels */ 612 if (chan->scid == L2CAP_CID_LE_DATA) { 613 if (!conn->hcon->out) { 614 err = -EINVAL; 615 break; 616 } 617 618 if (smp_conn_security(conn, sec.level)) 619 break; 620 sk->sk_state = BT_CONFIG; 621 chan->state = BT_CONFIG; 622 623 /* or for ACL link */ 624 } else if ((sk->sk_state == BT_CONNECT2 && 625 test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || 626 sk->sk_state == BT_CONNECTED) { 627 if (!l2cap_chan_check_security(chan)) 628 set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); 629 else 630 sk->sk_state_change(sk); 631 } else { 632 err = -EINVAL; 633 } 634 break; 635 636 case BT_DEFER_SETUP: 637 if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) { 638 err = -EINVAL; 639 break; 640 } 641 642 if (get_user(opt, (u32 __user *) optval)) { 643 err = -EFAULT; 644 break; 645 } 646 647 if (opt) 648 set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 649 else 650 clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); 651 break; 652 653 case BT_FLUSHABLE: 654 if (get_user(opt, (u32 __user *) optval)) { 655 err = -EFAULT; 656 break; 657 } 658 659 if (opt > BT_FLUSHABLE_ON) { 660 err = -EINVAL; 661 break; 662 } 663 664 if (opt == BT_FLUSHABLE_OFF) { 665 struct l2cap_conn *conn = chan->conn; 666 /* proceed further only when we have l2cap_conn and 667 No Flush support in the LM */ 668 if (!conn || !lmp_no_flush_capable(conn->hcon->hdev)) { 669 err = -EINVAL; 670 break; 671 } 672 } 673 674 if (opt) 675 set_bit(FLAG_FLUSHABLE, &chan->flags); 676 else 677 clear_bit(FLAG_FLUSHABLE, &chan->flags); 678 break; 679 680 case BT_POWER: 681 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 682 chan->chan_type != L2CAP_CHAN_RAW) { 683 err = -EINVAL; 684 break; 685 } 686 687 pwr.force_active = BT_POWER_FORCE_ACTIVE_ON; 688 689 len = min_t(unsigned int, sizeof(pwr), optlen); 690 if (copy_from_user((char *) &pwr, optval, len)) { 691 err = -EFAULT; 692 break; 693 } 694 695 if (pwr.force_active) 696 set_bit(FLAG_FORCE_ACTIVE, &chan->flags); 697 else 698 clear_bit(FLAG_FORCE_ACTIVE, &chan->flags); 699 break; 700 701 case BT_CHANNEL_POLICY: 702 if (!enable_hs) { 703 err = -ENOPROTOOPT; 704 break; 705 } 706 707 if (get_user(opt, (u32 __user *) optval)) { 708 err = -EFAULT; 709 break; 710 } 711 712 if (opt > BT_CHANNEL_POLICY_AMP_PREFERRED) { 713 err = -EINVAL; 714 break; 715 } 716 717 if (chan->mode != L2CAP_MODE_ERTM && 718 chan->mode != L2CAP_MODE_STREAMING) { 719 err = -EOPNOTSUPP; 720 break; 721 } 722 723 chan->chan_policy = (u8) opt; 724 break; 725 726 default: 727 err = -ENOPROTOOPT; 728 break; 729 } 730 731 release_sock(sk); 732 return err; 733} 734 735static int l2cap_sock_sendmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len) 736{ 737 struct sock *sk = sock->sk; 738 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 739 int err; 740 741 BT_DBG("sock %p, sk %p", sock, sk); 742 743 err = sock_error(sk); 744 if (err) 745 return err; 746 747 if (msg->msg_flags & MSG_OOB) 748 return -EOPNOTSUPP; 749 750 if (sk->sk_state != BT_CONNECTED) 751 return -ENOTCONN; 752 753 l2cap_chan_lock(chan); 754 err = l2cap_chan_send(chan, msg, len, sk->sk_priority); 755 l2cap_chan_unlock(chan); 756 757 return err; 758} 759 760static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags) 761{ 762 struct sock *sk = sock->sk; 763 struct l2cap_pinfo *pi = l2cap_pi(sk); 764 int err; 765 766 lock_sock(sk); 767 768 if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, 769 &bt_sk(sk)->flags)) { 770 sk->sk_state = BT_CONFIG; 771 pi->chan->state = BT_CONFIG; 772 773 __l2cap_connect_rsp_defer(pi->chan); 774 release_sock(sk); 775 return 0; 776 } 777 778 release_sock(sk); 779 780 if (sock->type == SOCK_STREAM) 781 err = bt_sock_stream_recvmsg(iocb, sock, msg, len, flags); 782 else 783 err = bt_sock_recvmsg(iocb, sock, msg, len, flags); 784 785 if (pi->chan->mode != L2CAP_MODE_ERTM) 786 return err; 787 788 /* Attempt to put pending rx data in the socket buffer */ 789 790 lock_sock(sk); 791 792 if (!test_bit(CONN_LOCAL_BUSY, &pi->chan->conn_state)) 793 goto done; 794 795 if (pi->rx_busy_skb) { 796 if (!sock_queue_rcv_skb(sk, pi->rx_busy_skb)) 797 pi->rx_busy_skb = NULL; 798 else 799 goto done; 800 } 801 802 /* Restore data flow when half of the receive buffer is 803 * available. This avoids resending large numbers of 804 * frames. 805 */ 806 if (atomic_read(&sk->sk_rmem_alloc) <= sk->sk_rcvbuf >> 1) 807 l2cap_chan_busy(pi->chan, 0); 808 809done: 810 release_sock(sk); 811 return err; 812} 813 814/* Kill socket (only if zapped and orphan) 815 * Must be called on unlocked socket. 816 */ 817static void l2cap_sock_kill(struct sock *sk) 818{ 819 if (!sock_flag(sk, SOCK_ZAPPED) || sk->sk_socket) 820 return; 821 822 BT_DBG("sk %p state %s", sk, state_to_string(sk->sk_state)); 823 824 /* Kill poor orphan */ 825 826 l2cap_chan_destroy(l2cap_pi(sk)->chan); 827 sock_set_flag(sk, SOCK_DEAD); 828 sock_put(sk); 829} 830 831static int l2cap_sock_shutdown(struct socket *sock, int how) 832{ 833 struct sock *sk = sock->sk; 834 struct l2cap_chan *chan; 835 struct l2cap_conn *conn; 836 int err = 0; 837 838 BT_DBG("sock %p, sk %p", sock, sk); 839 840 if (!sk) 841 return 0; 842 843 chan = l2cap_pi(sk)->chan; 844 conn = chan->conn; 845 846 if (conn) 847 mutex_lock(&conn->chan_lock); 848 849 l2cap_chan_lock(chan); 850 lock_sock(sk); 851 852 if (!sk->sk_shutdown) { 853 if (chan->mode == L2CAP_MODE_ERTM) 854 err = __l2cap_wait_ack(sk); 855 856 sk->sk_shutdown = SHUTDOWN_MASK; 857 858 release_sock(sk); 859 l2cap_chan_close(chan, 0); 860 lock_sock(sk); 861 862 if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime) 863 err = bt_sock_wait_state(sk, BT_CLOSED, 864 sk->sk_lingertime); 865 } 866 867 if (!err && sk->sk_err) 868 err = -sk->sk_err; 869 870 release_sock(sk); 871 l2cap_chan_unlock(chan); 872 873 if (conn) 874 mutex_unlock(&conn->chan_lock); 875 876 return err; 877} 878 879static int l2cap_sock_release(struct socket *sock) 880{ 881 struct sock *sk = sock->sk; 882 int err; 883 884 BT_DBG("sock %p, sk %p", sock, sk); 885 886 if (!sk) 887 return 0; 888 889 err = l2cap_sock_shutdown(sock, 2); 890 891 sock_orphan(sk); 892 l2cap_sock_kill(sk); 893 return err; 894} 895 896static void l2cap_sock_cleanup_listen(struct sock *parent) 897{ 898 struct sock *sk; 899 900 BT_DBG("parent %p", parent); 901 902 /* Close not yet accepted channels */ 903 while ((sk = bt_accept_dequeue(parent, NULL))) { 904 struct l2cap_chan *chan = l2cap_pi(sk)->chan; 905 906 l2cap_chan_lock(chan); 907 __clear_chan_timer(chan); 908 l2cap_chan_close(chan, ECONNRESET); 909 l2cap_chan_unlock(chan); 910 911 l2cap_sock_kill(sk); 912 } 913} 914 915static struct l2cap_chan *l2cap_sock_new_connection_cb(struct l2cap_chan *chan) 916{ 917 struct sock *sk, *parent = chan->data; 918 919 /* Check for backlog size */ 920 if (sk_acceptq_is_full(parent)) { 921 BT_DBG("backlog full %d", parent->sk_ack_backlog); 922 return NULL; 923 } 924 925 sk = l2cap_sock_alloc(sock_net(parent), NULL, BTPROTO_L2CAP, 926 GFP_ATOMIC); 927 if (!sk) 928 return NULL; 929 930 bt_sock_reclassify_lock(sk, BTPROTO_L2CAP); 931 932 l2cap_sock_init(sk, parent); 933 934 return l2cap_pi(sk)->chan; 935} 936 937static int l2cap_sock_recv_cb(struct l2cap_chan *chan, struct sk_buff *skb) 938{ 939 int err; 940 struct sock *sk = chan->data; 941 struct l2cap_pinfo *pi = l2cap_pi(sk); 942 943 lock_sock(sk); 944 945 if (pi->rx_busy_skb) { 946 err = -ENOMEM; 947 goto done; 948 } 949 950 err = sock_queue_rcv_skb(sk, skb); 951 952 /* For ERTM, handle one skb that doesn't fit into the recv 953 * buffer. This is important to do because the data frames 954 * have already been acked, so the skb cannot be discarded. 955 * 956 * Notify the l2cap core that the buffer is full, so the 957 * LOCAL_BUSY state is entered and no more frames are 958 * acked and reassembled until there is buffer space 959 * available. 960 */ 961 if (err < 0 && pi->chan->mode == L2CAP_MODE_ERTM) { 962 pi->rx_busy_skb = skb; 963 l2cap_chan_busy(pi->chan, 1); 964 err = 0; 965 } 966 967done: 968 release_sock(sk); 969 970 return err; 971} 972 973static void l2cap_sock_close_cb(struct l2cap_chan *chan) 974{ 975 struct sock *sk = chan->data; 976 977 l2cap_sock_kill(sk); 978} 979 980static void l2cap_sock_teardown_cb(struct l2cap_chan *chan, int err) 981{ 982 struct sock *sk = chan->data; 983 struct sock *parent; 984 985 lock_sock(sk); 986 987 parent = bt_sk(sk)->parent; 988 989 sock_set_flag(sk, SOCK_ZAPPED); 990 991 switch (chan->state) { 992 case BT_OPEN: 993 case BT_BOUND: 994 case BT_CLOSED: 995 break; 996 case BT_LISTEN: 997 l2cap_sock_cleanup_listen(sk); 998 sk->sk_state = BT_CLOSED; 999 chan->state = BT_CLOSED; 1000 1001 break; 1002 default: 1003 sk->sk_state = BT_CLOSED; 1004 chan->state = BT_CLOSED; 1005 1006 sk->sk_err = err; 1007 1008 if (parent) { 1009 bt_accept_unlink(sk); 1010 parent->sk_data_ready(parent, 0); 1011 } else { 1012 sk->sk_state_change(sk); 1013 } 1014 1015 break; 1016 } 1017 1018 release_sock(sk); 1019} 1020 1021static void l2cap_sock_state_change_cb(struct l2cap_chan *chan, int state) 1022{ 1023 struct sock *sk = chan->data; 1024 1025 sk->sk_state = state; 1026} 1027 1028static struct sk_buff *l2cap_sock_alloc_skb_cb(struct l2cap_chan *chan, 1029 unsigned long len, int nb) 1030{ 1031 struct sk_buff *skb; 1032 int err; 1033 1034 l2cap_chan_unlock(chan); 1035 skb = bt_skb_send_alloc(chan->sk, len, nb, &err); 1036 l2cap_chan_lock(chan); 1037 1038 if (!skb) 1039 return ERR_PTR(err); 1040 1041 return skb; 1042} 1043 1044static void l2cap_sock_ready_cb(struct l2cap_chan *chan) 1045{ 1046 struct sock *sk = chan->data; 1047 struct sock *parent; 1048 1049 lock_sock(sk); 1050 1051 parent = bt_sk(sk)->parent; 1052 1053 BT_DBG("sk %p, parent %p", sk, parent); 1054 1055 sk->sk_state = BT_CONNECTED; 1056 sk->sk_state_change(sk); 1057 1058 if (parent) 1059 parent->sk_data_ready(parent, 0); 1060 1061 release_sock(sk); 1062} 1063 1064static struct l2cap_ops l2cap_chan_ops = { 1065 .name = "L2CAP Socket Interface", 1066 .new_connection = l2cap_sock_new_connection_cb, 1067 .recv = l2cap_sock_recv_cb, 1068 .close = l2cap_sock_close_cb, 1069 .teardown = l2cap_sock_teardown_cb, 1070 .state_change = l2cap_sock_state_change_cb, 1071 .ready = l2cap_sock_ready_cb, 1072 .alloc_skb = l2cap_sock_alloc_skb_cb, 1073}; 1074 1075static void l2cap_sock_destruct(struct sock *sk) 1076{ 1077 BT_DBG("sk %p", sk); 1078 1079 l2cap_chan_put(l2cap_pi(sk)->chan); 1080 if (l2cap_pi(sk)->rx_busy_skb) { 1081 kfree_skb(l2cap_pi(sk)->rx_busy_skb); 1082 l2cap_pi(sk)->rx_busy_skb = NULL; 1083 } 1084 1085 skb_queue_purge(&sk->sk_receive_queue); 1086 skb_queue_purge(&sk->sk_write_queue); 1087} 1088 1089static void l2cap_sock_init(struct sock *sk, struct sock *parent) 1090{ 1091 struct l2cap_pinfo *pi = l2cap_pi(sk); 1092 struct l2cap_chan *chan = pi->chan; 1093 1094 BT_DBG("sk %p", sk); 1095 1096 if (parent) { 1097 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; 1098 1099 sk->sk_type = parent->sk_type; 1100 bt_sk(sk)->flags = bt_sk(parent)->flags; 1101 1102 chan->chan_type = pchan->chan_type; 1103 chan->imtu = pchan->imtu; 1104 chan->omtu = pchan->omtu; 1105 chan->conf_state = pchan->conf_state; 1106 chan->mode = pchan->mode; 1107 chan->fcs = pchan->fcs; 1108 chan->max_tx = pchan->max_tx; 1109 chan->tx_win = pchan->tx_win; 1110 chan->tx_win_max = pchan->tx_win_max; 1111 chan->sec_level = pchan->sec_level; 1112 chan->flags = pchan->flags; 1113 1114 security_sk_clone(parent, sk); 1115 } else { 1116 1117 switch (sk->sk_type) { 1118 case SOCK_RAW: 1119 chan->chan_type = L2CAP_CHAN_RAW; 1120 break; 1121 case SOCK_DGRAM: 1122 chan->chan_type = L2CAP_CHAN_CONN_LESS; 1123 break; 1124 case SOCK_SEQPACKET: 1125 case SOCK_STREAM: 1126 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED; 1127 break; 1128 } 1129 1130 chan->imtu = L2CAP_DEFAULT_MTU; 1131 chan->omtu = 0; 1132 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 1133 chan->mode = L2CAP_MODE_ERTM; 1134 set_bit(CONF_STATE2_DEVICE, &chan->conf_state); 1135 } else { 1136 chan->mode = L2CAP_MODE_BASIC; 1137 } 1138 1139 l2cap_chan_set_defaults(chan); 1140 } 1141 1142 /* Default config options */ 1143 chan->flush_to = L2CAP_DEFAULT_FLUSH_TO; 1144 1145 chan->data = sk; 1146 chan->ops = &l2cap_chan_ops; 1147} 1148 1149static struct proto l2cap_proto = { 1150 .name = "L2CAP", 1151 .owner = THIS_MODULE, 1152 .obj_size = sizeof(struct l2cap_pinfo) 1153}; 1154 1155static struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, gfp_t prio) 1156{ 1157 struct sock *sk; 1158 struct l2cap_chan *chan; 1159 1160 sk = sk_alloc(net, PF_BLUETOOTH, prio, &l2cap_proto); 1161 if (!sk) 1162 return NULL; 1163 1164 sock_init_data(sock, sk); 1165 INIT_LIST_HEAD(&bt_sk(sk)->accept_q); 1166 1167 sk->sk_destruct = l2cap_sock_destruct; 1168 sk->sk_sndtimeo = L2CAP_CONN_TIMEOUT; 1169 1170 sock_reset_flag(sk, SOCK_ZAPPED); 1171 1172 sk->sk_protocol = proto; 1173 sk->sk_state = BT_OPEN; 1174 1175 chan = l2cap_chan_create(); 1176 if (!chan) { 1177 l2cap_sock_kill(sk); 1178 return NULL; 1179 } 1180 1181 l2cap_chan_hold(chan); 1182 1183 chan->sk = sk; 1184 1185 l2cap_pi(sk)->chan = chan; 1186 1187 return sk; 1188} 1189 1190static int l2cap_sock_create(struct net *net, struct socket *sock, int protocol, 1191 int kern) 1192{ 1193 struct sock *sk; 1194 1195 BT_DBG("sock %p", sock); 1196 1197 sock->state = SS_UNCONNECTED; 1198 1199 if (sock->type != SOCK_SEQPACKET && sock->type != SOCK_STREAM && 1200 sock->type != SOCK_DGRAM && sock->type != SOCK_RAW) 1201 return -ESOCKTNOSUPPORT; 1202 1203 if (sock->type == SOCK_RAW && !kern && !capable(CAP_NET_RAW)) 1204 return -EPERM; 1205 1206 sock->ops = &l2cap_sock_ops; 1207 1208 sk = l2cap_sock_alloc(net, sock, protocol, GFP_ATOMIC); 1209 if (!sk) 1210 return -ENOMEM; 1211 1212 l2cap_sock_init(sk, NULL); 1213 return 0; 1214} 1215 1216static const struct proto_ops l2cap_sock_ops = { 1217 .family = PF_BLUETOOTH, 1218 .owner = THIS_MODULE, 1219 .release = l2cap_sock_release, 1220 .bind = l2cap_sock_bind, 1221 .connect = l2cap_sock_connect, 1222 .listen = l2cap_sock_listen, 1223 .accept = l2cap_sock_accept, 1224 .getname = l2cap_sock_getname, 1225 .sendmsg = l2cap_sock_sendmsg, 1226 .recvmsg = l2cap_sock_recvmsg, 1227 .poll = bt_sock_poll, 1228 .ioctl = bt_sock_ioctl, 1229 .mmap = sock_no_mmap, 1230 .socketpair = sock_no_socketpair, 1231 .shutdown = l2cap_sock_shutdown, 1232 .setsockopt = l2cap_sock_setsockopt, 1233 .getsockopt = l2cap_sock_getsockopt 1234}; 1235 1236static const struct net_proto_family l2cap_sock_family_ops = { 1237 .family = PF_BLUETOOTH, 1238 .owner = THIS_MODULE, 1239 .create = l2cap_sock_create, 1240}; 1241 1242int __init l2cap_init_sockets(void) 1243{ 1244 int err; 1245 1246 err = proto_register(&l2cap_proto, 0); 1247 if (err < 0) 1248 return err; 1249 1250 err = bt_sock_register(BTPROTO_L2CAP, &l2cap_sock_family_ops); 1251 if (err < 0) 1252 goto error; 1253 1254 BT_INFO("L2CAP socket layer initialized"); 1255 1256 return 0; 1257 1258error: 1259 BT_ERR("L2CAP socket registration failed"); 1260 proto_unregister(&l2cap_proto); 1261 return err; 1262} 1263 1264void l2cap_cleanup_sockets(void) 1265{ 1266 if (bt_sock_unregister(BTPROTO_L2CAP) < 0) 1267 BT_ERR("L2CAP socket unregistration failed"); 1268 1269 proto_unregister(&l2cap_proto); 1270} 1271