CVE-2025-38687

comedi: fix race between polling and detaching

MEDIUM
4.7
CVSS Score
Published: September 4, 2025 at 03:32 PM UTC
Updated: October 19, 2026 at 09:10 PM UTC
3 products affected across 3 vendorsLinux KernelDebian LinuxSIMATIC CN 4100

Using Linux by Linux?

Get instant alerts when new vulnerabilities affect Linux - before attackers find them.

Real-time alertsTrack your software stackFree plan available
Severity
MEDIUM4.7
Exploit prediction
EPSS 0.1%

Description

In the Linux kernel, the following vulnerability has been resolved: comedi: fix race between polling and detaching syzbot reports a use-after-free in comedi in the below link, which is due to comedi gladly removing the allocated async area even though poll requests are still active on the wait_queue_head inside of it. This can cause a use-after-free when the poll entries are later triggered or removed, as the memory for the wait_queue_head has been freed. We need to check there are no tasks queued on any of the subdevices' wait queues before allowing the device to be detached by the `COMEDI_DEVCONFIG` ioctl. Tasks will read-lock `dev->attach_lock` before adding themselves to the subdevice wait queue, so fix the problem in the `COMEDI_DEVCONFIG` ioctl handler by write-locking `dev->attach_lock` before checking that all of the subdevices are safe to be deleted. This includes testing for any sleepers on the subdevices' wait queues. It remains locked until the device has been detached. This requires the `comedi_device_detach()` function to be refactored slightly, moving the bulk of it into new function `comedi_device_detach_locked()`. Note that the refactor of `comedi_device_detach()` results in `comedi_device_cancel_all()` now being called while `dev->attach_lock` is write-locked, which wasn't the case previously, but that does not matter. Thanks to Jens Axboe for diagnosing the problem and co-developing this patch.

Affected

Our own answer: ranges merged, affected separated from platform-only, with confidence and review flags.

3.14 ≤ v < 5.4.2975.11 ≤ v < 5.15.1905.16 ≤ v < 6.1.1495.5 ≤ v < 5.10.2416.13 ≤ v < 6.15.116.16 ≤ v < 6.16.26.2 ≤ v < 6.6.1036.7 ≤ v < 6.12.432f3fdcd7ce935f6f2899ceab57dc8fe5286db3e13.14
Vendor states this is fixed in 017198079551a2a5cf61eae966af3c4b145e1f3b (fixed)
Vendor states this is fixed in 0f989f9d05492028afd2bded4b42023c57d8a76e (fixed)
Vendor states this is fixed in 35b6fc51c666fc96355be5cd633ed0fe4ccf68b2 (fixed)
Vendor states this is fixed in 5724e82df4f9a4be62908362c97d522d25de75dd (fixed)
Vendor states this is fixed in 5c4a2ffcbd052c69bbf4680677d4c4eaa5a252d4 (fixed)
Vendor states this is fixed in 71ca60d2e631cf9c63bcbc7017961c61ff04e419 (fixed)
Vendor states this is fixed in cd4286123d6948ff638ea9cd5818ae4796d5d252 (fixed)
Vendor states this is fixed in d85fac8729c9acfd72368faff1d576ec585e5c8f (fixed)
Vendor states this is fixed in fe67122ba781df44a1a9716eb1dfd751321ab512 (fixed)
Vendor states this is fixed in 3.14 (unaffected)
Vendor states this is fixed in 5.10.241 (unaffected)
Vendor states this is fixed in 5.15.190 (unaffected)
Vendor states this is fixed in 5.4.297 (unaffected)
Vendor states this is fixed in 6.1.149 (unaffected)
Vendor states this is fixed in 6.12.43 (unaffected)
Vendor states this is fixed in 6.15.11 (unaffected)
Vendor states this is fixed in 6.16.2 (unaffected)
Vendor states this is fixed in 6.17 (unaffected)
Vendor states this is fixed in 6.6.103 (unaffected)
v < V5.0
Affected range stops below V5.0, so it looks safe — our inference, not a vendor statement

References (12)

Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/017198079551a2a5cf61eae966af3c4b145e1f3b
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/0f989f9d05492028afd2bded4b42023c57d8a76e
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/35b6fc51c666fc96355be5cd633ed0fe4ccf68b2
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/5724e82df4f9a4be62908362c97d522d25de75dd
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/5c4a2ffcbd052c69bbf4680677d4c4eaa5a252d4
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/71ca60d2e631cf9c63bcbc7017961c61ff04e419
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/cd4286123d6948ff638ea9cd5818ae4796d5d252
Patch
Source: 416baaa9-dc9f-4396-8d5f-8c081fb06d67
https://git.kernel.org/stable/c/d85fac8729c9acfd72368faff1d576ec585e5c8f

CVSS

Attack Vector
LOCAL
Complexity
HIGH
Privileges
LOW
User Interaction
NONE
Scope
UNCHANGED
Confidentiality
NONE
Integrity
NONE
Availability
HIGH
Vector?

Quick Info

StatusMODIFIED
CWE
CWE-362

Get alerted

Stop reading CVE feeds looking for your own stack

Track the products you run and VulnTracker tells you when a new CVE affects them — with what is known about fixing it, and nothing about the rest.

Free plan, no card