Bluetooth: Fix incorrect bits for LE states
authorŁukasz Rymanowski <lukasz.rymanowski@codecoup.pl>
Fri, 9 Feb 2018 17:26:02 +0000 (18:26 +0100)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 10 Feb 2018 17:37:29 +0000 (18:37 +0100)
This patch fixes incorrect checks for LE states.
Issues found when doing mgmt tests for scenario
when Linux Kernel should do connectable advertising
while connected.

Signed-off-by: Łukasz Rymanowski <lukasz.rymanowski@codecoup.pl>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_request.c

index 3394e67..66c0781 100644 (file)
@@ -934,8 +934,8 @@ static bool is_advertising_allowed(struct hci_dev *hdev, bool connectable)
                /* Slave connection state and connectable mode bit 38
                 * and scannable bit 21.
                 */
-               if (connectable && (!(hdev->le_states[4] & 0x01) ||
-                                   !(hdev->le_states[2] & 0x40)))
+               if (connectable && (!(hdev->le_states[4] & 0x40) ||
+                                   !(hdev->le_states[2] & 0x20)))
                        return false;
        }
 
@@ -948,7 +948,7 @@ static bool is_advertising_allowed(struct hci_dev *hdev, bool connectable)
                /* Master connection state and connectable mode bit 35 and
                 * scannable 19.
                 */
-               if (connectable && (!(hdev->le_states[4] & 0x10) ||
+               if (connectable && (!(hdev->le_states[4] & 0x08) ||
                                    !(hdev->le_states[2] & 0x08)))
                        return false;
        }