Messages in this thread Patch in this message |  | | From | "Huang, Kai" <> | | Subject | Re: [PATCH] KVM: VMX: Flush shadow VMCS on emergency reboot | | Date | Mon, 31 Mar 2025 23:17:24 +0000 |
| |
On Mon, 2025-03-24 at 22:08 +0800, Chao Gao wrote: > Ensure the shadow VMCS cache is evicted during an emergency reboot to > prevent potential memory corruption if the cache is evicted after reboot. > > This issue was identified through code inspection, as __loaded_vmcs_clear() > flushes both the normal VMCS and the shadow VMCS. > > Avoid checking the "launched" state during an emergency reboot, unlike the > behavior in __loaded_vmcs_clear(). This is important because reboot NMIs > can interfere with operations like copy_shadow_to_vmcs12(), where shadow > VMCSes are loaded directly using VMPTRLD. In such cases, if NMIs occur > right after the VMCS load, the shadow VMCSes will be active but the > "launched" state may not be set. > > Signed-off-by: Chao Gao <chao.gao@intel.com>
Reviewed-by: Kai Huang <kai.huang@intel.com>
> --- > arch/x86/kvm/vmx/vmx.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index b70ed72c1783..dccd1c9939b8 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -769,8 +769,11 @@ void vmx_emergency_disable_virtualization_cpu(void) > return; > > list_for_each_entry(v, &per_cpu(loaded_vmcss_on_cpu, cpu), > - loaded_vmcss_on_cpu_link) > + loaded_vmcss_on_cpu_link) { > vmcs_clear(v->vmcs); > + if (v->shadow_vmcs) > + vmcs_clear(v->shadow_vmcs); > + } > > kvm_cpu_vmxoff(); > }
|  |