Skip to main content

Linux Kernel EUVDEUVD-2026-80609

| CVE-2026-90001 HIGH
2026-09-16 Linux GHSA-7wpm-8hvh-3rp4
7.8
CVSS 3.1 · Vendor: Linux
View

Attack ChainAIDerived

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

  1. Access
    Gain local CAP_BPF/root access
  2. Delivery
    Attach HID-BPF struct_ops program to device
  3. Exploit
    Delete BPF map while device is destroyed
  4. Execution
    Race double-puts hid_device reference
  5. Persist
    Use-after-free frees live device
  6. Impact
    Kernel panic (DoS)

Vulnerability Assessment

Exploitation Conditions

Requires local access with the privilege to attach a HID-BPF struct_ops program (CAP_BPF/CAP_SYS_ADMIN, effectively root) to a HID device on a kernel built with HID-BPF support (CONFIG_HID_BPF), version 6.11 through the pre-patch stable releases. The attacker must then win a race between two teardown paths - a BPF map delete (without BPF_F_LINK) invoking hid_bpf_unreg() and simultaneous device destruction via hid_destroy_device() - so both drop the same registration reference. Limiting factors: root-equivalent privilege is already needed, the timing window is narrow (AC:H), and the outcome is a crash rather than code execution or data disclosure. Not exploitable remotely and not against a default configuration without HID-BPF programs in use.

Impact

The vendor CVSS of 7.8 (AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) materially overstates real-world risk. This is a TOCTOU race/double-free (CWE-416/362): the device-destroy path (__hid_bpf_ops_destroy_device, walking hdev->bpf.prog_list under rcu_read_lock) and the BPF-link-release path (hid_bpf_unreg via st_ops->unreg) can each drop the SAME single hid_get_device() registration reference under different lock domains, freeing struct hid_device while hid_destroy_device() still uses it. Two CVSS metrics are inflated: (1) AC:L is wrong - exploitation requires winning a tight timing window between concurrent HID-BPF struct_ops teardown and device destruction, which is AC:H; (2) PR:L understates the barrier - attaching a HID-BPF struct_ops program requires CAP_BPF/CAP_SYS_ADMIN, i.e. effectively root (PR:H). The impact is also mis-set: the refcount legitimately reaches zero (each decrement is individually valid, no refcount_t saturation fires), producing a use-after-free that manifests as memory corruption and crash - a denial-of-service, not the confidentiality/integrity loss implied by C:H/I:H. No EPSS, no KEV, and no public POC accompany this record. Net: a genuine but low-priority local root DoS, not the high-severity issue the raw score suggests.

Exploit ScenarioDerived

A local attacker who already holds CAP_BPF/CAP_SYS_ADMIN attaches a HID-BPF struct_ops program to a HID device, then triggers a BPF map delete (without BPF_F_LINK) to invoke hid_bpf_unreg() at the exact moment the device is being destroyed (e.g. by unplugging or unbinding). If the race is won, both paths put_device() the same registration reference, freeing the hid_device mid-teardown and causing a use-after-free that panics the kernel. No public exploit code is identified at time of analysis, and success depends on hitting a narrow timing window.

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 – Sep 16, 2026

Linux kernel builds with HID-BPF support (CONFIG_HID_BPF) can be crashed by a race that double-releases a HID device reference: a BPF map delete invoking hid_bpf_unreg() (no BPF_F_LINK) can run concurrently with device destruction via hid_destroy_device(), so both paths call hid_put_device() on the same registration reference and the struct hid_device is freed while teardown is still executing inside hid_destroy_device(). The attacker must already hold the local privileges required to attach a HID-BPF struct_ops program (CAP_BPF/CAP_SYS_ADMIN, effectively root) and win a narrow timing window, so the independent assessment is materially lower than the vendor's 7.8 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) and rates it as a crash-class fault (A:H, I:L, C:N) rather than code execution or data disclosure. No public exploit code was identified at time of analysis and the flaw is not in CISA KEV; patched stable releases (6.12.110, 6.18.51, 7.2.5, with a 7.3-rc2 fix) are available from the vendor.

RemediationAI

Vendor-released patch: upgrade to Linux 6.12.110, 6.18.51 or 7.2.5 (mainline development fix shipped in 7.3-rc2), applying the relevant stable commit from the references (c7f927aa8b55008ed5ea0814313d5dad771dcf3c, 401359684620145be710de97b87e1a47abfe1459, bfb7939788f3c8dd080a4dd81e38d625b35d194e or 9cdc7e6dc7a99ad7311ad5e7c145f2b9ce4e24b0) or the equivalent backport. If upgrading immediately is not possible, the most effective compensating control is to remove exposure entirely by not loading HID-BPF struct_ops programs: unload/blacklist any tooling that attaches HID-BPF programs and avoid deleting their BPF maps while devices are being torn down or hot-unplugged, accepting the trade-off that legitimate HID remapping, filtering and tracing functionality stops working. Where HID-BPF is not operationally required, build or boot kernels without CONFIG_HID_BPF (or disable the HID-BPF hook via the kernel configuration) so the vulnerable path cannot be reached, at the cost of losing all HID-BPF features on that host; adding hid.hid_bpf=off style module parameters where the vendor provides them is a weaker variant of the same control and should be verified against the running kernel's documentation. Because the bug needs CAP_BPF/CAP_SYS_ADMIN (effectively root) to attach the program and trigger the map delete, restricting BPF privileges to genuinely trusted administrators and keeping unprivileged BPF disabled reduces attack surface but does not eliminate the race for a privileged operator, and pinning HID-BPF links with BPF_F_LINK changes which release path is taken rather than fixing the double-put, so it is not a substitute for the patch.

Affected VersionsENISA

Linux ebc0d8093e8c97de459615438edefad1a4ac352c <c7f927aa8b55008ed5ea0814313d5dad771dcf3c
Linux ebc0d8093e8c97de459615438edefad1a4ac352c <401359684620145be710de97b87e1a47abfe1459
Linux ebc0d8093e8c97de459615438edefad1a4ac352c <bfb7939788f3c8dd080a4dd81e38d625b35d194e
Linux patch: 6.12.110
Linux patch: 6.18.51
Linux 6.11
Linux ebc0d8093e8c97de459615438edefad1a4ac352c <9cdc7e6dc7a99ad7311ad5e7c145f2b9ce4e24b0
Linux patch: 0
Linux patch: 7.2.5
Linux patch: 7.3-rc2

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 affected subsystem is HID-BPF, which lets BPF programs attach to HID devices through a struct_ops registration; support only exists in kernel 6.11 and later and only when the kernel is built with CONFIG_HID_BPF. Each successful attach via hid_bpf_ops_reg() takes a device reference with hid_get_device(), giving exactly one reference per registration that must be released exactly once. Two independent release paths exist: the destroy path hid_destroy_device() -> hid_bpf_destroy_device() -> __hid_bpf_ops_destroy_device(), which walks hdev->bpf.prog_list under rcu_read_lock() and drops one reference per attached program, and the unregister path reachable from a BPF map delete without BPF_F_LINK, which synchronously calls st_ops->unreg() -> hid_bpf_unreg() and drops the reference for its own registration. The original coordination handshake (destroy side setting e->hdev = NULL versus the "if (!hdev) return" check in unreg) is a classic TOCTOU because the two paths operate under different lock domains, rcu_read_lock versus hdev->bpf.prog_list_lock, letting a concurrent unreg read ops->hdev as non-NULL, block on prog_list_lock, and then proceed after the destroy traversal has already run. Both decrements are individually valid, so refcount_t never saturates or warns and the object is simply freed underneath the ongoing teardown, producing a use-after-free/teardown-on-freed-memory condition. The fix puts the remove-or-NULL decision under prog_list_lock on both sides, re-checks ops->hdev inside the lock on the unreg path, and moves all put_device() calls outside the lock; plain reads and writes of ops->hdev suffice under the lock, so no READ_ONCE/WRITE_ONCE were added, and the unlocked read at the top of hid_bpf_unreg() remains safe because the unreg path still holds its own reference until after the lock is dropped. The root-cause class is a concurrency double-put leading to use-after-free (CWE-362/CWE-416-style), although no CWE identifier was assigned in the source data; the feed tag "Information Disclosure" is not supported by the assessed impact, which is availability-centric.

Know when Ebpf gets its next vulnerability

  • 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 4.7 MEDIUM

Local root-equivalent BPF attach gives PR:H; winning a teardown race is AC:H; UAF corrupts kernel memory then crashes, so A:H with minor I:L and no confidentiality impact.

3.1 AV:L/AC:H/PR:H/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:N/PR:H/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE 7.0 HIGH
AV:L/AC:H/PR:L/UI:N/S:U/C:H/I:H/A:H
Red Hat 7.0 MEDIUM

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
Sep 16, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Sep 16, 2026 - 11:03 EUVD
CVE Published
Sep 16, 2026 - 10:33 cve.org
UNKNOWN (no severity yet)
CVE Published
Sep 16, 2026 - 10:33 cve.org
HIGH 7.8

DescriptionCVE.org

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

HID: bpf: serialize device reference release in struct_ops destroy path

__hid_bpf_ops_destroy_device() and hid_bpf_unreg() can race on the same registration reference, double-putting struct hid_device and freeing it while hid_destroy_device() still uses it. Serialize the remove/NULL decision under hdev->bpf.prog_list_lock so exactly one path releases each registration reference: unreg re-checks ops->hdev under the lock and returns without putting when the destroy path already cleared it; all put_device() calls happen after the lock is dropped, which is safe because a concurrent unreg then observes ops->hdev == NULL under the lock.

Background: each successful attach (hid_bpf_ops_reg) acquires one device reference (hid_get_device()). Two paths can release it:

  • device destruction: hid_destroy_device() -> hid_bpf_destroy_device()

-> __hid_bpf_ops_destroy_device(), which walks hdev->bpf.prog_list under rcu_read_lock() and drops one reference per attached program;

  • BPF link release: bpf map delete (no BPF_F_LINK) synchronously calls

st_ops->unreg() -> hid_bpf_unreg(), which drops the reference for its own registration.

The coordination handshake (e->hdev = NULL on the destroy side vs "if (!hdev) return" on the unreg side) is a TOCTOU check: the two paths run under different lock domains (rcu_read_lock vs prog_list_lock), so a concurrent unreg can read ops->hdev as non-NULL, block on prog_list_lock, and then proceed while the destroy traversal executes - both paths then drop the same reference. The refcount reaches zero legitimately (each decrement is individually valid), so no refcount_t saturation fires: the device is simply freed while the transport is still inside hid_destroy_device(), and subsequent teardown touches freed memory.

The fix serializes the remove/NULL decision under prog_list_lock on both sides and moves the destroy-side puts outside the lock. With the lock held, plain reads/writes of ops->hdev are sufficient; no READ_ONCE/WRITE_ONCE are added, keeping the patch minimal.

Unlocked-read safety: the unlocked read of ops->hdev at the top of hid_bpf_unreg() cannot touch a freed device, because the unreg path itself still holds this registration's reference (released only by its own hid_put_device() after the lock is dropped), and a destroy traversal that already cleared ops->hdev makes the lock-internal re-check return early without any put. At most one of the two paths releases each registration reference.

Executive ViewAI

Why It Matters

A memory-handling race in the Linux kernel's HID-BPF subsystem (CVE-2026-90001) can crash affected systems, causing an unplanned outage or reboot on any host built with the CONFIG_HID_BPF option enabled. Exploitation requires an attacker to already hold root-equivalent privileges (CAP_BPF/CAP_SYS_ADMIN) and to win a narrow timing window, so the practical risk is a local denial-of-service by an already-trusted insider or a post-compromise attacker rather than a path to data theft or remote intrusion. Leadership should treat this as an availability and patch-hygiene issue concentrated in Linux server, virtualisation, and embedded estates that ship HID-BPF-enabled kernels, and should prioritise the vendor-patched stable releases already available; independent analysis rates the real-world severity materially below the vendor's 7.8 score.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 94% exploitable
Prevalence
Low
HID subsystem ubiquitous but HID-BPF struct_ops path is new (6.11+) and root-gated
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
Medium

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

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

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