CVE-2026-64258: fuse-uring: remove request-less entries from ent_w_req_queue to fix NULL deref
In the Linux kernel, the following vulnerability has been resolved:
fuse-uring: remove request-less entries from entwreqqueue to fix NULL deref
If a copy into the userspace ring buffer fails, a request will be terminated and fuseuringreqend() will set ent->fusereq to NULL but it will leave the entry on entwreqqueue in FRRSFUSEREQ state. This can lead to a NULL deref if the request expiration logic scans entwreqqueue in the window before the entry is moved off it.
Fix this by taking the entry off entwreqqueue and changing its state from FRRSFUSEREQ to FRRSINVALID before terminating the request.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Update fuse-uring expiration/termination logic so the request entry is removed from ent_w_req_queue (or its state is changed) before terminating the request, preventing NULL dereference during scans of ent_w_req_queue.
Linux kernel fuse-uring ent_w_req_queue entry state (FRRS_FUSE_REQ -> FRRS_INVALID) = from FRRS_FUSE_REQ to FRRS_INVALID before terminating the request - Operational
After applying the code change, ensure any in-flight fuse-uring requests have their ent->fuse_req pointer cleared via fuse_uring_req_end() to avoid dangling pointers.
Event History
Frequently Asked Questions
What conditions are required to trigger the crash?
An attacker or local user must be able to cause a copy into the userspace FUSE ring buffer to fail. The request expiration logic must then scan the affected queue during the interval after the request has been terminated but before its entry is removed.
What is the practical impact?
The race can cause a NULL pointer dereference in the Linux kernel, resulting in a denial of service. The supplied CVSS vector indicates local access, low attack complexity, low privileges, no user interaction, and high availability impact.
How does the fix prevent the issue?
The fix removes the entry from ent_w_req_queue and changes its state from FRRS_FUSE_REQ to FRRS_INVALID before terminating the request. This prevents expiration processing from encountering an entry whose fuse_req pointer has already been cleared.