Re: [PATCH] KVM: nSVM: Mark VMCB_CET dirty on active VMCB in svm_set_msr()
From: Yosry Ahmed
Date: Wed Nov 11 2026 - 19:23:03 EST
On Wed, Nov 11, 2026 at 4:02 PM Jim Mattson <jmattson@xxxxxxxxxx> wrote:
>
> In svm_set_msr(), writes to MSR_IA32_S_CET, MSR_IA32_INT_SSP_TAB, and
> MSR_KVM_INTERNAL_GUEST_SSP update svm->vmcb->save.{s_cet,isst_addr,ssp}
> (which resolves to vmcb02->save when in guest mode), but mark VMCB_CET
> dirty on svm->vmcb01.ptr instead of svm->vmcb.
>
> A stale VMCB_CET clean bit may result in the loss of those MSR updates.
>
> Mark VMCB_CET dirty on svm->vmcb instead of svm->vmcb01.ptr.
>
> Fixes: 48b2ec0d540c ("KVM: SVM: Emulate reads and writes to shadow stack MSRs")
> Signed-off-by: Jim Mattson <jmattson@xxxxxxxxxx>
Reviewed-by: Yosry Ahmed <yosry@xxxxxxxxxx>
> ---
> arch/x86/kvm/svm/svm.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
> index 136069dfcd44..eab11fe50312 100644
> --- a/arch/x86/kvm/svm/svm.c
> +++ b/arch/x86/kvm/svm/svm.c
> @@ -3181,15 +3181,15 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
> break;
> case MSR_IA32_S_CET:
> svm->vmcb->save.s_cet = data;
> - vmcb_mark_dirty(svm->vmcb01.ptr, VMCB_CET);
> + vmcb_mark_dirty(svm->vmcb, VMCB_CET);
> break;
> case MSR_IA32_INT_SSP_TAB:
> svm->vmcb->save.isst_addr = data;
> - vmcb_mark_dirty(svm->vmcb01.ptr, VMCB_CET);
> + vmcb_mark_dirty(svm->vmcb, VMCB_CET);
> break;
> case MSR_KVM_INTERNAL_GUEST_SSP:
> svm->vmcb->save.ssp = data;
> - vmcb_mark_dirty(svm->vmcb01.ptr, VMCB_CET);
> + vmcb_mark_dirty(svm->vmcb, VMCB_CET);
> break;
> case MSR_TSC_AUX:
> /*
> --
> 2.56.0.567.gdb80ae8cd5-goog
>