49 lines
1.8 KiB
Diff
49 lines
1.8 KiB
Diff
|
From 4264c74c96e7907b60ee6ed82670317d19ed7ebe Mon Sep 17 00:00:00 2001
|
||
|
From: Edward Vear <edwardvear@gmail.com>
|
||
|
Date: Tue, 27 Oct 2020 00:02:03 -0700
|
||
|
Subject: Bluetooth: Fix attempting to set RPA timeout when unsupported
|
||
|
|
||
|
During controller initialization, an LE Set RPA Timeout command is sent
|
||
|
to the controller if supported. However, the value checked to determine
|
||
|
if the command is supported is incorrect. Page 1921 of the Bluetooth
|
||
|
Core Spec v5.2 shows that bit 2 of octet 35 of the Supported_Commands
|
||
|
field corresponds to the LE Set RPA Timeout command, but currently
|
||
|
bit 6 of octet 35 is checked. This patch checks the correct value
|
||
|
instead.
|
||
|
|
||
|
This issue led to the error seen in the following btmon output during
|
||
|
initialization of an adapter (rtl8761b) and prevented initialization
|
||
|
from completing.
|
||
|
|
||
|
< HCI Command: LE Set Resolvable Private Address Timeout (0x08|0x002e) plen 2
|
||
|
Timeout: 900 seconds
|
||
|
> HCI Event: Command Complete (0x0e) plen 4
|
||
|
LE Set Resolvable Private Address Timeout (0x08|0x002e) ncmd 2
|
||
|
Status: Unsupported Remote Feature / Unsupported LMP Feature (0x1a)
|
||
|
= Close Index: 00:E0:4C:6B:E5:03
|
||
|
|
||
|
The error did not appear when running with this patch.
|
||
|
|
||
|
Signed-off-by: Edward Vear <edwardvear@gmail.com>
|
||
|
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
|
||
|
---
|
||
|
net/bluetooth/hci_core.c | 2 +-
|
||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||
|
|
||
|
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
|
||
|
index be9cdf5dabe5..30a5267af490 100644
|
||
|
--- a/net/bluetooth/hci_core.c
|
||
|
+++ b/net/bluetooth/hci_core.c
|
||
|
@@ -763,7 +763,7 @@ static int hci_init3_req(struct hci_request *req, unsigned long opt)
|
||
|
hci_req_add(req, HCI_OP_LE_CLEAR_RESOLV_LIST, 0, NULL);
|
||
|
}
|
||
|
|
||
|
- if (hdev->commands[35] & 0x40) {
|
||
|
+ if (hdev->commands[35] & 0x04) {
|
||
|
__le16 rpa_timeout = cpu_to_le16(hdev->rpa_timeout);
|
||
|
|
||
|
/* Set RPA timeout */
|
||
|
--
|
||
|
cgit v1.2.3-1-gf6bb5
|
||
|
|