• Michael Roth's avatar
    KVM: selftests: set CPUID before setting sregs in vcpu creation · 413eaa4e
    Michael Roth authored
    Recent kernels have checks to ensure the GPA values in special-purpose
    registers like CR3 are within the maximum physical address range and
    don't overlap with anything in the upper/reserved range. In the case of
    SEV kselftest guests booting directly into 64-bit mode, CR3 needs to be
    initialized to the GPA of the page table root, with the encryption bit
    set. The kernel accounts for this encryption bit by removing it from
    reserved bit range when the guest advertises the bit position via
    KVM_SET_CPUID*, but kselftests currently call KVM_SET_SREGS as part of
    vm_vcpu_add_default(), before KVM_SET_CPUID*.
    
    As a result, KVM_SET_SREGS will return an error in these cases.
    Address this by moving vcpu_set_cpuid() (which calls KVM_SET_CPUID*)
    ahead of vcpu_setup() (which calls KVM_SET_SREGS).
    
    While there, address a typo in the assertion that triggers when
    KVM_SET_SREGS fails.
    Suggested-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarMichael Roth <michael.roth@amd.com>
    Message-Id: <20211006203617.13045-1-michael.roth@amd.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: default avatarNathan Tempelman <natet@google.com>
    413eaa4e
kvm_util.c 60.8 KB