VYPR
Unrated severityNVD Advisory· Published Nov 12, 2025· Updated Apr 15, 2026

CVE-2025-40181

CVE-2025-40181

Description

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

x86/kvm: Force legacy PCI hole to UC when overriding MTRRs for TDX/SNP

When running as an SNP or TDX guest under KVM, force the legacy PCI hole, i.e. memory between Top of Lower Usable DRAM and 4GiB, to be mapped as UC via a forced variable MTRR range.

In most KVM-based setups, legacy devices such as the HPET and TPM are enumerated via ACPI. ACPI enumeration includes a Memory32Fixed entry, and optionally a SystemMemory descriptor for an OperationRegion, e.g. if the device needs to be accessed via a Control Method.

If a SystemMemory entry is present, then the kernel's ACPI driver will auto-ioremap the region so that it can be accessed at will. However, the ACPI spec doesn't provide a way to enumerate the memory type of SystemMemory regions, i.e. there's no way to tell software that a region must be mapped as UC vs. WB, etc. As a result, Linux's ACPI driver always maps SystemMemory regions using ioremap_cache(), i.e. as WB on x86.

The dedicated device drivers however, e.g. the HPET driver and TPM driver, want to map their associated memory as UC or WC, as accessing PCI devices using WB is unsupported.

On bare metal and non-CoCO, the conflicting requirements "work" as firmware configures the PCI hole (and other device memory) to be UC in the MTRRs. So even though the ACPI mappings request WB, they are forced to UC- in the kernel's tracking due to the kernel properly handling the MTRR overrides, and thus are compatible with the drivers' requested WC/UC-.

With force WB MTRRs on SNP and TDX guests, the ACPI mappings get their requested WB if the ACPI mappings are established before the dedicated driver code attempts to initialize the device. E.g. if acpi_init() runs before the corresponding device driver is probed, ACPI's WB mapping will "win", and result in the driver's ioremap() failing because the existing WB mapping isn't compatible with the requested WC/UC-.

E.g. when a TPM is emulated by the hypervisor (ignoring the security implications of relying on what is allegedly an untrusted entity to store measurements), the TPM driver will request UC and fail:

[ 1.730459] ioremap error for 0xfed40000-0xfed45000, requested 0x2, got 0x0 [ 1.732780] tpm_tis MSFT0101:00: probe with driver tpm_tis failed with error -12

Note, the '0x2' and '0x0' values refer to "enum page_cache_mode", not x86's memtypes (which frustratingly are an almost pure inversion; 2 == WB, 0 == UC). E.g. tracing mapping requests for TPM TIS yields:

Mapping TPM TIS with req_type = 0 WARNING: CPU: 22 PID: 1 at arch/x86/mm/pat/memtype.c:530 memtype_reserve+0x2ab/0x460 Modules linked in: CPU: 22 UID: 0 PID: 1 Comm: swapper/0 Tainted: G W 6.16.0-rc7+ #2 VOLUNTARY Tainted: [W]=WARN Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/29/2025 RIP: 0010:memtype_reserve+0x2ab/0x460 __ioremap_caller+0x16d/0x3d0 ioremap_cache+0x17/0x30 x86_acpi_os_ioremap+0xe/0x20 acpi_os_map_iomem+0x1f3/0x240 acpi_os_map_memory+0xe/0x20 acpi_ex_system_memory_space_handler+0x273/0x440 acpi_ev_address_space_dispatch+0x176/0x4c0 acpi_ex_access_region+0x2ad/0x530 acpi_ex_field_datum_io+0xa2/0x4f0 acpi_ex_extract_from_field+0x296/0x3e0 acpi_ex_read_data_from_field+0xd1/0x460 acpi_ex_resolve_node_to_value+0x2ee/0x530 acpi_ex_resolve_to_value+0x1f2/0x540 acpi_ds_evaluate_name_path+0x11b/0x190 acpi_ds_exec_end_op+0x456/0x960 acpi_ps_parse_loop+0x27a/0xa50 acpi_ps_parse_aml+0x226/0x600 acpi_ps_execute_method+0x172/0x3e0 acpi_ns_evaluate+0x175/0x5f0 acpi_evaluate_object+0x213/0x490 acpi_evaluate_integer+0x6d/0x140 acpi_bus_get_status+0x93/0x150 acpi_add_single_object+0x43a/0x7c0 acpi_bus_check_add+0x149/0x3a0 acpi_bus_check_add_1+0x16/0x30 acpi_ns_walk_namespace+0x22c/0x360 acpi_walk_namespace+0x15c/0x170 acpi_bus_scan+0x1dd/0x200 acpi_scan_init+0xe5/0x2b0 acpi_init+0x264/0x5b0 do_one_i ---truncated---

AI Insight

LLM-synthesized narrative grounded in this CVE's description and references.

In the Linux kernel, a missing UC MTRR override for the legacy PCI hole in SNP/TDX guests causes ACPI WB mappings to conflict with driver-requested WC/UC- mappings, leading to device initialization failures.

Vulnerability

Overview

In the Linux kernel, when running as an issue was found in the x86 KVM subsystem affecting SNP and TDX confidential computing guests. When running as an SNP or TDX guest, the kernel forces write-back (WB) memory type range registers (MTRRs) for all memory. However, the legacy PCI hole (memory between Top of Lower Usable DRAM and 4GiB) must be mapped as uncacheable (UC) for proper operation of legacy devices such as the HPET and TPM. The vulnerability arises because the kernel's ACPI driver maps SystemMemory regions using ioremap_cache() (WB), while dedicated device drivers (e.g., HPET, TPM) require UC or WC mappings. On bare metal, firmware sets the PCI hole to UC in MTRRs, so the WB mapping from ACPI is overridden to UC- by the kernel's MTRR handling. In SNP/TDX guests, with forced WB MTRRs, this override does not occur, leading to a conflict.

Exploitation

Conditions

An attacker would need to be able to trigger the initialization of a legacy device (such as HPET or TPM) in an SNP or TDX guest. The conflict manifests when the ACPI driver maps the device's memory region as WB before the dedicated device driver attempts to map it as UC or WC. This can happen if acpi_init() runs before the device driver probe. The result is that the driver's ioremap() fails because the existing WB mapping is incompatible with the requested WC/UC- type. No special privileges are required beyond the ability to boot a guest with such devices.

Impact

If exploited, the vulnerability causes device initialization failures for legacy PCI devices like HPET and TPM in SNP/TDX guests. This can lead to loss of functionality for those devices, potentially affecting system timekeeping (HPET) or trusted platform module operations (TPM). The impact is limited to denial of service for those specific devices; no privilege escalation or data corruption is described.

Mitigation

The fix is to force the legacy PCI hole to be mapped as UC via a forced variable MTRR range when running as an SNP or TDX guest under KVM. This ensures that the ACPI WB mapping is overridden to UC-, matching the driver's requirements. The patch has been applied to the Linux kernel stable tree [1]. Users should update to a kernel version containing this commit to resolve the issue.

AI Insight generated on May 19, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.

Affected products

2
  • Linux/Kernelinferred2 versions
    (expand)+ 1 more
    • (no CPE)
    • (no CPE)range: 6.16.0-rc7

Patches

3

Vulnerability mechanics

Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.

References

3

News mentions

0

No linked articles in our index yet.