---
id: "CVE-2026-99176"
kind: "vulnerability"
aliases: ["CVE-2026-99176"]
title: "Linux KVM nested VMX: failed L2 state load leaves NULL pointer dereference crash"
severity: "unknown"
cvss: null
epss: null
exploited: false
status: "open"
category: "runtime"
products: []
ecosystems: []
tags: ["intel-vmx", "kvm", "linux", "nested-virtualization", "runtime", "self-hosted"]
not_affected_if: ["managed-hosting", "nested-disabled", "no-kvm-intel"]
published_at: "2026-10-28T11:17:38+00:00"
first_seen_at: "2026-10-28T11:32:36+00:00"
updated_at: "2026-10-28T11:35:30+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-99176", "first_seen_at": "2026-10-28T11:32:36+00:00"}]
---

# Linux KVM nested VMX: failed L2 state load leaves NULL pointer dereference crash

When loading nested (L2) guest state fails during RSM emulation or KVM_SET_NESTED_STATE, the vCPU keeps using the nested MMU, and freeing the nested state then causes a kernel NULL pointer dereference. The sources describe a kernel oops that crashes the host; they do not describe code execution or data theft.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check whether the host runs the kvm_intel module: `lsmod | grep kvm_intel`
- Check whether nested virtualization is enabled: `cat /sys/module/kvm_intel/parameters/nested`
- Check the running kernel version: `uname -r`

## Fix

- Install a Linux kernel build that includes the upstream fix for CVE-2026-99176 (the sources do not name a fixed version: unknown)
- Reboot into the patched kernel

## Timeline

- 2026-10-28T11:32:36+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-99176

## From the sources

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

KVM: nVMX: Reset MMU back to the root MMU if loading L2 state fails for !VM-Entry

Reset the vCPU's MMU pointer back to the root MMU if loading L2 state fails
in the "not from VM-Entry" case, i.e. when emulating RSM or handling
KVM_SET_NESTED_STATE.  Failure to unwind the MMU pointer results in KVM
trying to run L1 with a nested MMU, and is especially problematic if the
vCPU manages to free its nested state before the VM crashes.  Constructing
the root for a nested EPT MMU goes through vmcs12, which is dynamically
allocated/freed when nVMX is enabled/disabled.  And so if the nested state
is freed with the MMU still pointing at the nested MMU, KVM will hit a NULL
pointer deref when attempting to get L1=>L2 EPTP.

  BUG: kernel NULL pointer dereference, address: 0000000000000078
  #PF: supervisor read access in kernel mode
  #PF: error_code(0x0000) - not-present page
  PGD 114a2d067 P4D 111743067 PUD 11141f067 PMD 0
  Oops: Oops: 0000 [#1] SMP
  CPU: 20 UID: 1000 PID: 1272 Comm: nested_tdp_faul Not tainted 7.3.0-rc4-8c89f11d1a99b-sink-vm #1914 PREEMPTLAZY
  Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
  RIP: 0010:nested_ept_get_eptp+0xb/0x10 [kvm_intel]
  Call Trace:
   <TASK>
   kvm_mmu_load+0xcd/0x870 [kvm]
   kvm_arch_vcpu_ioctl_run+0x18f5/0x1f80 [kvm]
   kvm_vcpu_ioctl+0x2c7/0x970 [kvm]
   __x64_sys_ioctl+0x90/0xd0
   do_syscall_64+0x9c/0x4d0
   entry_SYSCALL_64_after_hwframe+0x4b/0x53
  RIP: 0033:0x47491b
   </TASK>
  Modules linked in: kvm_intel kvm irqbypass
  CR2: 0000000000000078
  ---[ end trace 0000000000000000 ]---
  RIP: 0010:nested_ept_get_eptp+0xb/0x10 [kvm_intel]

[sean: write changelog]

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
