[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <zhrcqjacdnmm4gtcmbx7rqaoap6kxtzirv5t2a3rustjsrc32g@2w5u23dcb3bi>
Date: Thu, 22 Jan 2026 01:38:19 +0000
From: Yosry Ahmed <yosry.ahmed@...ux.dev>
To: Sean Christopherson <seanjc@...gle.com>
Cc: Paolo Bonzini <pbonzini@...hat.com>, kvm@...r.kernel.org,
linux-kernel@...r.kernel.org, stable@...r.kernel.org
Subject: Re: [PATCH v4 16/26] KVM: nSVM: Add missing consistency check for
nCR3 validity
On Thu, Jan 15, 2026 at 01:13:02AM +0000, Yosry Ahmed wrote:
> From the APM Volume #2, 15.25.4 (24593—Rev. 3.42—March 2024):
>
> When VMRUN is executed with nested paging enabled
> (NP_ENABLE = 1), the following conditions are considered illegal
> state combinations, in addition to those mentioned in
> “Canonicalization and Consistency Checks”:
> • Any MBZ bit of nCR3 is set.
> • Any G_PAT.PA field has an unsupported type encoding or any
> reserved field in G_PAT has a nonzero value.
>
> Add the consistency check for nCR3 being a legal GPA with no MBZ bits
> set. The G_PAT.PA check was proposed separately [*].
>
> [*]https://lore.kernel.org/kvm/20251107201151.3303170-6-jmattson@google.com/
>
> Fixes: 4b16184c1cca ("KVM: SVM: Initialize Nested Nested MMU context on VMRUN")
> Cc: stable@...r.kernel.org
> Signed-off-by: Yosry Ahmed <yosry.ahmed@...ux.dev>
> ---
> arch/x86/kvm/svm/nested.c | 5 +++++
> 1 file changed, 5 insertions(+)
>
> diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c
> index 0f2b42803cf6..eb4a633a668d 100644
> --- a/arch/x86/kvm/svm/nested.c
> +++ b/arch/x86/kvm/svm/nested.c
> @@ -351,6 +351,11 @@ static bool nested_vmcb_check_controls(struct kvm_vcpu *vcpu,
> if (CC(control->asid == 0))
> return false;
>
> + if (nested_npt_enabled(to_svm(vcpu))) {
This won't work correctly in svm_set_nested_state(), because the control
cache hadn't been restored yet. Also makes more sense in general to
check NPT enablement using the passed in control area.
This should be:
if (control->nested_ctl & SVM_NESTED_CTL_NP_ENABLE) {
> + if (CC(!kvm_vcpu_is_legal_gpa(vcpu, control->nested_cr3)))
> + return false;
> + }
> +
> if (CC(!nested_svm_check_bitmap_pa(vcpu, control->msrpm_base_pa,
> MSRPM_SIZE)))
> return false;
> --
> 2.52.0.457.g6b5491de43-goog
>
Powered by blists - more mailing lists