ZeroHour

CVE-2026-89764

niche

Use-After-Free Race in Linux Kernel Rust devres Revocation

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

A race condition exists in the Linux kernel's Rust devres (device-managed resource) abstraction: when the driver core's devres_release_all() revokes a Devres via its release callback while Devres::drop() revokes it concurrently on another CPU, the revoker that loses the is_available swap can return while drop_in_place() is still tearing down the inner data, producing a use-after-free on adjacent resources such as the sg_table and pages backing an SGTable. Because this is a local kernel memory-corruption flaw (CVSS 3.1: 7.8, AV:L/PR:L), a local attacker with limited privileges on an affected machine could potentially escalate privileges or crash the kernel, though triggering it requires winning the race during a concurrent device-resource teardown. Only kernels built with the experimental Rust support that includes the devres abstraction (and drivers actually using it) are affected — typical distribution kernels without CONFIG_RUST are not. There is no known public proof of concept, the issue is not in CISA's KEV catalog, and no exploitation in the wild has been reported. The fix adds a Completion so that Devres::drop() waits until the wrapped object is fully destroyed before returning.

What to do: Apply kernel updates from your distribution or vendor once a release containing this fix is available. Check whether your kernel is built with CONFIG_RUST and runs Rust-based drivers — systems without Rust kernel support are not exposed to this code path. Monitor vendor advisories for backports of the upstream rust: devres patch that adds the Completion synchronization.

Affected
Linux kernel (rust: devres abstraction)
Estimated exposure
nicheOn the order of thousands of systems or fewer — The vulnerable code requires the kernel's experimental Rust support (CONFIG_RUST), which is not enabled in mainstream distribution kernels, and only a small set of early Rust drivers use the Devres abstraction.

Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.

Description

In the Linux kernel, the following vulnerability has been resolved: rust: devres: fix race between concurrent revokers There is a potential race condition when two paths try to revoke a Devres concurrently. The driver core's devres_release_all() calls Revocable::revoke() via the release callback, while Devres::drop() calls revoke_nosync() on another CPU. The revoker that does not claim the is_available swap returns immediately, but the revoker that did may still be executing drop_in_place() on the inner data. This can cause a use-after-free when the other revoker's caller proceeds to drop adjacent resources that drop_in_place() still references (e.g., Devres racing with SGTable freeing the backing sg_table and pages). Fix this by adding a Completion. The release callback signals the Completion after revoke() finishes, and Devres::drop() waits for it when it loses the is_available swap. This ensures the wrapped object is fully torn down before Devres::drop() returns.

Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

In the news

No ingested article mentions this CVE yet.