Skip to content

Commit b96e9c6

Browse files
Frédéric DalleauGustavo Padovan
authored andcommitted
Bluetooth: Add BT_DEFER_SETUP option to sco socket
This option will set the BT_SK_DEFER_SETUP bit in socket flags. Signed-off-by: Frédéric Dalleau <frederic.dalleau@linux.intel.com> Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
1 parent b9b5ef1 commit b96e9c6

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

net/bluetooth/sco.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,12 +666,31 @@ static int sco_sock_setsockopt(struct socket *sock, int level, int optname, char
666666
{
667667
struct sock *sk = sock->sk;
668668
int err = 0;
669+
u32 opt;
669670

670671
BT_DBG("sk %p", sk);
671672

672673
lock_sock(sk);
673674

674675
switch (optname) {
676+
677+
case BT_DEFER_SETUP:
678+
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
679+
err = -EINVAL;
680+
break;
681+
}
682+
683+
if (get_user(opt, (u32 __user *) optval)) {
684+
err = -EFAULT;
685+
break;
686+
}
687+
688+
if (opt)
689+
set_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
690+
else
691+
clear_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags);
692+
break;
693+
675694
default:
676695
err = -ENOPROTOOPT;
677696
break;
@@ -753,6 +772,19 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname, char
753772
lock_sock(sk);
754773

755774
switch (optname) {
775+
776+
case BT_DEFER_SETUP:
777+
if (sk->sk_state != BT_BOUND && sk->sk_state != BT_LISTEN) {
778+
err = -EINVAL;
779+
break;
780+
}
781+
782+
if (put_user(test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags),
783+
(u32 __user *) optval))
784+
err = -EFAULT;
785+
786+
break;
787+
756788
default:
757789
err = -ENOPROTOOPT;
758790
break;

0 commit comments

Comments
 (0)