aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_sock.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2012-02-20 08:50:32 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2012-02-20 08:55:54 -0500
commit2f39cdb7a270da24532734dfdfd10c490be981c4 (patch)
tree23287d6082f8dca48ea1631b6bbbcece87c825d4 /net/bluetooth/hci_sock.c
parenta6fb08dfe8654e399c9bbca34be914e213560b5e (diff)
Bluetooth: Limit HCI raw socket options to actual raw sockets
Currently the socket options of HCI sockets can be set on raw and control sockets, but on control sockets they make no sense. So just return EINVAL in that case. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_sock.c')
-rw-r--r--net/bluetooth/hci_sock.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
index b5b3bc8d2848..612bc2af05a9 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
@@ -601,6 +601,11 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char
601 601
602 lock_sock(sk); 602 lock_sock(sk);
603 603
604 if (hci_pi(sk)->channel != HCI_CHANNEL_RAW) {
605 err = -EINVAL;
606 goto done;
607 }
608
604 switch (optname) { 609 switch (optname) {
605 case HCI_DATA_DIR: 610 case HCI_DATA_DIR:
606 if (get_user(opt, (int __user *)optval)) { 611 if (get_user(opt, (int __user *)optval)) {
@@ -663,6 +668,7 @@ static int hci_sock_setsockopt(struct socket *sock, int level, int optname, char
663 break; 668 break;
664 } 669 }
665 670
671done:
666 release_sock(sk); 672 release_sock(sk);
667 return err; 673 return err;
668} 674}