Skip to contentSkip to conversation

Bluetooth: hci_core: Fix attempting to set RPA timeout when unsupported

PATCH In review Edward Vear 2 participants 3 messages Oct 27, 2020 – Nov 25, 2020

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Bluetooth: hci_core: 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

Quoted 1 line

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.

---
 net/bluetooth/hci_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
net/bluetooth/hci_core.c +1 -1
index 502552d6e9af..c4aa2cbb9269 100644
@@ -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 */
Signature · 1 line
2.29.1
#1 lore raw

Just following up on this. It appears several people have had success using this patch to get their bluetooth devices working:
https://bugzilla.kernel.org/show_bug.cgi?id=208965. Is there anything else I should include?

Best,
Edward

Quoted 43 lines · Edward Vear

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

Quoted 1 line

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.

---
 net/bluetooth/hci_core.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
net/bluetooth/hci_core.c +1 -2
index 502552d6e9af..c4aa2cbb9269 100644
@@ -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 */
--

2.29.1

maintainer
#2 lore raw
In reply to Edward Vear

Hi Edward,

Quoted 17 lines

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

Quoted 1 line

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)
Quoted 8 lines

= Close Index: 00:E0:4C:6B:E5:03

The error did not appear when running with this patch.

---
net/bluetooth/hci_core.c | 2 +-

1 file changed, 1 insertion(+), 1 deletion(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel