Repository navigation
Open
Task
0 / 220 of 22 issues completed
Copy link
Description
Objective. A capture saves every guest-visible piece of processor state, or refuses state that it cannot represent; a restore writes all of it; and a restore rejects unsupported or malformed state, a snapshot's own CPU profile included, with an error before it changes the partition. Most children concern the KVM backend.
Children.
| State | Issue | Scope | Blocked by |
|---|---|---|---|
| CPU profile | #1357 | A snapshot's host CPU profile is accepted once it decodes and matches its digest, so a crafted one can give the guest VMX or SVM. | — |
| CPU profile | #1382 | A snapshot's host CPU profile that describes huge XSAVE components overflows the XSAVE length math while the partition is built, and a debug build panics. | — |
| Registers | #1358 | KVM restore accepts EFER.SVME for a guest whose CPUID lacks SVM. |
— |
| MSRs | #1141 | KVM restore loses the guest's IA32_SPEC_CTRL mitigation settings. |
— |
| MSRs | #1160 | KVM snapshots omit other guest-writable MSRs: IA32_UMWAIT_CONTROL, the machine-check banks, IA32_MISC_ENABLE and other feature and power MSRs, IA32_DEBUGCTL, IA32_BNDCFGS, and AMD's legacy PMU. |
— |
| MSRs | #1368 | Under an Intel profile on KVM, the guest can write AMD's HWCR, which snapshots do not hold. |
— |
| MSRs | #1367 | VirtualMsrs holds IA32_SYSENTER_ESP in sysenter_eip, and the EIP in sysenter_esp, on KVM, MSHV, and WHP: a restore round-trips them, but readers by name see the wrong register. |
— |
| XSAVE | #1359 | On a PKU host whose VP threads run with PKRU 0, a KVM snapshot can record the guest's PKRU as its init value. | — |
| XSAVE | #1360 | KVM's set_xsave keeps the old PKRU or MXCSR after a VM reset on some hosts, and without XSAVE loads legacy bytes that XSTATE_BV marks as init. |
— |
| XSAVE | #1389 | On a host kernel without XSAVEC or XSAVES, KVM_GET_XSAVE reports MXCSR as 0x1f80 while the guest's XMM and upper YMM state is init, so a snapshot loses the guest's MXCSR. |
— |
| XSAVE | #1380 | KVM restore accepts an XSAVE component outside the partition's caps, which the next save drops. | — |
| XSAVE | #1381 | A short or malformed XSAVE area panics the VM worker in KVM's set_xsave. |
— |
| APIC | #1365 | A restored LVT timer in a mode other than Fixed makes KVM deliver an INIT, SIPI, NMI, or SMI. | — |
| APIC | #1171 | A reserved REMOTE_READ delivery sets a KVM wakeup latch that snapshots do not save. |
— |
| Events | #1158 | KVM snapshots lose a pending SMI and SMM execution state. | — |
| Events | #1391 | On an AMD host with vGIF and Linux before 7.1, a guest without SVM can clear GIF, which snapshots do not save, and a restore loses an INIT that KVM held latched behind it. | — |
| Events | #1161 | KVM restore collapses two pending NMIs into one. | — |
| Events | #1169 | KVM restore drops pending exceptions, and debug builds panic on state that KVM normalizes. | — |
| Events | #1385 | KVM restore accepts an injected #BP or #OF, which KVM then loses, and debug builds panic. | — |
| Events | #1369 | KVM snapshots keep the interrupt shadow but not its kind, so an STI shadow restores as a MOV SS shadow. | — |
| Capture | #1150 | Capture mixes CPU state from before and after an INIT or SIPI. | — |
| Restore | #1168 | Unsupported snapshot state panics restore after it may have changed the partition. | — |
Order. No child blocks another.
Notes.
- openvmm: KVM snapshot restore loses guest SPEC_CTRL mitigation settings #1141 and openvmm: KVM VP snapshots omit guest-writable MSRs across several CPU features #1160 both add capability-gated optional VP state, and both must decide how older snapshots and readers behave; give them one mechanism and one policy. openvmm:
VirtualMsrs.sysenter_eipholds SYSENTER_ESP on KVM, MSHV and WHP #1367 (what fields 3 and 4 ofVirtualMsrsmean) and openvmm: KVM snapshots drop the interrupt-shadow kind (STI vs MOV SS) #1369 (the shadow's kind) need the same decision. openvmm: KVM VP snapshots omit guest-writable MSRs across several CPU features #1160 may instead hide some of its CPUID features, as openvmm: KVM guests with an Intel profile can write AMD HWCR, lost on restore #1368 hidesHWCR. - openvmm: KVM snapshots silently lose pending SMI and SMM execution state #1158, openvmm: KVM snapshot restore collapses two pending NMIs into one #1161, openvmm: KVM snapshot restore drops pending exceptions and panics on backend-normalized CPU state in debug builds #1169, openvmm: KVM snapshots drop the interrupt-shadow kind (STI vs MOV SS) #1369, and openvmm: restoring an injected #BP or #OF on KVM loses it or panics debug #1385 all change
KvmVpStateAccess::{activity, set_activity}; land them one at a time. openvmm: KVM CPU reset retains a pending NMI and interrupt shadow #1159 (CPU reset), which moved to OpenVMM/microVM umbrella: OpenVMM issues outside the microVM and NVX implementation #1186 because a microVM never resets its vCPUs, changes the same functions, and openvmm: KVM snapshot restore collapses two pending NMIs into one #1161 asks to stay separate from its validity-flag fix. openvmm: saving or inspecting a KVM AP in SEV-ES/SNP reset hold panics #1383 and openvmm: on KVM, a halted VP with a PV kick waiting restores as running #1386, in OpenVMM/microVM umbrella: OpenVMM issues outside the microVM and NVX implementation #1186 because no microVM reaches them, change them too. - openvmm: KVM's set_xsave keeps old PKRU or MXCSR after a VM reset on some hosts #1360, openvmm: a restored XSAVE component outside the caps loads, then is lost #1380, and openvmm: restoring a short or malformed XSAVE area panics the VM worker on KVM #1381 all change
KvmVpStateAccess::set_xsave; land them one at a time. openvmm: with task PKRU 0 on a PKU host, KVM snapshots can lose guest PKRU #1359 concerns the same PKRU state as openvmm: KVM's set_xsave keeps old PKRU or MXCSR after a VM reset on some hosts #1360, from the VP thread's side, and openvmm: KVM snapshots lose MXCSR on hosts without XSAVEC or XSAVES #1389 is the save side of openvmm: KVM's set_xsave keeps old PKRU or MXCSR after a VM reset on some hosts #1360's MXCSR case, on the same hosts: a Linux regression that OpenVMM cannot work around, whose fix is a kernel patch. openvmm: KVM's set_xsave keeps old PKRU or MXCSR after a VM reset on some hosts #1360's two reset cases need a VM reset, which a microVM never performs, but its third, a crafted snapshot on a host without XSAVE, reaches a restore. - openvmm: a snapshot's host CPU profile can give the guest VMX or SVM #1357 and openvmm: a restored CPU profile's XSAVE layout overflows XSAVE length math #1382 come from a snapshot's own host CPU profile (
<vendor>.host.v<n>), whichhost_profile_for_restoreaccepts once it decodes and matches its digest. ThroughEFER.SVME, openvmm: a snapshot's EFER.SVME gives SVM to a KVM guest whose CPUID lacks it #1358 lets a crafted snapshot give the guest SVM as openvmm: a snapshot's host CPU profile can give the guest VMX or SVM #1357 does. - Only a crafted, corrupted, or foreign snapshot reaches openvmm: a snapshot's host CPU profile can give the guest VMX or SVM #1357, openvmm: a snapshot's EFER.SVME gives SVM to a KVM guest whose CPUID lacks it #1358, openvmm: a restored non-Fixed APIC timer makes KVM inject INIT, SIPI or NMI #1365, openvmm: a restored XSAVE component outside the caps loads, then is lost #1380, openvmm: restoring a short or malformed XSAVE area panics the VM worker on KVM #1381, openvmm: a restored CPU profile's XSAVE layout overflows XSAVE length math #1382, and openvmm: restoring an injected #BP or #OF on KVM loses it or panics debug #1385.
- openvmm: with vGIF, a guest without SVM can clear GIF, and a snapshot loses it #1391 bears on openvmm: snapshot capture mixes CPU state from before and after INIT or SIPI #1150 and openvmm: KVM snapshots silently lose pending SMI and SMM execution state #1158: openvmm: snapshot capture mixes CPU state from before and after INIT or SIPI #1150's proposed refusal of a capture while KVM reports a latched INIT also covers an INIT held behind a clear GIF, which openvmm: KVM snapshots silently lose pending SMI and SMM execution state #1158's patch assumes only SMM can hold. GIF itself has no saved element; Linux 7.1 makes such a guest's CLGI raise #UD.
- openvmm: a restored non-Fixed APIC timer makes KVM inject INIT, SIPI or NMI #1365 and openvmm: on KVM, a restored one-shot LAPIC timer can fire an extra time or drift #1366 (in OpenVMM/microVM umbrella: VM time and the time ABI #1183) both change how a restore writes the LAPIC timer to KVM; land them one at a time.
- openvmm: KVM snapshots silently lose pending SMI and SMM execution state #1158, openvmm: unsupported snapshot state panics restore after potentially changing the partition #1168, and openvmm: KVM snapshot restore drops pending exceptions and panics on backend-normalized CPU state in debug builds #1169 all change the generated
save_allorrestore_allinvmm_core/virt/src/state.rs.
Metadata
Metadata
Assignees
Labels
No labels
Activity
[-]OpenVMM/microVM umbrella: processor state across snapshots and resets[/-][+]OpenVMM/microVM umbrella: processor state across snapshots[/+]VirtualMsrs.sysenter_eipholds SYSENTER_ESP on KVM, MSHV and WHP #1367