mbox series

[00/12] KVM: x86: Legal GPA fixes and cleanups

Message ID 20210204000117.3303214-1-seanjc@google.com (mailing list archive)
Headers show
Series KVM: x86: Legal GPA fixes and cleanups | expand

Message

Sean Christopherson Feb. 4, 2021, 12:01 a.m. UTC
Add helpers to consolidate the GPA reserved bits checks that are scattered
all over KVM, and fix a few bugs in the process.

The original motivation was simply to get rid of all the different open
coded variations of the checks (there were a lot), but this snowballed
into a more ambitious cleanup when I realized common helpers are more or
less required to correctly handle repurposed GPA bits, e.g. SEV's C-bit.

The last two patches (use nested VM-Enter failure tracepoints in SVM)
aren't directly related to the GPA checks, but the conflicts would be
rather messy, so I included them here.

Note, the SEV C-bit changes are technically bug fixes, but getting them in
stable kernels would require backporting this entire pile.  IMO, it's not
worth the effort given that it's extremely unlikely anyone will encounter
the bugs in anything but synthetic negative tests.

Based on kvm/queue, commit 3f87cb8253c3 ("KVM: X86: Expose bus lock debug
exception to guest").

Sean Christopherson (12):
  KVM: x86: Set so called 'reserved CR3 bits in LM mask' at vCPU reset
  KVM: nSVM: Don't strip host's C-bit from guest's CR3 when reading
    PDPTRs
  KVM: x86: Add a helper to check for a legal GPA
  KVM: x86: Add a helper to handle legal GPA with an alignment
    requirement
  KVM: VMX: Use GPA legality helpers to replace open coded equivalents
  KVM: nSVM: Use common GPA helper to check for illegal CR3
  KVM: x86: SEV: Treat C-bit as legal GPA bit regardless of vCPU mode
  KVM: x86: Use reserved_gpa_bits to calculate reserved PxE bits
  KVM: x86/mmu: Add helper to generate mask of reserved HPA bits
  KVM: x86: Add helper to consolidate "raw" reserved GPA mask
    calculations
  KVM: x86: Move nVMX's consistency check macro to common code
  KVM: nSVM: Trace VM-Enter consistency check failures

 arch/x86/include/asm/kvm_host.h |   2 +-
 arch/x86/kvm/cpuid.c            |  20 +++++-
 arch/x86/kvm/cpuid.h            |  24 +++++--
 arch/x86/kvm/mmu/mmu.c          | 110 ++++++++++++++++----------------
 arch/x86/kvm/mtrr.c             |  12 ++--
 arch/x86/kvm/svm/nested.c       |  35 +++++-----
 arch/x86/kvm/svm/svm.c          |   2 +-
 arch/x86/kvm/vmx/nested.c       |  34 +++-------
 arch/x86/kvm/vmx/vmx.c          |   2 +-
 arch/x86/kvm/x86.c              |  11 ++--
 arch/x86/kvm/x86.h              |   8 +++
 11 files changed, 140 insertions(+), 120 deletions(-)

Comments

Paolo Bonzini Feb. 4, 2021, 10:44 a.m. UTC | #1
On 04/02/21 01:01, Sean Christopherson wrote:
> Add helpers to consolidate the GPA reserved bits checks that are scattered
> all over KVM, and fix a few bugs in the process.
> 
> The original motivation was simply to get rid of all the different open
> coded variations of the checks (there were a lot), but this snowballed
> into a more ambitious cleanup when I realized common helpers are more or
> less required to correctly handle repurposed GPA bits, e.g. SEV's C-bit.
> 
> The last two patches (use nested VM-Enter failure tracepoints in SVM)
> aren't directly related to the GPA checks, but the conflicts would be
> rather messy, so I included them here.
> 
> Note, the SEV C-bit changes are technically bug fixes, but getting them in
> stable kernels would require backporting this entire pile.  IMO, it's not
> worth the effort given that it's extremely unlikely anyone will encounter
> the bugs in anything but synthetic negative tests.
> 
> Based on kvm/queue, commit 3f87cb8253c3 ("KVM: X86: Expose bus lock debug
> exception to guest").

Queued 1 for 5.11 and 2-10 for 5.12; the VMCB01/VMCB02 patches are 
unlikely to make it in 5.12 so 11-12 won't be in kvm/next anytime 
soon---but you don't have to care about them anyway.

Paolo

> Sean Christopherson (12):
>    KVM: x86: Set so called 'reserved CR3 bits in LM mask' at vCPU reset
>    KVM: nSVM: Don't strip host's C-bit from guest's CR3 when reading
>      PDPTRs
>    KVM: x86: Add a helper to check for a legal GPA
>    KVM: x86: Add a helper to handle legal GPA with an alignment
>      requirement
>    KVM: VMX: Use GPA legality helpers to replace open coded equivalents
>    KVM: nSVM: Use common GPA helper to check for illegal CR3
>    KVM: x86: SEV: Treat C-bit as legal GPA bit regardless of vCPU mode
>    KVM: x86: Use reserved_gpa_bits to calculate reserved PxE bits
>    KVM: x86/mmu: Add helper to generate mask of reserved HPA bits
>    KVM: x86: Add helper to consolidate "raw" reserved GPA mask
>      calculations
>    KVM: x86: Move nVMX's consistency check macro to common code
>    KVM: nSVM: Trace VM-Enter consistency check failures
> 
>   arch/x86/include/asm/kvm_host.h |   2 +-
>   arch/x86/kvm/cpuid.c            |  20 +++++-
>   arch/x86/kvm/cpuid.h            |  24 +++++--
>   arch/x86/kvm/mmu/mmu.c          | 110 ++++++++++++++++----------------
>   arch/x86/kvm/mtrr.c             |  12 ++--
>   arch/x86/kvm/svm/nested.c       |  35 +++++-----
>   arch/x86/kvm/svm/svm.c          |   2 +-
>   arch/x86/kvm/vmx/nested.c       |  34 +++-------
>   arch/x86/kvm/vmx/vmx.c          |   2 +-
>   arch/x86/kvm/x86.c              |  11 ++--
>   arch/x86/kvm/x86.h              |   8 +++
>   11 files changed, 140 insertions(+), 120 deletions(-)
>