]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
KVM: nSVM: Mark all of vmcb02 dirty when restoring nested state
authorYosry Ahmed <yosry.ahmed@linux.dev>
Tue, 10 Feb 2026 01:08:06 +0000 (01:08 +0000)
committerSean Christopherson <seanjc@google.com>
Mon, 2 Mar 2026 22:46:40 +0000 (14:46 -0800)
When restoring a vCPU in guest mode, any state restored before
KVM_SET_NESTED_STATE (e.g. KVM_SET_SREGS) will mark the corresponding
dirty bits in vmcb01, as it is the active VMCB before switching to
vmcb02 in svm_set_nested_state().

Hence, mark all fields in vmcb02 dirty in svm_set_nested_state() to
capture any previously restored fields.

Fixes: cc440cdad5b7 ("KVM: nSVM: implement KVM_GET_NESTED_STATE and KVM_SET_NESTED_STATE")
CC: stable@vger.kernel.org
Signed-off-by: Yosry Ahmed <yosry.ahmed@linux.dev>
Link: https://patch.msgid.link/20260210010806.3204289-1-yosry.ahmed@linux.dev
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/nested.c

index 99f8b8de8159806ff192ed49d43c14702ea34cf9..d5a8f5608f2d3ae7396b6254f840c3a33bb1b8e4 100644 (file)
@@ -1909,6 +1909,12 @@ static int svm_set_nested_state(struct kvm_vcpu *vcpu,
        svm_switch_vmcb(svm, &svm->nested.vmcb02);
        nested_vmcb02_prepare_control(svm, svm->vmcb->save.rip, svm->vmcb->save.cs.base);
 
+       /*
+        * Any previously restored state (e.g. KVM_SET_SREGS) would mark fields
+        * dirty in vmcb01 instead of vmcb02, so mark all of vmcb02 dirty here.
+        */
+       vmcb_mark_all_dirty(svm->vmcb);
+
        /*
         * While the nested guest CR3 is already checked and set by
         * KVM_SET_SREGS, it was set when nested state was yet loaded,