Bluetooth: Fix incorrectly setting HCI_CONNECTABLE
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 9 Jul 2014 09:59:16 +0000 (12:59 +0300)
committerMarcel Holtmann <marcel@holtmann.org>
Wed, 9 Jul 2014 10:25:27 +0000 (12:25 +0200)
Since page scan might be enabled by Add Device we should not implicitly
set connectable whenever something else than Set Connectable changes it.
This patch makes sure that we don't set HCI_CONNECTABLE for these cases
if there are any entries in the white list.

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

index 72ff19f26991bccfdc1910ce09d2cc7848f8588f..5a866b65371c33fc6e5d95213acc4b6c8b034e72 100644 (file)
@@ -6076,6 +6076,14 @@ void mgmt_connectable(struct hci_dev *hdev, u8 connectable)
        if (!connectable && mgmt_pending_find(MGMT_OP_SET_POWERED, hdev))
                return;
 
+       /* If something else than mgmt changed the page scan state we
+        * can't differentiate this from a change triggered by adding
+        * the first element to the whitelist. Therefore, avoid
+        * incorrectly setting HCI_CONNECTABLE.
+        */
+       if (connectable && !list_empty(&hdev->whitelist))
+               return;
+
        if (connectable)
                changed = !test_and_set_bit(HCI_CONNECTABLE, &hdev->dev_flags);
        else