Skip to content

Commit 0677a4f

Browse files
Vudentzgregkh
authored andcommitted
Bluetooth: hci_event: Fix enabling passive scanning
[ Upstream commit 0bdd889 ] Passive scanning shall only be enabled when disconnecting LE links, otherwise it may start result in triggering scanning when e.g. an ISO link disconnects: > HCI Event: LE Meta Event (0x3e) plen 29 LE Connected Isochronous Stream Established (0x19) Status: Success (0x00) Connection Handle: 257 CIG Synchronization Delay: 0 us (0x000000) CIS Synchronization Delay: 0 us (0x000000) Central to Peripheral Latency: 10000 us (0x002710) Peripheral to Central Latency: 10000 us (0x002710) Central to Peripheral PHY: LE 2M (0x02) Peripheral to Central PHY: LE 2M (0x02) Number of Subevents: 1 Central to Peripheral Burst Number: 1 Peripheral to Central Burst Number: 1 Central to Peripheral Flush Timeout: 2 Peripheral to Central Flush Timeout: 2 Central to Peripheral MTU: 320 Peripheral to Central MTU: 160 ISO Interval: 10.00 msec (0x0008) ... > HCI Event: Disconnect Complete (0x05) plen 4 Status: Success (0x00) Handle: 257 Reason: Remote User Terminated Connection (0x13) < HCI Command: LE Set Extended Scan Enable (0x08|0x0042) plen 6 Extended scan: Enabled (0x01) Filter duplicates: Enabled (0x01) Duration: 0 msec (0x0000) Period: 0.00 sec (0x0000) Fixes: 9fcb18e ("Bluetooth: Introduce LE auto connect options") Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
1 parent a5158d6 commit 0677a4f

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

net/bluetooth/hci_event.c

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3393,23 +3393,30 @@ static void hci_disconn_complete_evt(struct hci_dev *hdev, void *data,
33933393
hci_update_scan(hdev);
33943394
}
33953395

3396-
params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
3397-
if (params) {
3398-
switch (params->auto_connect) {
3399-
case HCI_AUTO_CONN_LINK_LOSS:
3400-
if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
3396+
/* Re-enable passive scanning if disconnected device is marked
3397+
* as auto-connectable.
3398+
*/
3399+
if (conn->type == LE_LINK) {
3400+
params = hci_conn_params_lookup(hdev, &conn->dst,
3401+
conn->dst_type);
3402+
if (params) {
3403+
switch (params->auto_connect) {
3404+
case HCI_AUTO_CONN_LINK_LOSS:
3405+
if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
3406+
break;
3407+
fallthrough;
3408+
3409+
case HCI_AUTO_CONN_DIRECT:
3410+
case HCI_AUTO_CONN_ALWAYS:
3411+
hci_pend_le_list_del_init(params);
3412+
hci_pend_le_list_add(params,
3413+
&hdev->pend_le_conns);
3414+
hci_update_passive_scan(hdev);
34013415
break;
3402-
fallthrough;
34033416

3404-
case HCI_AUTO_CONN_DIRECT:
3405-
case HCI_AUTO_CONN_ALWAYS:
3406-
hci_pend_le_list_del_init(params);
3407-
hci_pend_le_list_add(params, &hdev->pend_le_conns);
3408-
hci_update_passive_scan(hdev);
3409-
break;
3410-
3411-
default:
3412-
break;
3417+
default:
3418+
break;
3419+
}
34133420
}
34143421
}
34153422

0 commit comments

Comments
 (0)