mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 23:05:25 -04:00
Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull x86 kvm fixes from Paolo Bonzini:
"x86 fixes. Everyone else is already in holiday mood apparently.
- Add a missing 'break' to fix param parsing in the rseq selftest
- Apply runtime updates to the _current_ CPUID when userspace is
setting CPUID, e.g. as part of vCPU hotplug, to fix a false
positive and to avoid dropping the pending update
- Disallow toggling KVM_MEM_GUEST_MEMFD on an existing memslot, as
it's not supported by KVM and leads to a use-after-free due to KVM
failing to unbind the memslot from the previously-associated
guest_memfd instance
- Harden against similar KVM_MEM_GUEST_MEMFD goofs, and prepare for
supporting flags-only changes on KVM_MEM_GUEST_MEMFD memlslots,
e.g. for dirty logging
- Set exit_code[63:32] to -1 (all 0xffs) when synthesizing a nested
SVM_EXIT_ERR (a.k.a. VMEXIT_INVALID) #VMEXIT, as VMEXIT_INVALID is
defined as -1ull (a 64-bit value)
- Update SVI when activating APICv to fix a bug where a
post-activation EOI for an in-service IRQ would effective be lost
due to SVI being stale
- Immediately refresh APICv controls (if necessary) on a nested
VM-Exit instead of deferring the update via KVM_REQ_APICV_UPDATE,
as the request is effectively ignored because KVM thinks the vCPU
already has the correct APICv settings"
* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm:
KVM: nVMX: Immediately refresh APICv controls as needed on nested VM-Exit
KVM: VMX: Update SVI during runtime APICv activation
KVM: nSVM: Set exit_code_hi to -1 when synthesizing SVM_EXIT_ERR (failed VMRUN)
KVM: nSVM: Clear exit_code_hi in VMCB when synthesizing nested VM-Exits
KVM: Harden and prepare for modifying existing guest_memfd memslots
KVM: Disallow toggling KVM_MEM_GUEST_MEMFD on an existing memslot
KVM: selftests: Add a CPUID testcase for KVM_SET_CPUID2 with runtime updates
KVM: x86: Apply runtime updates to current CPUID during KVM_SET_CPUID{,2}
KVM: selftests: Add missing "break" in rseq_test's param parsing
This commit is contained in:
@@ -215,6 +215,7 @@ int main(int argc, char *argv[])
|
||||
switch (opt) {
|
||||
case 'u':
|
||||
skip_sanity_check = true;
|
||||
break;
|
||||
case 'l':
|
||||
latency = atoi_paranoid(optarg);
|
||||
break;
|
||||
|
||||
@@ -155,6 +155,7 @@ struct kvm_cpuid2 *vcpu_alloc_cpuid(struct kvm_vm *vm, vm_vaddr_t *p_gva, struct
|
||||
static void set_cpuid_after_run(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_cpuid_entry2 *ent;
|
||||
struct kvm_sregs sregs;
|
||||
int rc;
|
||||
u32 eax, ebx, x;
|
||||
|
||||
@@ -162,6 +163,20 @@ static void set_cpuid_after_run(struct kvm_vcpu *vcpu)
|
||||
rc = __vcpu_set_cpuid(vcpu);
|
||||
TEST_ASSERT(!rc, "Setting unmodified CPUID after KVM_RUN failed: %d", rc);
|
||||
|
||||
/*
|
||||
* Toggle CR4 bits that affect dynamic CPUID feature flags to verify
|
||||
* setting unmodified CPUID succeeds with runtime CPUID updates.
|
||||
*/
|
||||
vcpu_sregs_get(vcpu, &sregs);
|
||||
if (kvm_cpu_has(X86_FEATURE_XSAVE))
|
||||
sregs.cr4 ^= X86_CR4_OSXSAVE;
|
||||
if (kvm_cpu_has(X86_FEATURE_PKU))
|
||||
sregs.cr4 ^= X86_CR4_PKE;
|
||||
vcpu_sregs_set(vcpu, &sregs);
|
||||
|
||||
rc = __vcpu_set_cpuid(vcpu);
|
||||
TEST_ASSERT(!rc, "Setting unmodified CPUID after KVM_RUN failed: %d", rc);
|
||||
|
||||
/* Changing CPU features is forbidden */
|
||||
ent = vcpu_get_cpuid_entry(vcpu, 0x7);
|
||||
ebx = ent->ebx;
|
||||
|
||||
Reference in New Issue
Block a user