CVE-2026-72071

Source
https://cve.org/CVERecord?id=CVE-2026-72071
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72071.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-72071
Downstream
Published
2026-08-15T05:52:23.215Z
Modified
2026-08-18T03:56:37.005942705Z
Severity
  • 7.8 (High) CVSS_V3 - CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H CVSS Calculator
Summary
tracing/user_events: Fix use-after-free in user_event_mm_dup()
Details

In the Linux kernel, the following vulnerability has been resolved:

tracing/userevents: Fix use-after-free in usereventmmdup()

usereventmmdup() walks the parent mm's enabler list locklessly under rcureadlock() during fork() (from copyprocess()); it does not take event_mutex:

rcu_read_lock();
list_for_each_entry_rcu(enabler, &old_mm->enablers, mm_enablers_link)
    enabler->event = user_event_get(orig->event);

usereventenablerdestroy() removes an enabler from that list with listdelrcu() and then, without waiting for a grace period, drops the enabler's userevent reference with usereventput() and frees the enabler with kfree(). A reader that loaded the enabler before the listdelrcu() can still be walking it, which leads to two use-after-frees:

  • kfree(enabler) frees the enabler while that reader dereferences enabler->event.

  • usereventput() may drop the last reference to the userevent, which is then freed (via delayeddestroyuserevent() on a work queue), while the same reader does usereventget(orig->event) on it.

Both are reachable by an unprivileged task that can open usereventsdata: one multithreaded process that registers an enabler and then concurrently unregisters it and calls fork() triggers the race. KASAN reports a slab-use-after-free in usereventmmdup() during clone(), with a "refcountt: addition on 0" warning when the user_event is freed.

The enabler use-after-free was found first; the user_event one was reported by XIAO WU, and the earlier enabler-only fix did not address it.

Defer both the usereventput() and the kfree(enabler) to a work item queued with queuercuwork(), so they run only after an RCU grace period, once all readers walking the enabler list have finished. The put must run in process context because usereventput() takes eventmutex on the last reference, so a work queue is used rather than callrcu(). The now-unlocked put lets the locked argument of usereventenabler_destroy() be removed; all callers are updated.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/72xxx/CVE-2026-72071.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
7235759084a4f8524a46bd2638885ff3b34ce279
Fixed
25acb6711da6fa0382744fa92bd6d42a22c1ae68
Fixed
95400e7039cdfeb0b53652d521d766f1698cae95
Fixed
b33ac2d39953efb12f598c0dae242c5f644ea669
Fixed
05b24f68f78ff3a1ef7f015f7327b35886b741f6
Fixed
50fd6dd755c6e48a38af2fa4621167eea56829c2

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72071.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.4.0
Fixed
6.6.148
Type
ECOSYSTEM
Events
Introduced
6.7.0
Fixed
6.12.97
Type
ECOSYSTEM
Events
Introduced
6.13.0
Fixed
6.18.40
Type
ECOSYSTEM
Events
Introduced
6.19.0
Fixed
7.1.5

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-72071.json"