Bluetooth: Fix enabling advertising for central role
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 20 Aug 2021 23:40:38 +0000 (16:40 -0700)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 30 Aug 2021 14:49:26 +0000 (16:49 +0200)
When disconnecting the advertising shall be re-enabled only when the
connection role is slave/peripheral as the central role use advertising
to connect it could end up enabling the instance 0x00 if there are other
advertising instances.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_event.c

index 0bca035..293d4c9 100644 (file)
@@ -2351,7 +2351,7 @@ static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
                mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
                                       conn->dst_type, status);
 
-               if (conn->type == LE_LINK) {
+               if (conn->type == LE_LINK && conn->role == HCI_ROLE_SLAVE) {
                        hdev->cur_adv_instance = conn->adv_instance;
                        hci_req_reenable_advertising(hdev);
                }
@@ -2961,7 +2961,7 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
         * or until a connection is created or until the Advertising
         * is timed out due to Directed Advertising."
         */
-       if (conn->type == LE_LINK) {
+       if (conn->type == LE_LINK && conn->role == HCI_ROLE_SLAVE) {
                hdev->cur_adv_instance = conn->adv_instance;
                hci_req_reenable_advertising(hdev);
        }