CVE-2022-49371
Severity CVSS v4.0:
Pending analysis
Type:
Unavailable / Other
Publication date:
26/02/2025
Last modified:
01/10/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
driver core: fix deadlock in __device_attach<br />
<br />
In __device_attach function, The lock holding logic is as follows:<br />
...<br />
__device_attach<br />
device_lock(dev) // get lock dev<br />
async_schedule_dev(__device_attach_async_helper, dev); // func<br />
async_schedule_node<br />
async_schedule_node_domain(func)<br />
entry = kzalloc(sizeof(struct async_entry), GFP_ATOMIC);<br />
/* when fail or work limit, sync to execute func, but<br />
__device_attach_async_helper will get lock dev as<br />
well, which will lead to A-A deadlock. */<br />
if (!entry || atomic_read(&entry_count) > MAX_WORK) {<br />
func;<br />
else<br />
queue_work_node(node, system_unbound_wq, &entry->work)<br />
device_unlock(dev)<br />
<br />
As shown above, when it is allowed to do async probes, because of<br />
out of memory or work limit, async work is not allowed, to do<br />
sync execute instead. it will lead to A-A deadlock because of<br />
__device_attach_async_helper getting lock dev.<br />
<br />
To fix the deadlock, move the async_schedule_dev outside device_lock,<br />
as we can see, in async_schedule_node_domain, the parameter of<br />
queue_work_node is system_unbound_wq, so it can accept concurrent<br />
operations. which will also not change the code logic, and will<br />
not lead to deadlock.
Impact
Base Score 3.x
5.50
Severity 3.x
MEDIUM
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.2 (including) | 5.4.198 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.5 (including) | 5.10.122 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.47 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 5.17.15 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.18 (including) | 5.18.4 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/34fdd9b7def9d2fcb71bb7b0bc4848dd7313767e
- https://git.kernel.org/stable/c/36ee9ffca8ef56c302f2855c4a5fccf61c0c1ada
- https://git.kernel.org/stable/c/593b595332bd2d65e1a5c1ae7897996c157f5468
- https://git.kernel.org/stable/c/b232b02bf3c205b13a26dcec08e53baddd8e59ed
- https://git.kernel.org/stable/c/d53a227bfcd5160ce1b61d9954901968a20651e7
- https://git.kernel.org/stable/c/df6de52b80aa3b46f5ac804412355ffe2e1df93e



