Bluetooth: Fix check for direct advertising
authorJohan Hedberg <johan.hedberg@intel.com>
Tue, 28 Oct 2014 21:23:27 +0000 (22:23 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Tue, 28 Oct 2014 21:48:56 +0000 (22:48 +0100)
These days we allow simultaneous LE scanning and advertising. Checking
for whether advertising is enabled or not is therefore not a reliable
way to determine whether directed advertising was used to trigger the
connection creation. The appropriate place to check (instead of the hdev
context) is the connection role that's stored in the hci_conn. This
patch fixes such a check in le_conn_timeout() which could otherwise lead
to incorrect HCI commands being sent.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Cc: stable@vger.kernel.org # 3.16.x
net/bluetooth/hci_conn.c

index 74b8e2421e96c84bf6e7dc95c6cc94e4b4ba8bb1..96887ae8375b52cf545708a3f9ea14fa40fc996a 100644 (file)
@@ -416,7 +416,7 @@ static void le_conn_timeout(struct work_struct *work)
         * happen with broken hardware or if low duty cycle was used
         * (which doesn't have a timeout of its own).
         */
-       if (test_bit(HCI_ADVERTISING, &hdev->dev_flags)) {
+       if (conn->role == HCI_ROLE_SLAVE) {
                u8 enable = 0x00;
                hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
                             &enable);