Bluetooth: Limit userspace exposure of stack internal events
authorMarcel Holtmann <marcel@holtmann.org>
Sun, 4 Oct 2015 21:33:59 +0000 (23:33 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Mon, 5 Oct 2015 07:29:23 +0000 (10:29 +0300)
The stack internal events that are exposed to userspace should be
limited to HCI_DEV_REG, HCI_DEV_UNREG, HCI_DEV_UP and HCI_DEV_DOWN.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
net/bluetooth/hci_sock.c

index 150556345263357a04a6bf2eb53382894a374349..d9ad68448173da4fe1be88348ed62a4641b41700 100644 (file)
@@ -392,14 +392,12 @@ static void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
 
 void hci_sock_dev_event(struct hci_dev *hdev, int event)
 {
-       struct hci_ev_si_device ev;
-
        BT_DBG("hdev %s event %d", hdev->name, event);
 
-       /* Send event to monitor */
        if (atomic_read(&monitor_promisc)) {
                struct sk_buff *skb;
 
+               /* Send event to monitor */
                skb = create_monitor_event(hdev, event);
                if (skb) {
                        hci_send_to_channel(HCI_CHANNEL_MONITOR, skb,
@@ -408,10 +406,14 @@ void hci_sock_dev_event(struct hci_dev *hdev, int event)
                }
        }
 
-       /* Send event to sockets */
-       ev.event  = event;
-       ev.dev_id = hdev->id;
-       hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
+       if (event <= HCI_DEV_DOWN) {
+               struct hci_ev_si_device ev;
+
+               /* Send event to sockets */
+               ev.event  = event;
+               ev.dev_id = hdev->id;
+               hci_si_event(NULL, HCI_EV_SI_DEVICE, sizeof(ev), &ev);
+       }
 
        if (event == HCI_DEV_UNREG) {
                struct sock *sk;