CVE Catalog

CVE-2026-89764

HighCVSS 7.8
Published: Updated: Translated: NVD NIST

Exploitation Probability (EPSS)

Low risk
0.14%

4th percentile - higher than 4% of all known CVEs

Summary

In the Linux kernel's Rust devres layer, a race condition occurs when two paths concurrently revoke a Devres. 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 other may still be executing drop_in_place() on the inner data, causing a use-after-free. The fix adds a Completion that Devres::drop() waits on when it loses the is_available swap.

Risk Assessment

A use-after-free in the kernel can lead to memory corruption, system crash (panic), or potential privilege escalation. The risk affects systems using Rust devres drivers, e.g., Devres<DmaMappedSgt>.

Recommendation

Update the Linux kernel to a version containing the fix. Until then, avoid configurations where Rust devres drivers are heavily used concurrently.

Other vulnerabilities in Linux kernel

See all
Original NVD description (English source)

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<DmaMappedSgt> 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.

Vulnerability data from NVD (NIST) · CISA KEV · EPSS