CVE-2026-31667: Input: uinput - fix circular locking dependency with ff-core
In the Linux kernel, the following vulnerability has been resolved:
Input: uinput - fix circular locking dependency with ff-core
A lockdep circular locking dependency warning can be triggered
reproducibly when using a force-feedback gamepad with uinput (for
example, playing ELDEN RING under Wine with a Flydigi Vader 5
controller):
ff->mutex -> udev->mutex -> input_mutex -> dev->mutex -> ff->mutex
The cycle is caused by four lock acquisition paths:
1. ff upload: input_ff_upload() holds ff->mutex and calls
uinput_dev_upload_effect() -> uinput_request_submit() ->
uinput_request_send(), which acquires udev->mutex.
2. device create: uinput_ioctl_handler() holds udev->mutex and calls
uinput_create_device() -> input_register_device(), which acquires
input_mutex.
3. device register: input_register_device() holds input_mutex and
calls kbd_connect() -> input_register_handle(), which acquires
dev->mutex.
4. evdev release: evdev_release() calls input_flush_device() under
dev->mutex, which calls input_ff_flush() acquiring ff->mutex.
Fix this by introducing a new state_lock spinlock to protect
udev->state and udev->dev access in uinput_request_send() instead of
acquiring udev->mutex. The function only needs to atomically check
device state and queue an input event into the ring buffer via
uinput_dev_event() -- both operations are safe under a spinlock
(ktime_get_ts64() and wake_up_interruptible() do not sleep). This
breaks the ff->mutex -> udev->mutex link since a spinlock is a leaf in
the lock ordering and cannot form cycles with mutexes.
To keep state transitions visible to uinput_request_send(), protect
writes to udev->state in uinput_create_device() and
uinput_destroy_device() with the same state_lock spinlock.
Additionally, move init_completion(&request->done) from
uinput_request_send() to uinput_request_submit() before
uinput_request_reserve_slot(). Once the slot is allocated,
uinput_flush_requests() may call complete() on it at any time from
the destroy path, so the completion must be initialised before the
request becomes visible.
Lock ordering after the fix:
ff->mutex -> state_lock (spinlock, leaf)
udev->mutex -> state_lock (spinlock, leaf)
udev->mutex -> input_mutex -> dev->mutex -> ff->mutex (no back-edge)
Security readout for executives and security teams
Plain-English summary
A Linux uinput force-feedback locking flaw can create a circular dependency, potentially causing deadlock or kernel instability. Triggering requires local, low-privileged access rather than network access. The supplied CVSS rates it 7.8 high, although the description demonstrates a reproducible lock warning rather than confirmed compromise.
Executive priority
Treat as high priority for shared Linux endpoints, gaming or Wine systems, and environments exposing virtual-input devices to untrusted local users. Schedule normal urgent kernel patching after compatibility testing. Internet-facing systems without relevant local access have lower immediate exposure.
Technical view
Force-feedback upload could acquire ff->mutex before udev->mutex, creating a cycle through input_mutex, dev->mutex, and back to ff->mutex. Stable fixes introduce a leaf state_lock for uinput state and device access, breaking the cycle. They also initialize request completion before slot publication to prevent the destroy path from completing an uninitialized request.
Likely exposure
Exposure is most likely on affected Linux systems where local users or applications can access uinput force-feedback functionality, including virtual-input and gaming configurations. The flattened affected-version data is ambiguous, so exact kernel and distribution package status requires vendor or commit-level verification.
Exploitation context
The CVSS vector indicates local access, low privileges, low complexity, and no user interaction. The bundle marks KEV false, and no cited source reports active exploitation or a public weaponized exploit. The demonstrated condition is a reproducible lockdep warning.
Researcher notes
The disclosed fix removes the ff->mutex-to-udev->mutex edge and closes a request-completion initialization race. No CWE is supplied. The stated confidentiality and integrity impacts are not explained by the technical description, which primarily establishes a locking cycle and possible instability. Exact affected boundaries need branch-specific verification.
Mitigation direction
Apply a vendor kernel update containing the appropriate stable fix for your maintained kernel branch.
If no package is available, monitor Linux and distribution guidance; do not assume an unlisted workaround is effective.
Prioritize systems where low-privileged users can access uinput and force-feedback device paths.
Validation and detection
Record the running kernel and distribution package version on systems using uinput or virtual input devices.
Map that build to the applicable stable commit or distribution backport; the supplied version list is ambiguous.
After updating, confirm the vendor package includes the state_lock and completion-initialization changes.
Use authorized regression testing to confirm force-feedback operation no longer produces the documented lockdep cycle.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2026-31667 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
1CVSS vectors
3Timeline events
0ADP providers
9Source links
CVSS vector scores
1 official score
We collect every scored CVSS vector available in the official CNA and ADP containers. When more than one version is present, the table keeps the source vectors side by side instead of collapsing them into the highest score.