{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2026-89750", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2026-09-11T19:38:34.762Z", "datePublished": "2026-09-11T19:46:54.565Z", "dateUpdated": "2026-10-19T08:52:04.079Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-10-19T08:52:04.079Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ntracing/user_events: Clear copied tracing state before fork duplication\n\ndup_task_struct() copies user_event_mm from the parent into the child,\nwithout grabbing a reference to it. user_event_mm_dup() should\nreplace it, but it leaves that copied pointer unmodified if\nuser_event_mm_alloc() fails.\n\nWhen the child exits, user_event_mm_remove() decrements a reference\nthe child never owned, which ultimately frees user_event_mm, while\nthe parent still as a stale pointer to it. This creates a UAF, which\nKASAN reports as:\n\n BUG: KASAN: slab-use-after-free in\n current_user_event_mm+0x51/0x1d0 Write of size 4 at addr\n ffff888005010d30 by task init/44\n\n Call Trace:\n \n kasan_report+0xce/0x100\n kasan_check_range+0x10f/0x1e0\n current_user_event_mm+0x51/0x1d0\n user_events_ioctl+0x82e/0x15c0\n __x64_sys_ioctl+0x139/0x1c0\n do_syscall_64+0xce/0x450\n entry_SYSCALL_64_after_hwframe+0x77/0x7f\n\n Allocated by task 44:\n __kasan_kmalloc+0x8f/0xa0\n __kmalloc_cache_noprof+0x180/0x3a0\n user_event_mm_alloc+0x3c/0x1f0\n current_user_event_mm+0x88/0x1d0\n\n Freed by task 42:\n __kasan_slab_free+0x43/0x70\n kfree+0x13a/0x390\n process_one_work+0x696/0xf90\n worker_thread+0x420/0xba0\n\nThe fix simply clears the copied pointer before any possible failure.\nIn case of failure, the child then has nothing to free." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - Reached only via local syscalls: ioctl(DIAG_IOCSREG) on tracefs user_events_data to create a user_event_mm, then fork/clone without CLONE_VM so dup_task_struct copies the pointer and user_event_mm_dup fails to replace it. No network, adjacent-wireless, or physical path exists.\nAC:L - The attacker controls the full sequence (register an enabler, apply memory pressure, fork, exit the child). user_event_enabler_dup uses GFP_NOWAIT, which fails readily under attacker-generated pressure, and user_event_mm_alloc is GFP_KERNEL_ACCOUNT and can fail under memcg limits; no victim-side race is required.\nPR:L - Non-persist DIAG_IOCSREG has no CAP_SYS_ADMIN or perfmon check; only write access to tracefs user_events_data is required. Tracing deployments (Android/Perfetto, ChromeOS, tracefs gid mounts) grant that to unprivileged local users, matching the intended user_events ABI.\nUI:N - The attacker registers a user event, forks, and exits the child entirely within their own process; no victim action, extra mount, or cooperating user is required.\nS:U - The use-after-free is of a kernel-heap user_event_mm during local fork/exit handling and does not cross a VM, IOMMU, or sandbox boundary; impact is standard in-kernel memory corruption on the same host.\nC:H - Child exit frees the parent's user_event_mm while the parent retains a stale pointer; later ioctl paths (current_user_event_mm refcount_inc, enabler list walks, mm->mm dereference) read reclaimed slab contents, yielding an attacker-groomable kernel memory disclosure primitive.\nI:H - The dangling user_event_mm is written after kfree (refcount_inc, list updates, mmap locks on mm->mm), so slab reuse enables heap spray and arbitrary kernel writes or control-flow hijack, consistent with UAF scoring guidance.\nA:H - KASAN reports a slab-use-after-free write in current_user_event_mm after the child exits, and repeating fork-under-pressure plus parent ioctl or exit reliably oopses or panics the kernel even without a full exploit." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "kernel/trace/trace_events_user.c" ], "versions": [ { "version": "7235759084a4f8524a46bd2638885ff3b34ce279", "lessThan": "33ce55b368b64d65941867add00e7f288cbb8234", "status": "affected", "versionType": "git" }, { "version": "7235759084a4f8524a46bd2638885ff3b34ce279", "lessThan": "63b39e49a4c9d68e010e96b26fc7374f0864f2b1", "status": "affected", "versionType": "git" }, { "version": "7235759084a4f8524a46bd2638885ff3b34ce279", "lessThan": "25a0758cf6bdbfddac2be71124c9bd0692f4b0b1", "status": "affected", "versionType": "git" }, { "version": "7235759084a4f8524a46bd2638885ff3b34ce279", "lessThan": "b799f67119aff179719a0b1e12441ebbdaaf62f9", "status": "affected", "versionType": "git" }, { "version": "7235759084a4f8524a46bd2638885ff3b34ce279", "lessThan": "390f6bd8583d177029d9df4bea6667509e55a765", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "kernel/trace/trace_events_user.c" ], "versions": [ { "version": "6.4", "status": "affected" }, { "version": "0", "lessThan": "6.4", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.157", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.109", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.18.50", "lessThanOrEqual": "6.18.*", "status": "unaffected", "versionType": "semver" }, { "version": "7.2.4", "lessThanOrEqual": "7.2.*", "status": "unaffected", "versionType": "semver" }, { "version": "7.3", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.6.157" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.12.109" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "6.18.50" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "7.2.4" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "6.4", "versionEndExcluding": "7.3" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/33ce55b368b64d65941867add00e7f288cbb8234" }, { "url": "https://git.kernel.org/stable/c/63b39e49a4c9d68e010e96b26fc7374f0864f2b1" }, { "url": "https://git.kernel.org/stable/c/25a0758cf6bdbfddac2be71124c9bd0692f4b0b1" }, { "url": "https://git.kernel.org/stable/c/b799f67119aff179719a0b1e12441ebbdaaf62f9" }, { "url": "https://git.kernel.org/stable/c/390f6bd8583d177029d9df4bea6667509e55a765" } ], "title": "tracing/user_events: Clear copied tracing state before fork duplication", "x_generator": { "engine": "bippy-1.2.0" } } } }