ZeroHour

CVE-2026-89750

mass

Use-After-Free in Linux Kernel user_events Tracing via Fork Reference Leak

CVSS 3.1
7.8 high
EPSS
Published
()
Modified
AI analysis

The Linux kernel's user_events tracing subsystem contains a use-after-free caused by faulty reference handling during fork: dup_task_struct() copies the parent's user_event_mm pointer into the child without taking a reference, and if user_event_mm_alloc() fails inside user_event_mm_dup(), that stale pointer is left in place. When the child later exits, user_event_mm_remove() decrements a reference the child never owned, prematurely freeing the structure while the parent still holds a pointer to it — KASAN flags this as a slab-use-after-free write in current_user_event_mm reached via the user_events ioctl path. A local low-privileged attacker who can fork and invoke the user_events ioctl interface could turn this freed-then-reused kernel memory into memory corruption and potentially kernel-level code execution, with high confidentiality, integrity, and availability impact (CVSS 3.1: 7.8, local vector). Systems running kernels built with the user_events tracing code and exposed to untrusted local users are affected; the fix simply clears the copied pointer before any possible failure so a failed fork leaves the child with nothing to free. No public proof of concept is known and the CVE is not in CISA's KEV catalog, so exploitation status is none known.

What to do: Apply distribution kernel updates as soon as they backport the upstream fix (clearing the copied user_event_mm pointer in user_event_mm_dup before any possible failure), treating this as a local privilege-escalation risk. As an interim mitigation, restrict access to tracefs and the user_events_status/ioctl interface (limit tracing-group membership and mount permissions) and limit untrusted local shell and container access. Monitor kernel logs for KASAN slab-use-after-free reports referencing current_user_event_mm as an indicator of attempted triggering.

Affected
Linux kernel (tracing/user_events subsystem)Affected version range not enumerated in the provided data; applies to kernel builds that include the tracing/user_events fork-handling code prior to the fix th
Estimated exposure
massPotentially hundreds of millions of Linux systems run kernels with the user_events tracing code, though the practically exploitable subset (multi-user systems… — Extrapolated from Linux's deployment footprint (billions of devices, tens of millions of servers/desktops) and the tendency of major distributions to enable kernel tracing subsystems; the share where unprivileged users can actually access…

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: tracing/user_events: Clear copied tracing state before fork duplication dup_task_struct() copies user_event_mm from the parent into the child, without grabbing a reference to it. user_event_mm_dup() should replace it, but it leaves that copied pointer unmodified if user_event_mm_alloc() fails. When the child exits, user_event_mm_remove() decrements a reference the child never owned, which ultimately frees user_event_mm, while the parent still as a stale pointer to it. This creates a UAF, which KASAN reports as: BUG: KASAN: slab-use-after-free in current_user_event_mm+0x51/0x1d0 Write of size 4 at addr ffff888005010d30 by task init/44 Call Trace: kasan_report+0xce/0x100 kasan_check_range+0x10f/0x1e0 current_user_event_mm+0x51/0x1d0 user_events_ioctl+0x82e/0x15c0 __x64_sys_ioctl+0x139/0x1c0 do_syscall_64+0xce/0x450 entry_SYSCALL_64_after_hwframe+0x77/0x7f Allocated by task 44: __kasan_kmalloc+0x8f/0xa0 __kmalloc_cache_noprof+0x180/0x3a0 user_event_mm_alloc+0x3c/0x1f0 current_user_event_mm+0x88/0x1d0 Freed by task 42: __kasan_slab_free+0x43/0x70 kfree+0x13a/0x390 process_one_work+0x696/0xf90 worker_thread+0x420/0xba0 The fix simply clears the copied pointer before any possible failure. In case of failure, the child then has nothing to free.

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.