Severity by source
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Local unprivileged access (AV:L/PR:L) under default paranoid=2; AC:H because success requires winning a narrow unlocked-refcount race window; full-triad C/I/A:H from kernel UAF enabling root.
Primary rating from Vendor (Linux).
CVSS VectorVendor: Linux
Lifecycle Timeline
5DescriptionCVE.org
In the Linux kernel, the following vulnerability has been resolved:
perf: Fix use-after-free when perf mmap() revival races with the last munmap()
perf_mmap_close() drops rb->mmap_count *without* holding event->mmap_mutex (the refcount_dec_and_test() right before the refcount_dec_and_mutex_lock() of event->mmap_count). A concurrent perf_mmap_rb() can slot its entire "revival" path into that window (perf_mmap holds event->mmap_mutex for its whole duration, including rb_alloc):
munmap side (perf_mmap_close) mmap side (perf_mmap_rb) ----------------------------------- -------------------------------- rb->mmap_count 1 -> 0 (no lock) (holds event->mmap_mutex) inc_not_zero(rb->mmap_count) fails ring_buffer_attach(event, NULL) rb_alloc() + attach new rb refcount_set(&event->mmap_count, 1) lock; event->mmap_count 1 -> 0 ring_buffer_attach(event, NULL) ring_buffer_put() -> frees the *new* rb
The revival's refcount_set(&event->mmap_count, 1) is an invisible 1 -> 1 write: the close frees the just-revived buffer although the other process still has it mapped -- a page-level use-after-free allowing local privilege escalation to root by any unprivileged user (default kernel.perf_event_paranoid=2).
Swap the order of the two counter updates: event->mmap_count is dropped first via refcount_dec_and_mutex_lock(), so its 1 -> 0 transition and the ring_buffer_attach() stay serialized with perf_mmap(). rb->mmap_count == 0 then implies every event using the buffer is detached already, so the result of the rb->mmap_count drop can gate the remaining teardown directly and detach_rest is no longer needed.
An earlier fix for this race from Kyle Zeng and David Lee takes event->mmap_mutex around both counter updates [0]; here the not-last close stays lockless.
AnalysisAI
A local privilege-escalation use-after-free exists in the Linux kernel perf subsystem: an unprivileged local user can win a tight race between perf_mmap_close() and a concurrent perf_mmap_rb() revival so that a freshly revived ring buffer is freed while another process still has it mapped, yielding page-level memory corruption and a path to root. The bug is reachable under the default kernel.perf_event_paranoid=2 setting (authenticated local account per the CVSS vector PR:L, no user interaction), so hardening the setting or restricting perf_event_open is the practical interim control. …
Unlock full vulnerability intelligence
- Risk assessment & exploitation conditions
- Attack chain visualization
- Remediation with exact patch versions
- Threat intelligence from 22 sources
- Personal watchlist & email alerts
Free forever · No credit card required
Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata
Vulnerability AssessmentAI
| Exploitation | Requires local access as an unprivileged user; no user interaction or elevated privileges are needed beyond a normal local account because the perf mmap/munmap path is reachable under the default kernel.perf_event_paranoid=2 setting. … Additional conditions and limiting factors are described in the full assessment. |
| Risk Assessment | This is a genuine local privilege-escalation vulnerability in the Linux kernel perf subsystem, and the CVSS 3.1 vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, 7.8) correctly captures a full-triad memory-corruption impact reachable by an unprivileged local user. … Full risk analysis with EPSS, KEV, and SSVC signal comparison available after sign-in. |
| Exploit Scenario | Full exploit scenario with step-by-step reproduction available after sign-in. |
| Remediation | Vendor-released patch: upgrade to Linux 6.18.52, 7.2.5, or 7.3-rc2 (or a later release on the corresponding stable tree), which include the counter-ordering fix; if cherry-picking, apply upstream commit 929cb3b9dc818dd9fa89d510d4ff2b255e42badd, 58a8108bc73de0740d5b88150465d6690ea5f85f, or 0c739f54f1c77f3a4643160cd2e031b6c2f2aab6 as appropriate for your branch, and see https://nvd.nist.gov/vuln/detail/CVE-2026-89791 and https://vuldb.com/vuln/405571 for tracking. … Detailed patch versions, workarounds, and compensating controls in full report. |
Recommended ActionAI
Within 24 hours, inventory all Linux hosts running affected kernels and prioritize patching to vendor-released versions 6.18.52, 7.2.5, or 7.3-rc2, starting with multi-tenant, shared-access, and internet-facing systems; where immediate patching is not possible, set kernel.perf_event_paranoid=3 or block perf_event_open via seccomp, AppArmor, or SELinux to remove the practical attack path. …
Sign in for detailed remediation steps and compensating controls.
Threat intelligence, references, and detailed analysis are available after sign-in.
Same technique Privilege Escalation
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-80312
GHSA-3xg9-4g5f-3mp3