bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX
Subsystems (2)
PATCH 1/1 bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX
Syzbot hit warning in hci_conn_del() caused by freeing handle that was not allocated using ida allocator.
This is caused by handle bigger than HCI_CONN_HANDLE_MAX passed by hci_le_big_sync_established_evt(), which makes code think it's unset connection.
Add same check for handle upper bound as in hci_conn_set_handle() to prevent warning.
--- net/bluetooth/hci_conn.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-)
net/bluetooth/hci_conn.c +12 -3
@@ -899,8 +899,8 @@ static int hci_conn_hash_alloc_unset(struct hci_dev *hdev) U16_MAX, GFP_ATOMIC); } -struct hci_conn *hci_conn_add (struct hci_dev *hdev,int type,bdaddr_t *dst, -u8 role,u16 handle) +static struct hci_conn *__hci_conn_add (struct hci_dev *hdev,int type,bdaddr_t *dst, +u8 role,u16 handle) {struct hci_conn *conn;
@@ -1041,7 +1041,16 @@ struct hci_conn *hci_conn_add_unset(struct hci_dev *hdev, int type,if (unlikely (handle <0 ))return ERR_PTR (-ECONNREFUSED ); -return hci_conn_add (hdev, type, dst, role, handle); +return __hci_conn_add (hdev, type, dst, role, handle); +} + +struct hci_conn *hci_conn_add (struct hci_dev *hdev,int type,bdaddr_t *dst, +u8 role,u16 handle) +{ +if (handle >HCI_CONN_HANDLE_MAX ) +return ERR_PTR (-EINVAL ); + +return __hci_conn_add (hdev, type, dst, role, handle); }static void hci_conn_cleanup_child (struct hci_conn *conn,u8 reason)
Signature · 1 line
2.45.2
This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <[email protected]>:
Hello:
This patch was applied to bluetooth/bluetooth-next.git (master) by Luiz Augusto von Dentz <[email protected]>:
Quoted 8 lines · On Thu, 20 Jun 2024 22:27:47 +0300 you wrote:
Syzbot hit warning in
hci_conn_del()caused by freeing handle that was not allocated using ida allocator.This is caused by handle bigger than
HCI_CONN_HANDLE_MAXpassed byhci_le_big_sync_established_evt(), which makes code think it's unset connection.[...]
Here is the summary with links:
- bluetooth/hci: disallow setting handle bigger than HCI_CONN_HANDLE_MAX
https://git.kernel.org/bluetooth/bluetooth-next/c/6115f1ecd308
You are awesome, thank you!
Signature · 2 lines
Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html