CVE-2026-80671
massMemory-safety flaws in Linux kernel perf tool when parsing untrusted perf.data
CVE-2026-80671 fixes several memory-safety and robustness bugs in the register_pid() function of the Linux kernel's 'perf sched' tool, which parses perf.data files. When perf sched processes an untrusted perf.data file, an integer overflow in (pid + 1) * sizeof(struct task_desc *) can wrap to a tiny allocation on 32-bit systems and cause out-of-bounds writes, and an unchecked strcpy() can overflow a fixed 20-byte comm buffer with an attacker-controlled string; allocation failures also trigger a BUG_ON crash and pointer/state corruption. An attacker who induces a user (or automated tooling) to analyze a crafted perf.data file gains a crash of the perf process, and the heap overflow could potentially lead to code execution in that process's context. Anyone running the perf tool's sched subcommand on perf.data files from untrusted sources is affected; the attack vector is local (AV:L), so remote-only hosts that never process foreign perf.data are not practically exposed. No public proof-of-concept, KEV listing, or known exploitation exists, and EPSS puts 30-day exploitation probability at only about 0.2%.
What to do: Update the perf tool (via your distribution's linux-tools/kernel-tools or equivalent package) to a build containing the upstream register_pid() fix, since fixes are delivered through kernel tooling updates rather than a runtime component. As an interim mitigation, avoid running 'perf sched' or other perf parsing on perf.data files received from untrusted sources, and treat 32-bit perf builds with heightened caution. Check whether your monitoring or profiling pipelines automatically ingest third-party perf.data files.
| Linux kernel (perf userspace tool) perf tool, 'perf sched' command (register_pid()) | — |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
In the Linux kernel, the following vulnerability has been resolved: perf sched: Fix register_pid() overflow, strcpy, and BUG_ON register_pid() has several issues when processing untrusted perf.data: 1. Integer overflow: (pid + 1) * sizeof(struct task_desc *) can wrap to a small value on 32-bit systems when pid is large (e.g. 0x40000000), causing realloc to return a tiny buffer followed by out-of-bounds writes in the initialization loop. 2. Heap buffer overflow: strcpy(task->comm, comm) copies the untrusted comm string into a fixed 20-byte COMM_LEN buffer with no length check. 3. BUG_ON on allocation failure: perf.data is untrusted input, so allocation failures should be handled gracefully rather than killing the process. 4. Realloc of sched->tasks assigned directly back, leaking the old pointer on failure; nr_tasks incremented before the realloc, leaving corrupted state on failure. Cap pid at PID_MAX_LIMIT (4194304, matching the kernel's maximum on 64-bit), replace strcpy with strlcpy, guard against NULL comm, replace BUG_ON with NULL returns using safe realloc patterns, and add NULL checks in callers that dereference the result.
- Vector
- CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
In the news0 stories
No ingested article mentions this CVE yet.