Skip to content

Commit 4d19cd2

Browse files
Yang LiVudentz
authored andcommitted
Bluetooth: hci_sync: Prevent unintended PA sync when SID is 0xFF
After LE Extended Scan times out, conn->sid remains 0xFF, so the PA sync creation process should be aborted. Btmon snippet from PA sync with SID=0xFF: < HCI Command: LE Set Extended.. (0x08|0x0042) plen 6 #74726 [hci0] 863.107927 Extended scan: Enabled (0x01) Filter duplicates: Enabled (0x01) Duration: 0 msec (0x0000) Period: 0.00 sec (0x0000) > HCI Event: Command Complete (0x0e) plen 4 #74727 [hci0] 863.109389 LE Set Extended Scan Enable (0x08|0x0042) ncmd 1 Status: Success (0x00) < HCI Command: LE Periodic Ad.. (0x08|0x0044) plen 14 #74728 [hci0] 865.141168 Options: 0x0000 Use advertising SID, Advertiser Address Type and address Reporting initially enabled SID: 0xff Adv address type: Random (0x01) Adv address: 0D:D7:2C:E7:42:46 (Non-Resolvable) Skip: 0x0000 Sync timeout: 20000 msec (0x07d0) Sync CTE type: 0x0000 > HCI Event: Command Status (0x0f) plen 4 #74729 [hci0] 865.143223 LE Periodic Advertising Create Sync (0x08|0x0044) ncmd 1 Status: Success (0x00) Fixes: e2d471b ("Bluetooth: ISO: Fix not using SID from adv report") Signed-off-by: Yang Li <yang.li@amlogic.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
1 parent 3dcf717 commit 4d19cd2

File tree

1 file changed

+8
-4
lines changed

1 file changed

+8
-4
lines changed

net/bluetooth/hci_sync.c

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7045,10 +7045,13 @@ static int hci_le_pa_create_sync(struct hci_dev *hdev, void *data)
70457045
/* SID has not been set listen for HCI_EV_LE_EXT_ADV_REPORT to update
70467046
* it.
70477047
*/
7048-
if (conn->sid == HCI_SID_INVALID)
7049-
__hci_cmd_sync_status_sk(hdev, HCI_OP_NOP, 0, NULL,
7050-
HCI_EV_LE_EXT_ADV_REPORT,
7051-
conn->conn_timeout, NULL);
7048+
if (conn->sid == HCI_SID_INVALID) {
7049+
err = __hci_cmd_sync_status_sk(hdev, HCI_OP_NOP, 0, NULL,
7050+
HCI_EV_LE_EXT_ADV_REPORT,
7051+
conn->conn_timeout, NULL);
7052+
if (err == -ETIMEDOUT)
7053+
goto done;
7054+
}
70527055

70537056
memset(&cp, 0, sizeof(cp));
70547057
cp.options = qos->bcast.options;
@@ -7078,6 +7081,7 @@ static int hci_le_pa_create_sync(struct hci_dev *hdev, void *data)
70787081
__hci_cmd_sync_status(hdev, HCI_OP_LE_PA_CREATE_SYNC_CANCEL,
70797082
0, NULL, HCI_CMD_TIMEOUT);
70807083

7084+
done:
70817085
hci_dev_clear_flag(hdev, HCI_PA_SYNC);
70827086

70837087
/* Update passive scan since HCI_PA_SYNC flag has been cleared */

0 commit comments

Comments
 (0)