Live › vulnerability › CVE-2026-99236
A malformed trailing logical operator in a perf tracepoint filter makes the kernel read memory before its buffer. An attacker who can set such a filter could read or corrupt adjacent kernel memory, which may lead to privilege escalation.
Summary written from the sources below. Check the originals before acting.
First seen by InfraStack 2026-11-02 16:24 UTC. All times on this page are UTC.
Systems running a Linux kernel with the tracing subsystem, where local users can call PERF_EVENT_IOC_SET_FILTER on a tracepoint counting event. Exposure depends on who can run perf on the host, so multi-user Linux servers and shared build hosts are the places to look. Hosts where only trusted administrators have perf access can deprioritise it.
No product ranges from the sources yet.
uname -r for the running kernel, then check your distribution's kernel changelog/advisory for commit 1fdc4164e488 or the title 'tracing: Reject incomplete event filter expressions'.cat /proc/sys/kernel/perf_event_paranoid (higher values restrict unprivileged perf).Each row is the first time that source carried this signal. The analyst’s rows are its own findings.
In the Linux kernel, the following vulnerability has been resolved:
tracing: Reject incomplete event filter expressions
A non-empty expression normally finishes in predicate_parse()'s inner loop, which resolves the pending logical operators before jumping to finalization. If the input ends after an operator, possibly followed by unary '!' tokens, the outer loop instead falls through with unresolved operator state.
For example, "common_pid == 1 || common_pid == 2 &&" leaves prog[0].target equal to -1. The second pass then reads prog[-1] before the forward-jump check can reject it. Depending on adjacent slab contents, it can also copy an out-of-bounds word into a branch target that passes the forward-only check. A self-targeted perf tracepoint counting event can reach this path through PERF_EVENT_IOC_SET_FILTER.
Reject the outer-loop fallthrough when a predicate has already been parsed. This ensures that non-empty expressions only reach finalization after the inner loop has resolved their operators. Keep the existing no-filter error for input that has no predicates. Add a regression test for trailing logical operators and unary negations.
This page as .md · .json · in your agent: get_signal("CVE-2026-99236")
NVD data is provided by NIST and is public domain. Posts quoted belong to their authors.