Skip to main content

Linux Kernel CVE-2026-89960

| EUVDEUVD-2026-80560 HIGH
2026-09-16 Linux GHSA-gfv9-x355-hv69
8.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 host privilege for vfio-ap mdev config
  2. Delivery
    Bind second mdev to already-owned KVM (set_kvm returns -EPERM)
  3. Exploit
    Stale pqap_hook left on kvm->arch.crypto
  4. Execution
    Free the failing matrix_mdev
  5. Persist
    Guest executes PQAP instruction
  6. Impact
    Dereference freed pointer, host kernel UAF/crash

Vulnerability Assessment

Exploitation Conditions

Requires an s390/IBM Z host running KVM with vfio-ap AP crypto passthrough enabled, and local privileged access to create and attach vfio-ap mediated devices to a KVM guest (device-node/config control). The specific trigger is attaching a second matrix_mdev to a KVM instance that already owns a conflicting mdev, causing vfio_ap_mdev_set_kvm() to return -EPERM and leave a stale pqap_hook pointer; the use-after-free only materializes if that matrix_mdev is subsequently freed and the guest then executes a PQAP instruction. Limiting factors: not remotely reachable (AV:L), needs host-side privilege to configure mdevs, applies only to the niche s390 vfio-ap path, and depends on error-path plus free-then-execute sequencing rather than a single deterministic step.

Impact

This is a CWE-416 use-after-free in the s390 vfio-ap (AP crypto passthrough) driver, disclosed by the Linux kernel team with a patch already available. The vendor CVSS of 8.8 (AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H) materially over-states real-world risk. The exploitation surface is not remote and not trivially reachable: an actor must have host-side privilege to create/configure a vfio-ap mediated device and attach it to a KVM instance, and the flawed error path only triggers when a SECOND mdev is bound to a KVM that already owns one. The actual harmful outcome is a stale pqap_hook pointer that, only if the failing matrix_mdev is later freed, is dereferenced when the guest executes a PQAP instruction - a use-after-free whose dominant impact is a host kernel crash (DoS), not the C:H/I:H confidentiality/integrity loss the vendor vector claims. There is no EPSS score, no CISA KEV listing, and no public POC in the provided data, so exploitation is theoretical. AC:L is questionable: reaching the free-then-deref window is a sequencing/timing-dependent condition, better modeled as AC:H. Net: a legitimately fixed hardening bug, but a low operational priority given the niche platform, the required local privilege, and the DoS-dominant impact. NOTE: the input Tag 'Information Disclosure' conflicts with the description, which is a use-after-free/DoS with no data-leak primitive described - treat the tag as mislabeled.

Exploit ScenarioDerived

On an IBM Z host running KVM with AP crypto passthrough, a local privileged user configures a vfio-ap mediated device and attaches it to a KVM instance that already has a conflicting mdev, causing vfio_ap_mdev_set_kvm() to return -EPERM while leaving kvm->arch.crypto.pqap_hook pointing at the failing matrix_mdev. After that matrix_mdev is freed, a guest executing any PQAP instruction dereferences the stale hook pointer, producing a use-after-free and likely a host kernel panic. No public exploit code is identified at time of analysis, and successful triggering depends on the free-then-execute sequencing.

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

A use-after-free (CWE-416) in the Linux kernel's s390/vfio-ap AP crypto passthrough driver allows a local attacker with host-side privilege to corrupt kernel state by attaching a second vfio-ap mediated device to a KVM instance that already owns one. On the resulting -EPERM error path, vfio_ap_mdev_set_kvm() fails to restore kvm->arch.crypto.pqap_hook, leaving it pointing at an mdev that is never tracked by matrix_mdev->kvm; when that mdev is later freed, a guest-executed PQAP instruction dereferences the stale hook through pqap_hook_rwsem and triggers the use-after-free. Exploitation requires an IBM Z/s390 host running KVM with vfio-ap enabled but is not remotely reachable, needs authenticated local privilege to configure mediated devices, and depends on error-path plus free-then-execute sequencing; no public exploit code or confirmed active exploitation was identified at time of analysis, and vendor patches are available in the stable trees.

RemediationAI

Apply the vendor-released patches, which are available in the stable trees as Linux 6.6.157, Linux 6.12.110, Linux 6.18.51, 7.2.5 and 7.3-rc1 (or cherry-pick the upstream commits fc069d00a0dbef40042fd681554d48dcd5a1d524, 6a180adafc2a8a5fbe815985c71b2201e93ab5e1, eb6cc898501a004c0fa8aab951351d9c959b91cc, 13bfc94eef389bd664ffc67b00184919902c938a or 4400270ec0348d05dc0439d8f0130853ce7f9e20 from git.kernel.org); the fix is a correct-error-path plus lock-ordering rework rather than a runtime toggle, so no config option can fully substitute for it. Where immediate upgrading of an s390/KVM host is not possible, the practical compensating controls are to avoid ever attaching more than one vfio-ap matrix_mdev to the same KVM instance (this removes the -EPERM conflict trigger that creates the stale hook), and to never unbind, close or remove a vfio-ap mediated device while a guest is bound to or executing PQAP instructions, since the use-after-free only materializes after the stale matrix_mdev is freed and the guest then issues PQAP. Restricting host-side access to the vfio-ap mdev configuration interfaces (device nodes and sysfs/virsh mdev management) to trusted administrators removes the required local privilege and is worth doing regardless, though it is a boundary control rather than a fix and will not help on hosts where such access is legitimately required. Disabling vfio-ap passthrough entirely is the safest temporary workaround on non-critical hosts, with the trade-off that guests lose hardware-backed AP crypto acceleration.

Affected VersionsENISA

Linux patch: 6.18.51
Linux 5.15
Linux 86956e70761b3292156d668e87126844334dd71b <fc069d00a0dbef40042fd681554d48dcd5a1d524
Linux patch: 6.12.110
Linux patch: 7.2.5
Linux 86956e70761b3292156d668e87126844334dd71b <4400270ec0348d05dc0439d8f0130853ce7f9e20
Linux patch: 7.3-rc1
Linux 86956e70761b3292156d668e87126844334dd71b <13bfc94eef389bd664ffc67b00184919902c938a
Linux 86956e70761b3292156d668e87126844334dd71b <6a180adafc2a8a5fbe815985c71b2201e93ab5e1
Linux 86956e70761b3292156d668e87126844334dd71b <eb6cc898501a004c0fa8aab951351d9c959b91cc
Linux patch: 6.6.157
Linux patch: 0

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 vfio-ap driver is the s390/IBM Z implementation of VFIO-mediated device passthrough for Adjunct Processor (AP) crypto hardware, allowing a KVM guest to issue AP instructions against host crypto queues assigned through a matrix_mdev object. PQAP (Process Adjunct Processor Queue) interception relies on a per-KVM function pointer, kvm->arch.crypto.pqap_hook, which is installed in vfio_ap_mdev_set_kvm() and torn down in vfio_ap_mdev_unset_kvm(), with access serialized by pqap_hook_rwsem. The defect is an error-path state management flaw in vfio_ap_mdev_set_kvm(): the hook pointer is assigned before the matrix_dev->mdev_list conflict check, so when another mdev is already bound to the same KVM the function returns -EPERM without reverting the pointer. Because matrix_mdev->kvm is never set on that path, vfio_ap_mdev_unset_kvm() performs no cleanup at close time, and freeing the mdev leaves a dangling pointer that guest PQAP handling will follow - a classic use-after-free reachable through the rwsem-protected hook invocation. The fix replaces the mdev_list iteration with a direct 'kvm->arch.crypto.pqap_hook != NULL' ownership check and moves pqap_hook_rwsem write acquisition into get_update_locks_for_kvm() and release into release_update_locks_for_kvm(), establishing the lock ordering kvm->lock -> mdevs_lock -> pqap_hook_rwsem(write) that mirrors the PQAP intercept path (kvm->lock -> vcpu->mutex -> srcu -> pqap_hook_rwsem(read)); it also relocates kvm_put_kvm() after release_update_locks_for_kvm() so kvm_destroy_vm() can no longer run under kvm->lock and deadlock (a distinct CWE-833 concern in the same function). The CPE records identify the affected product simply as the Linux kernel across all versions prior to the patched stable releases.

Know when KVM 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 8.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 5.3 MEDIUM

Local privileged mdev configuration (PR:L, AV:L); free-then-guest-PQAP sequencing is timing-dependent (AC:H); impact is a host UAF crash so A:H with C:N and only incidental I:L.

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE 6.4 MEDIUM
AV:L/AC:H/PR:H/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
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
CVSS changed
Sep 16, 2026 - 15:22 NVD
8.8 (HIGH)
Patch available
Sep 16, 2026 - 11:03 EUVD
CVE Published
Sep 16, 2026 - 10:32 cve.org
UNKNOWN (no severity yet)
CVE Published
Sep 16, 2026 - 10:32 cve.org
HIGH 8.8

DescriptionCVE.org

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

s390/vfio-ap: fix stale pqap_hook pointer on error in vfio_ap_mdev_set_kvm()

In vfio_ap_mdev_set_kvm(), kvm->arch.crypto.pqap_hook is set to &matrix_mdev->pqap_hook before the update locks are acquired and the mdev list is checked for a conflicting assignment. If another mdev is already attached to the same KVM instance, the function returns -EPERM without restoring the hook pointer, leaving kvm->arch.crypto.pqap_hook pointing at the failing matrix_mdev instead of the mdev that legitimately owns the KVM.

Since matrix_mdev->kvm is never set on this error path, vfio_ap_mdev_unset_kvm() will not clean up the hook when matrix_mdev is later closed. If matrix_mdev is subsequently freed, any PQAP instruction executed by the guest will dereference the stale pointer through pqap_hook_rwsem, resulting in a use-after-free.

Since kvm->arch.crypto.pqap_hook is only set in the vfio_ap_mdev_set_kvm() function and is cleared in the vfio_ap_mdev_unset_kvm() function, a check for 'kvm->arch.crypto.pqap_hook != NULL' is all that is needed to determine whether it belongs to another mdev. This will alleviate the need to iterate the matrix_dev->mdev_list list to see if the kvm object is assigned to another mdev.This was introduced in v3 to alleviate the need to take the mdevs_lock while iterating the list; however, this did not prevent a potential race condition.

The pqap_hook_rwsem(write) is now performed inside get_update_locks_for_kvm(), which is updated to acquire pqap_hook_rwsem(write) between kvm->lock and mdevs_lock. This ordering is consistent with the PQAP intercept path, which acquires pqap_hook_rwsem in read mode while srcu is held under vcpu->mutex, establishing the dependency: kvm->lock -> vcpu->mutex -> srcu -> pqap_hook_rwsem(read).

The pqap_hook_rwsem is now released inside the release_update_locks_for_kvm(), which is updated to release pqap_hook_rwsem(write) between mdevs_lock and kvm->lock.

Additionally, kvm_put_kvm() in vfio_ap_mdev_unset_kvm() is moved after release_update_locks_for_kvm(). Previously it was called while kvm->lock was held; if it were ever the last reference, kvm_destroy_vm() would run under kvm->lock, which would deadlock.

Executive ViewAI

Why It Matters

Organizations that run KVM virtualization on IBM Z (s390) systems using the vfio-ap AP crypto passthrough driver face a high-severity kernel memory-corruption flaw (CVE-2026-89960, CVSS 8.8) that can crash or destabilize a host and take every guest workload on that system down with it. Exploitation is not remotely reachable and requires an attacker who already holds privileged host-side access plus a specific mediated-device configuration, so the realistic risk is a trusted insider or compromised administrator escalating to full host kernel control rather than an external breach. Leadership should treat this as a platform-specific patch priority for the IBM Z estate, with patched vendor kernel builds already available.

Business Impact: High
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.2%
Top 95% exploitable
Prevalence
Low
niche s390/IBM Z KVM AP crypto passthrough, minimal general enterprise footprint
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

44
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +44
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.

More in KVM

View all
CVE-2026-27211 CRITICAL
10.0 Feb 21

Arbitrary host file exfiltration from Cloud Hypervisor VMM versions 34.0-50.0. CVSS 10.0. Patch available.

CVE-2026-89930 CRITICAL
9.3 Sep 16

Incorrect handling of queued local TLB flushes in the Linux kernel's KVM nested-VMX (nVMX) implementation can leave stal

CVE-2026-89918 CRITICAL
9.3 Sep 16

Address-rollover bug in the Linux kernel's KVM/arm64 TLB-by-VA invalidation path causes the hypervisor to silently skip

CVE-2026-89916 CRITICAL
9.3 Sep 16

Race conditions in the arm64 KVM path that invalidates VNCR translations can leave a stale stage-1 TLB entry installed f

CVE-2026-89915 CRITICAL
9.3 Sep 16

Missed TLB invalidations in the arm64 KVM nested-virtualization path of the Linux kernel can leave stale translations fo

CVE-2026-89914 CRITICAL
9.3 Sep 16

Range-based TLB invalidation in the arm64 KVM hypervisor of the Linux kernel is computed against the wrong address range

CVE-2026-89913 HIGH
8.8 Sep 16

A use-after-free race in the arm64 KVM vGICv3 code path of the Linux kernel (vgic_v3_save_pending_tables) allows a local

CVE-2026-89959 HIGH
8.8 Sep 16

The s390 vfio-ap mediated device (mdev) driver in the Linux kernel fails to actually revoke crypto control-domain access

CVE-2026-89957 HIGH
8.8 Sep 16

Stale hardware access to unplugged crypto resources in Linux KVM guests on IBM Z (s390) stems from a logic error in the

CVE-2026-89932 HIGH
8.8 Sep 16

Stale TLB entries can be reused by an L2 guest in the Linux kernel's KVM nested virtualization (nVMX) implementation on

CVE-2026-89929 HIGH
8.8 Sep 16

Linux kernel's KVM nested-VMX (nVMX) emulation can leave stale L2 guest TLB entries on a physical CPU, because KVM execu

CVE-2026-89908 HIGH
8.8 Sep 16

On LoongArch hosts running KVM, a memory-slot update that changes only flags (KVM_MR_FLAGS_ONLY, most notably toggling K

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise Desktop 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected

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