l2cap_sock.c (9a91a04a95d30a18909e2aec9d7b17b4c86088a7) | l2cap_sock.c (715ec005cd10c5d53109ffe513e4d403644e3e48) |
---|---|
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 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 --- 148 unchanged lines hidden (view full) --- 157 len = min_t(unsigned int, sizeof(la), alen); 158 memcpy(&la, addr, len); 159 160 if (la.l2_cid && la.l2_psm) 161 return -EINVAL; 162 163 lock_sock(sk); 164 | 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 7 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com> 8 --- 148 unchanged lines hidden (view full) --- 157 len = min_t(unsigned int, sizeof(la), alen); 158 memcpy(&la, addr, len); 159 160 if (la.l2_cid && la.l2_psm) 161 return -EINVAL; 162 163 lock_sock(sk); 164 |
165 if ((sk->sk_type == SOCK_SEQPACKET || sk->sk_type == SOCK_STREAM) | 165 if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED |
166 && !(la.l2_psm || la.l2_cid)) { 167 err = -EINVAL; 168 goto done; 169 } 170 171 switch (chan->mode) { 172 case L2CAP_MODE_BASIC: 173 break; --- 25 unchanged lines hidden (view full) --- 199 break; 200 201 default: 202 err = -EBADFD; 203 goto done; 204 } 205 206 /* PSM must be odd and lsb of upper byte must be 0 */ | 166 && !(la.l2_psm || la.l2_cid)) { 167 err = -EINVAL; 168 goto done; 169 } 170 171 switch (chan->mode) { 172 case L2CAP_MODE_BASIC: 173 break; --- 25 unchanged lines hidden (view full) --- 199 break; 200 201 default: 202 err = -EBADFD; 203 goto done; 204 } 205 206 /* PSM must be odd and lsb of upper byte must be 0 */ |
207 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 && 208 sk->sk_type != SOCK_RAW && !la.l2_cid) { | 207 if ((__le16_to_cpu(la.l2_psm) & 0x0101) != 0x0001 && !la.l2_cid && 208 chan->chan_type != L2CAP_CHAN_RAW) { |
209 err = -EINVAL; 210 goto done; 211 } 212 213 /* Set destination address and psm */ 214 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr); 215 chan->psm = la.l2_psm; 216 chan->dcid = la.l2_cid; --- 231 unchanged lines hidden (view full) --- 448 449 if (get_user(len, optlen)) 450 return -EFAULT; 451 452 lock_sock(sk); 453 454 switch (optname) { 455 case BT_SECURITY: | 209 err = -EINVAL; 210 goto done; 211 } 212 213 /* Set destination address and psm */ 214 bacpy(&bt_sk(sk)->dst, &la.l2_bdaddr); 215 chan->psm = la.l2_psm; 216 chan->dcid = la.l2_cid; --- 231 unchanged lines hidden (view full) --- 448 449 if (get_user(len, optlen)) 450 return -EFAULT; 451 452 lock_sock(sk); 453 454 switch (optname) { 455 case BT_SECURITY: |
456 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 457 && sk->sk_type != SOCK_RAW) { | 456 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 457 chan->chan_type != L2CAP_CHAN_RAW) { |
458 err = -EINVAL; 459 break; 460 } 461 462 sec.level = chan->sec_level; 463 464 len = min_t(unsigned int, len, sizeof(sec)); 465 if (copy_to_user(optval, (char *) &sec, len)) --- 128 unchanged lines hidden (view full) --- 594 595 if (level != SOL_BLUETOOTH) 596 return -ENOPROTOOPT; 597 598 lock_sock(sk); 599 600 switch (optname) { 601 case BT_SECURITY: | 458 err = -EINVAL; 459 break; 460 } 461 462 sec.level = chan->sec_level; 463 464 len = min_t(unsigned int, len, sizeof(sec)); 465 if (copy_to_user(optval, (char *) &sec, len)) --- 128 unchanged lines hidden (view full) --- 594 595 if (level != SOL_BLUETOOTH) 596 return -ENOPROTOOPT; 597 598 lock_sock(sk); 599 600 switch (optname) { 601 case BT_SECURITY: |
602 if (sk->sk_type != SOCK_SEQPACKET && sk->sk_type != SOCK_STREAM 603 && sk->sk_type != SOCK_RAW) { | 602 if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED && 603 chan->chan_type != L2CAP_CHAN_RAW) { |
604 err = -EINVAL; 605 break; 606 } 607 608 sec.level = BT_SECURITY_LOW; 609 610 len = min_t(unsigned int, sizeof(sec), optlen); 611 if (copy_from_user((char *) &sec, optval, len)) { --- 189 unchanged lines hidden (view full) --- 801 BT_DBG("sk %p", sk); 802 803 if (parent) { 804 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; 805 806 sk->sk_type = parent->sk_type; 807 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup; 808 | 604 err = -EINVAL; 605 break; 606 } 607 608 sec.level = BT_SECURITY_LOW; 609 610 len = min_t(unsigned int, sizeof(sec), optlen); 611 if (copy_from_user((char *) &sec, optval, len)) { --- 189 unchanged lines hidden (view full) --- 801 BT_DBG("sk %p", sk); 802 803 if (parent) { 804 struct l2cap_chan *pchan = l2cap_pi(parent)->chan; 805 806 sk->sk_type = parent->sk_type; 807 bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup; 808 |
809 chan->chan_type = pchan->chan_type; |
|
809 chan->imtu = pchan->imtu; 810 chan->omtu = pchan->omtu; 811 chan->conf_state = pchan->conf_state; 812 chan->mode = pchan->mode; 813 chan->fcs = pchan->fcs; 814 chan->max_tx = pchan->max_tx; 815 chan->tx_win = pchan->tx_win; 816 chan->sec_level = pchan->sec_level; 817 chan->role_switch = pchan->role_switch; 818 chan->force_reliable = pchan->force_reliable; 819 chan->flushable = pchan->flushable; 820 } else { | 810 chan->imtu = pchan->imtu; 811 chan->omtu = pchan->omtu; 812 chan->conf_state = pchan->conf_state; 813 chan->mode = pchan->mode; 814 chan->fcs = pchan->fcs; 815 chan->max_tx = pchan->max_tx; 816 chan->tx_win = pchan->tx_win; 817 chan->sec_level = pchan->sec_level; 818 chan->role_switch = pchan->role_switch; 819 chan->force_reliable = pchan->force_reliable; 820 chan->flushable = pchan->flushable; 821 } else { |
822 823 switch (sk->sk_type) { 824 case SOCK_RAW: 825 chan->chan_type = L2CAP_CHAN_RAW; 826 break; 827 case SOCK_DGRAM: 828 chan->chan_type = L2CAP_CHAN_CONN_LESS; 829 break; 830 case SOCK_SEQPACKET: 831 case SOCK_STREAM: 832 chan->chan_type = L2CAP_CHAN_CONN_ORIENTED; 833 break; 834 } 835 |
|
821 chan->imtu = L2CAP_DEFAULT_MTU; 822 chan->omtu = 0; 823 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 824 chan->mode = L2CAP_MODE_ERTM; 825 chan->conf_state |= L2CAP_CONF_STATE2_DEVICE; 826 } else { 827 chan->mode = L2CAP_MODE_BASIC; 828 } --- 133 unchanged lines hidden --- | 836 chan->imtu = L2CAP_DEFAULT_MTU; 837 chan->omtu = 0; 838 if (!disable_ertm && sk->sk_type == SOCK_STREAM) { 839 chan->mode = L2CAP_MODE_ERTM; 840 chan->conf_state |= L2CAP_CONF_STATE2_DEVICE; 841 } else { 842 chan->mode = L2CAP_MODE_BASIC; 843 } --- 133 unchanged lines hidden --- |