Skip to main content

Linux Kernel EUVDEUVD-2026-95533

| CVE-2026-98378 HIGH
2026-10-09 Linux GHSA-9m4g-3f3p-3783
7.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain local BPF privileges (CAP_BPF)
  2. Delivery
    Prime link while forcing anon_inode_getfile failure
  3. Exploit
    Read link iterator to take dangling reference
  4. Execution
    Trigger UAF write in bpf_link_put
  5. Impact
    Corrupt kernel slab for privilege escalation

Vulnerability Assessment

Exploitation Conditions

Requires local access with privileges to use the BPF subsystem (typically CAP_BPF or CAP_SYS_ADMIN): the attacker must create/prime a BPF link via bpf_link_prime() AND concurrently read a BPF link iterator (bpf_iter over links) so the iterator takes a reference to a link whose ID is still zero (unsettled). The trigger further depends on anon_inode_getfile() failing during link priming so the creator removes the ID and frees the still-private link, leaving the iterator's reference dangling for the next bpf_link_put(). Limiting factors: it is local-only (not remotely reachable), needs BPF privileges rather than an unprivileged user on default hardened configs, and depends on winning a narrow race window combined with the file-allocation failure path - all of which reduce real-world exploitability below the raw CVSS score.

Impact

This is a genuine but access-gated local privilege-escalation risk rather than a mass-exploitation emergency. The input CVSS vector (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, 7.8) correctly marks it local and privilege-requiring; a slab use-after-free write (KASAN reports 'Write of size 8' in bpf_link_put) in kernel memory is the classic primitive for local privilege escalation, which is why confidentiality, integrity and availability are all High. The real-world exploitation signals are modest and mutually consistent: EPSS is 0.16% (5th percentile) and there is no CISA KEV listing, so this is best classified as 'no public exploit identified at time of analysis' - none of the references (git.kernel.org commits, vuldb, NVD) is flagged as working exploit code. One point of tension to verify: the vuln.today decision label is 'this_week' and the CVSS marks AC:L, yet the description's mechanism is a race between bpf_link_prime() publishing an ID-zero link and anon_inode_getfile() failing - a narrow, timing- and failure-injection-dependent window that in practice raises attack complexity above a straightforward trigger. Net: prioritize patching within the normal fast-track cycle for multi-tenant, container, or untrusted-local-user hosts where BPF privileges are exposed, but this is not a remote or unauthenticated internet-facing threat.

Exploit ScenarioDerived

A local actor with BPF privileges (e.g. an attacker who has gained a foothold in a container or on a shared host with CAP_BPF/CAP_SYS_ADMIN) primes a BPF link and arranges for anon_inode_getfile() to fail so the creator frees the still-private link, while concurrently reading a BPF link iterator that has already taken a reference to that ID-zero link. The iterator's next bpf_link_put() then writes into freed slab memory, giving a use-after-free that can be shaped into kernel memory corruption and privilege escalation. No public exploit code is identified at time of analysis, and the attack depends on winning the race window plus forcing the file-allocation failure.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 24, 2026

A use-after-free in the Linux kernel BPF link iterator lets a local user who can already use the BPF subsystem (CAP_BPF or CAP_SYS_ADMIN) corrupt freed slab memory and potentially escalate privileges or crash the system. The flaw is a race: bpf_link_prime() inserts a link into link_idr before anon_inode_getfile() succeeds and before bpf_link_settle() publishes the link ID, and while bpf_link_by_id() rejects such ID-zero links as unsettled, the link iterator takes a reference to them anyway - if anon_inode_getfile() then fails, the creator frees the still-private link and the iterator is left holding a dangling reference that the next bpf_link_put() writes through. Exploitation is local-only and depends on winning a narrow race window combined with the file-allocation failure path, which is why the assessed severity uses AC:H rather than the raw 7.8; EPSS is 0.16% (5th percentile), there is no CISA KEV entry and no public exploit identified at time of analysis, and vendor patches are available for the affected stable branches.

RemediationAI

Update to a vendor-released kernel containing the fix: Linux 6.1.189, 6.6.158, 6.12.112, 6.18.55 or 7.2.9, or 7.3-rc5 on the mainline rc line; the individual stable commits (for example https://git.kernel.org/stable/c/87ce4b53b7436b50fc984f0a6afaf77f68ac5573 and the sibling reference links) can be backported to custom or long-term trees that do not track these branches. Because the bug is a lifetime race reachable only by principals allowed to create BPF links and read BPF link iterators, the practical exposure reduction on systems that cannot be patched immediately is to keep BPF out of unprivileged hands (kernel.unprivileged_bpf_disabled=2) and to restrict CAP_BPF/CAP_SYS_ADMIN to trusted workloads - noting this does not eliminate the flaw for privileged containers or services, which still satisfy the assessed PR:L prerequisite. Where BPF is not needed at all, disabling the BPF syscall for untrusted tenants removes the attack surface entirely at the cost of breaking tooling that depends on it (bpftrace, some observability agents, container runtimes using BPF-based networking/security). Apply the stable update as the complete fix; the change is confined to skipping unsettled ID-zero entries in bpf_link_get_curr_or_next(), so no ABI break is expected. Vendor and third-party advisory references: https://vuldb.com/vuln/415751 and https://nvd.nist.gov/vuln/detail/CVE-2026-98378.

Affected VersionsENISA

Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <87ce4b53b7436b50fc984f0a6afaf77f68ac5573
Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <798a61edbc436cacdb659927d067368eeb1e30e2
Linux patch: 6.1.189
Linux patch: 6.18.55
Linux patch: 7.3-rc5
Linux patch: 6.6.158
Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <68930f8d40ab4c10ca3b019f076136758fd100a8
Linux patch: 0
Linux patch: 7.2.9
Linux patch: 6.12.112
Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <6e271f093d15d323f42de26f66556af53fa8e19f
Linux 5.19
Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <c251ed48bd9063cf7de6049421e78b6de989060f
Linux 9f88361273082825d9f0d13a543d49f9fa0d44a8 <50e80e2bb5e2be8515205b9c496b9640ddefa434

Affected Packages

euvd linux no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The BPF link subsystem exposes links to userspace as file descriptors backed by an IDR (link_idr) keyed by a numeric link ID. The creation path is not atomic: bpf_link_prime() allocates the ID and inserts the link into link_idr first, anon_inode_getfile() then creates the backing file, and only bpf_link_settle() publishes the real ID into link->id, with ID zero marking an entry that is still in flight. bpf_link_by_id() was written with that convention and treats an ID-zero entry as unsettled and unusable, but the iterator path (bpf_link_get_curr_or_next() feeding bpf_link_seq_next() in kernel/bpf/link_iter.c) resolved entries and called bpf_link_inc() without the same ID-zero check. The bug therefore requires two concurrent actors: one thread priming and settling a link, another walking a BPF iterator over links; if anon_inode_getfile() fails in the priming thread, that thread removes the ID and frees its still-private link directly, while the iterator still holds an incremented reference. The resulting use-after-free is a slab-use-after-free write of size 8 reached from bpf_link_put() via bpf_link_seq_next(), bpf_seq_read(), vfs_read() and ksys_read(), as captured in the KASAN report. The fix makes bpf_link_get_curr_or_next() skip ID-zero entries exactly as bpf_link_by_id() does, so transient links are never handed out with a reference. The underlying weakness is a classic reference-counting/lifetime race (use-after-free) in kernel code that is only reachable by principals permitted to create BPF links and read BPF link iterators - no CWE identifier was supplied in the source data, so the classification is taken from the KASAN slab-use-after-free signature rather than an assigned CWE. The trigger requires BPF privileges, local access, and the failure path of an internal file allocation; the sources do not describe any additional way to reach the freed object.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (Linux) PRIMARY 7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI 7.0 HIGH

Local BPF-privileged actor (AV:L, PR:L); AC:H because the UAF depends on winning a race and on anon_inode_getfile() failing; kernel UAF yields full C/I/A impact.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
4.0 AV:L/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Oct 24, 2026 - 14:22 NVD
7.8 (HIGH)
Patch available
Oct 09, 2026 - 09:16 EUVD
CVE Published
Oct 09, 2026 - 07:34 cve.org
HIGH 7.8
CVE Published
Oct 09, 2026 - 07:34 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

bpf: Skip unsettled links in link iterator

bpf_link_prime() inserts a link into link_idr before anon_inode_getfile() succeeds and before bpf_link_settle() publishes the ID in link->id. bpf_link_by_id() treats such an ID-zero link as unsettled, but the link iterator takes a reference without this check.

If anon_inode_getfile() then fails, the creator removes the ID and frees its still-private link directly. The iterator is left with a dangling reference and its next bpf_link_put() accesses freed memory.

Treat ID-zero entries as transient in bpf_link_get_curr_or_next(), just as bpf_link_by_id() does.

BUG: KASAN: slab-use-after-free in bpf_link_put Write of size 8 by task exp/384 Call Trace: bpf_link_put kernel/bpf/syscall.c:3372 bpf_link_seq_next kernel/bpf/link_iter.c:33 bpf_seq_read kernel/bpf/bpf_iter.c:158 vfs_read fs/read_write.c:572 ksys_read fs/read_write.c:716 do_syscall_64 arch/x86/entry/syscall_64.c:84 entry_SYSCALL_64_after_hwframe arch/x86/entry/entry_64.S:121 Kernel panic - not syncing: KASAN: panic_on_warn set ...

Executive ViewAI

Why It Matters

A high-severity Linux kernel vulnerability (CVE-2026-98378) allows local attackers with BPF privileges to potentially escalate to root or crash systems, affecting any Linux environment where BPF is enabled and accessible to users. Leadership should prioritize patching because while exploitation requires specific conditions, a successful attack could lead to full system compromise and operational disruption.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Ubiquitous
Linux kernel, deployed across nearly all server, cloud and Android environments
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.2%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Defer
Exploitation· derived
None
System Exposure· derived
Small
Automatable· derived
No
Human Impact
High

Priority Score

39
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +39
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy