diff options
Diffstat (limited to 'net/bluetooth/l2cap_sock.c')
-rw-r--r-- | net/bluetooth/l2cap_sock.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c index f52d58e05d02..3bb1611b9d48 100644 --- a/net/bluetooth/l2cap_sock.c +++ b/net/bluetooth/l2cap_sock.c | |||
@@ -324,8 +324,8 @@ static int l2cap_sock_getsockopt_old(struct socket *sock, int optname, char __us | |||
324 | 324 | ||
325 | case L2CAP_CONNINFO: | 325 | case L2CAP_CONNINFO: |
326 | if (sk->sk_state != BT_CONNECTED && | 326 | if (sk->sk_state != BT_CONNECTED && |
327 | !(sk->sk_state == BT_CONNECT2 && | 327 | !(sk->sk_state == BT_CONNECT2 && |
328 | bt_sk(sk)->defer_setup)) { | 328 | test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))) { |
329 | err = -ENOTCONN; | 329 | err = -ENOTCONN; |
330 | break; | 330 | break; |
331 | } | 331 | } |
@@ -399,7 +399,8 @@ static int l2cap_sock_getsockopt(struct socket *sock, int level, int optname, ch | |||
399 | break; | 399 | break; |
400 | } | 400 | } |
401 | 401 | ||
402 | if (put_user(bt_sk(sk)->defer_setup, (u32 __user *) optval)) | 402 | if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags), |
403 | (u32 __user *) optval)) | ||
403 | err = -EFAULT; | 404 | err = -EFAULT; |
404 | 405 | ||
405 | break; | 406 | break; |
@@ -601,10 +602,10 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch | |||
601 | 602 | ||
602 | /* or for ACL link */ | 603 | /* or for ACL link */ |
603 | } else if ((sk->sk_state == BT_CONNECT2 && | 604 | } else if ((sk->sk_state == BT_CONNECT2 && |
604 | bt_sk(sk)->defer_setup) || | 605 | test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) || |
605 | sk->sk_state == BT_CONNECTED) { | 606 | sk->sk_state == BT_CONNECTED) { |
606 | if (!l2cap_chan_check_security(chan)) | 607 | if (!l2cap_chan_check_security(chan)) |
607 | bt_sk(sk)->suspended = true; | 608 | set_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags); |
608 | else | 609 | else |
609 | sk->sk_state_change(sk); | 610 | sk->sk_state_change(sk); |
610 | } else { | 611 | } else { |
@@ -623,7 +624,10 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname, ch | |||
623 | break; | 624 | break; |
624 | } | 625 | } |
625 | 626 | ||
626 | bt_sk(sk)->defer_setup = opt; | 627 | if (opt) |
628 | set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); | ||
629 | else | ||
630 | clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags); | ||
627 | break; | 631 | break; |
628 | 632 | ||
629 | case BT_FLUSHABLE: | 633 | case BT_FLUSHABLE: |
@@ -741,7 +745,8 @@ static int l2cap_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct ms | |||
741 | 745 | ||
742 | lock_sock(sk); | 746 | lock_sock(sk); |
743 | 747 | ||
744 | if (sk->sk_state == BT_CONNECT2 && bt_sk(sk)->defer_setup) { | 748 | if (sk->sk_state == BT_CONNECT2 && test_bit(BT_SK_DEFER_SETUP, |
749 | &bt_sk(sk)->flags)) { | ||
745 | sk->sk_state = BT_CONFIG; | 750 | sk->sk_state = BT_CONFIG; |
746 | pi->chan->state = BT_CONFIG; | 751 | pi->chan->state = BT_CONFIG; |
747 | 752 | ||
@@ -984,7 +989,7 @@ static void l2cap_sock_init(struct sock *sk, struct sock *parent) | |||
984 | struct l2cap_chan *pchan = l2cap_pi(parent)->chan; | 989 | struct l2cap_chan *pchan = l2cap_pi(parent)->chan; |
985 | 990 | ||
986 | sk->sk_type = parent->sk_type; | 991 | sk->sk_type = parent->sk_type; |
987 | bt_sk(sk)->defer_setup = bt_sk(parent)->defer_setup; | 992 | bt_sk(sk)->flags = bt_sk(parent)->flags; |
988 | 993 | ||
989 | chan->chan_type = pchan->chan_type; | 994 | chan->chan_type = pchan->chan_type; |
990 | chan->imtu = pchan->imtu; | 995 | chan->imtu = pchan->imtu; |