|
@@ -601,6 +601,11 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char
|
|
|
|
|
|
lock_sock(sk);
|
|
lock_sock(sk);
|
|
|
|
|
|
|
|
+ if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto done;
|
|
|
|
+ }
|
|
|
|
+
|
|
switch (optname) {
|
|
switch (optname) {
|
|
case HCI_DATA_DIR:
|
|
case HCI_DATA_DIR:
|
|
if (get_user(opt, (int __user *)optval)) {
|
|
if (get_user(opt, (int __user *)optval)) {
|
|
@@ -663,6 +668,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+done:
|
|
release_sock(sk);
|
|
release_sock(sk);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|