Subject: CVE-2024-41063: Bluetooth: hci_core: cancel all works upon hci_unregister_dev()

From: Greg Kroah-Hartman <[email-masked]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

Bluetooth: hci_core: cancel all works upon hci_unregister_dev()

syzbot is reporting that calling hci_release_dev() from hci_error_reset()
due to hci_dev_put() from hci_error_reset() can cause deadlock at
destroy_workqueue(), for hci_error_reset() is called from
hdev->req_workqueue which destroy_workqueue() needs to flush.

We need to make sure that hdev->{rx_work,cmd_work,tx_work} which are
queued into hdev->workqueue and hdev->{power_on,error_reset} which are
queued into hdev->req_workqueue are no longer running by the moment

       destroy_workqueue(hdev->workqueue);
       destroy_workqueue(hdev->req_workqueue);

are called from hci_release_dev().

Call cancel_work_sync() on these work items from hci_unregister_dev()
as soon as hdev->list is removed from hci_dev_list.

The Linux kernel CVE team has assigned CVE-2024-41063 to this issue.

Affected and fixed versions
===========================

	Fixed in 4.19.319 with commit 48542881997e
	Fixed in 5.4.281 with commit 9cfc84b1d464
	Fixed in 5.10.223 with commit ddeda6ca5f21
	Fixed in 5.15.164 with commit d2ce562a5aff
	Fixed in 6.1.101 with commit 96600c2e5ee8
	Fixed in 6.6.42 with commit d6cbce183706
	Fixed in 6.9.11 with commit 3f939bd73fed
	Fixed in 6.10 with commit 0d151a103775

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2024-41063
will be updated if fixes are backported, please check that for the most
up to date information about this issue.

Affected files
==============

The file(s) affected by this issue are:
	net/bluetooth/hci_core.c

Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/48542881997e17b49dc16b93fe910e0cfcf7a9f9
	https://git.kernel.org/stable/c/9cfc84b1d464cc024286f42a090718f9067b80ed
	https://git.kernel.org/stable/c/ddeda6ca5f218b668b560d90fc31ae469adbfd92
	https://git.kernel.org/stable/c/d2ce562a5aff1dcd0c50d9808ea825ef90da909f
	https://git.kernel.org/stable/c/96600c2e5ee8213dbab5df1617293d8e847bb4fa
	https://git.kernel.org/stable/c/d6cbce18370641a21dd889e8613d8153df15eb39
	https://git.kernel.org/stable/c/3f939bd73fed12dddc2a32a76116c19ca47c7678
	https://git.kernel.org/stable/c/0d151a103775dd9645c78c97f77d6e2a5298d913