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

mshv: Order pt_vp_array publish against irqfd assertion path

mshv_partition_ioctl_create_vp() initialises a VP struct (allocations,
mutex_init, init_waitqueue_head, page mappings) and then publishes the
pointer into partition->pt_vp_array. Several ISR paths read this array
locklessly: the intercept ISR, the two scheduler ISRs, and
mshv_try_assert_irq_fast() on the irqfd fast path.

Of these, only mshv_try_assert_irq_fast() can structurally race the
publish. It runs from an eventfd waker without holding pt_mutex, and
MSHV_IRQFD does not require the target lapic_apic_id (== vp_index) to
refer to an existing VP at registration time. A user can therefore
register an irqfd targeting a yet-to-be-created VP, then trigger
mshv_try_assert_irq_fast() concurrently with MSHV_CREATE_VP for the
same index. On weakly-ordered architectures the reader can observe a
non-NULL pointer in pt_vp_array before the initialising stores to the
VP struct become visible, leading to use of partially-initialised
fields (e.g. vp_register_page).

The other ISR readers cannot reach this race: the hypervisor will not
generate intercept or scheduler messages for a VP that has never been
told to run, and the user can only call MSHV_RUN_VP on the VP fd
returned by MSHV_CREATE_VP, which by construction is returned after
the publish. Leave those readers as plain loads.

Use smp_store_release() in mshv_partition_ioctl_create_vp() to publish
the pointer, and pair it with smp_load_acquire() in
mshv_try_assert_irq_fast(). On x86 these compile to plain accesses
under TSO; on ARM64 they emit one-instruction acquire/release barriers,
acceptable on this fast path.

The destroy-side path (destroy_partition() clearing pt_vp_array[i] to
NULL after kfree(vp)) has a separate ordering and lifetime concern
that is out of scope here.
Published: 2026-09-04
Score: n/a
EPSS: < 1% Very Low
KEV: No
Impact: Kernel memory corruption potential
Action: Assess Impact
AI Analysis

Impact

A race condition exists in the Linux kernel's mshv hypervisor interface between the publishing of a virtual processor (VP) structure into the pt_vp_array and the interrupt service routine (ISR) that can read this array without synchronization. When an irqfd is registered for a VP that has not yet been fully created, a concurrent ISR may observe a partially initialized VP pointer, leading the ISR to use incomplete fields such as vp_register_page. This flawed read can corrupt kernel memory or potentially execute unintended kernel code. Based on the description, it is inferred that the flaw could lead to kernel-level memory corruption, which might in turn enable privilege escalation if an attacker can trigger and control the race.

Affected Systems

All Linux kernel builds that include the mshv hypervisor implementation are potentially vulnerable. The specific affected versions are not enumerated in the advisory, so any kernel that implements the current mshv architecture and exposes the irqfd interface is at risk until a patch is released.

Risk and Exploitability

The advisory does not provide a CVSS score, and the EPSS data is unavailable, suggesting no widely publicized exploitation. The flaw requires a user to register an irqfd for a non-existent VP and to trigger the fast path ISR concurrently with VP creation, which is generally a local privilege scenario. Because the vulnerability is not listed in the CISA KEV catalog, the current threat level is low to moderate, but if an attacker is able to satisfy the conditions the risk could elevate to serious kernel compromise.

Generated by OpenCVE AI on September 4, 2026 at 20:27 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the Linux kernel update that includes the mshv race-fix once it becomes available.
  • If an update cannot be applied, prevent the creation of irqfds for VPs that have not yet been initialized or disable the irqfd mechanism entirely.
  • Monitor kernel logs for unexpected crashes or anomalous ISR behavior and enforce strict least privilege on the processes that can register irqfds.

Generated by OpenCVE AI on September 4, 2026 at 20:27 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 04 Sep 2026 20:45:00 +0000

Type Values Removed Values Added
Weaknesses CWE-362
CWE-665

Fri, 04 Sep 2026 17:30:00 +0000

Type Values Removed Values Added
Description In the Linux kernel, the following vulnerability has been resolved: mshv: Order pt_vp_array publish against irqfd assertion path mshv_partition_ioctl_create_vp() initialises a VP struct (allocations, mutex_init, init_waitqueue_head, page mappings) and then publishes the pointer into partition->pt_vp_array. Several ISR paths read this array locklessly: the intercept ISR, the two scheduler ISRs, and mshv_try_assert_irq_fast() on the irqfd fast path. Of these, only mshv_try_assert_irq_fast() can structurally race the publish. It runs from an eventfd waker without holding pt_mutex, and MSHV_IRQFD does not require the target lapic_apic_id (== vp_index) to refer to an existing VP at registration time. A user can therefore register an irqfd targeting a yet-to-be-created VP, then trigger mshv_try_assert_irq_fast() concurrently with MSHV_CREATE_VP for the same index. On weakly-ordered architectures the reader can observe a non-NULL pointer in pt_vp_array before the initialising stores to the VP struct become visible, leading to use of partially-initialised fields (e.g. vp_register_page). The other ISR readers cannot reach this race: the hypervisor will not generate intercept or scheduler messages for a VP that has never been told to run, and the user can only call MSHV_RUN_VP on the VP fd returned by MSHV_CREATE_VP, which by construction is returned after the publish. Leave those readers as plain loads. Use smp_store_release() in mshv_partition_ioctl_create_vp() to publish the pointer, and pair it with smp_load_acquire() in mshv_try_assert_irq_fast(). On x86 these compile to plain accesses under TSO; on ARM64 they emit one-instruction acquire/release barriers, acceptable on this fast path. The destroy-side path (destroy_partition() clearing pt_vp_array[i] to NULL after kfree(vp)) has a separate ordering and lifetime concern that is out of scope here.
Title mshv: Order pt_vp_array publish against irqfd assertion path
First Time appeared Linux
Linux linux Kernel
CPEs cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
Vendors & Products Linux
Linux linux Kernel
References

Subscriptions

Linux Linux Kernel
cve-icon MITRE

Status: PUBLISHED

Assigner: Linux

Published:

Updated: 2026-09-04T17:11:10.880Z

Reserved: 2026-08-26T14:34:25.800Z

Link: CVE-2026-80895

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-04T18:17:57.727

Modified: 2026-09-04T18:17:57.727

Link: CVE-2026-80895

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-04T23:45:17Z

Weaknesses
  • CWE-362

    Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

  • CWE-665

    Improper Initialization