• Aaron Lewis's avatar
    selftests: kvm: Test MSR exiting to userspace · 3cea1891
    Aaron Lewis authored
    Add a selftest to test that when the ioctl KVM_X86_SET_MSR_FILTER is
    called with an MSR list, those MSRs exit to userspace.
    
    This test uses 3 MSRs to test this:
      1. MSR_IA32_XSS, an MSR the kernel knows about.
      2. MSR_IA32_FLUSH_CMD, an MSR the kernel does not know about.
      3. MSR_NON_EXISTENT, an MSR invented in this test for the purposes of
         passing a fake MSR from the guest to userspace.  KVM just acts as a
         pass through.
    
    Userspace is also able to inject a #GP.  This is demonstrated when
    MSR_IA32_XSS and MSR_IA32_FLUSH_CMD are misused in the test.  When this
    happens a #GP is initiated in userspace to be thrown in the guest which is
    handled gracefully by the exception handling framework introduced earlier
    in this series.
    
    Tests for the generic instruction emulator were also added.  For this to
    work the module parameter kvm.force_emulation_prefix=1 has to be enabled.
    If it isn't enabled the tests will be skipped.
    
    A test was also added to ensure the MSR permission bitmap is being set
    correctly by executing reads and writes of MSR_FS_BASE and MSR_GS_BASE
    in the guest while alternating which MSR userspace should intercept.  If
    the permission bitmap is being set correctly only one of the MSRs should
    be coming through at a time, and the guest should be able to read and
    write the other one directly.
    Signed-off-by: default avatarAaron Lewis <aaronlewis@google.com>
    Reviewed-by: default avatarAlexander Graf <graf@amazon.com>
    Message-Id: <20201012194716.3950330-5-aaronlewis@google.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    3cea1891
Makefile 5.4 KB