Bluetooth: Fix not notifying when connection encryption changes
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 23 Oct 2023 23:26:23 +0000 (16:26 -0700)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 15 Dec 2023 16:24:42 +0000 (11:24 -0500)
Some layers such as SMP depend on getting notified about encryption
changes immediately as they only allow certain PDU to be transmitted
over an encrypted link which may cause SMP implementation to reject
valid PDUs received thus causing pairing to fail when it shouldn't.

Fixes: 7aca0ac4792e ("Bluetooth: Wait for HCI_OP_WRITE_AUTH_PAYLOAD_TO to complete")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/hci_event.c

index 0849e0dafa951c65918b51c77b621fc9dd531a3d..5b6fd625fc09c23237d1ffe872446aecfb02c5ce 100644 (file)
@@ -820,8 +820,6 @@ static u8 hci_cc_write_auth_payload_timeout(struct hci_dev *hdev, void *data,
        if (!rp->status)
                conn->auth_payload_timeout = get_unaligned_le16(sent + 2);
 
-       hci_encrypt_cfm(conn, 0);
-
 unlock:
        hci_dev_unlock(hdev);
 
@@ -3683,12 +3681,8 @@ static void hci_encrypt_change_evt(struct hci_dev *hdev, void *data,
                cp.handle = cpu_to_le16(conn->handle);
                cp.timeout = cpu_to_le16(hdev->auth_payload_timeout);
                if (hci_send_cmd(conn->hdev, HCI_OP_WRITE_AUTH_PAYLOAD_TO,
-                                sizeof(cp), &cp)) {
+                                sizeof(cp), &cp))
                        bt_dev_err(hdev, "write auth payload timeout failed");
-                       goto notify;
-               }
-
-               goto unlock;
        }
 
 notify: