Преглед изворни кода

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>
Marcel Holtmann пре 13 година
родитељ
комит
2f39cdb7a2
1 измењених фајлова са 6 додато и 0 уклоњено
  1. 6 0
      net/bluetooth/hci_sock.c

+ 6 - 0
net/bluetooth/hci_sock.c

@@ -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;
 }
 }