From: Greg Kroah-Hartman Date: Tue, 5 Apr 2022 05:31:24 +0000 (+0200) Subject: 4.19-stable patches X-Git-Tag: v5.17.2~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=39d9ad07803bc4eb15cbd2953e18717c12d08978;p=thirdparty%2Fkernel%2Fstable-queue.git 4.19-stable patches added patches: kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch --- diff --git a/queue-4.19/kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch b/queue-4.19/kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch new file mode 100644 index 00000000000..a9ef9005961 --- /dev/null +++ b/queue-4.19/kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch @@ -0,0 +1,74 @@ +From b1e34d325397a33d97d845e312d7cf2a8b646b44 Mon Sep 17 00:00:00 2001 +From: Vitaly Kuznetsov +Date: Fri, 25 Mar 2022 14:21:40 +0100 +Subject: KVM: x86: Forbid VMM to set SYNIC/STIMER MSRs when SynIC wasn't activated + +From: Vitaly Kuznetsov + +commit b1e34d325397a33d97d845e312d7cf2a8b646b44 upstream. + +Setting non-zero values to SYNIC/STIMER MSRs activates certain features, +this should not happen when KVM_CAP_HYPERV_SYNIC{,2} was not activated. + +Note, it would've been better to forbid writing anything to SYNIC/STIMER +MSRs, including zeroes, however, at least QEMU tries clearing +HV_X64_MSR_STIMER0_CONFIG without SynIC. HV_X64_MSR_EOM MSR is somewhat +'special' as writing zero there triggers an action, this also should not +happen when SynIC wasn't activated. + +Signed-off-by: Vitaly Kuznetsov +Message-Id: <20220325132140.25650-4-vkuznets@redhat.com> +Cc: stable@vger.kernel.org +Signed-off-by: Paolo Bonzini +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kvm/hyperv.c | 17 ++++++++++++++++- + 1 file changed, 16 insertions(+), 1 deletion(-) + +--- a/arch/x86/kvm/hyperv.c ++++ b/arch/x86/kvm/hyperv.c +@@ -237,7 +237,7 @@ static int synic_set_msr(struct kvm_vcpu + struct kvm_vcpu *vcpu = synic_to_vcpu(synic); + int ret; + +- if (!synic->active && !host) ++ if (!synic->active && (!host || data)) + return 1; + + trace_kvm_hv_synic_set_msr(vcpu->vcpu_id, msr, data, host); +@@ -283,6 +283,9 @@ static int synic_set_msr(struct kvm_vcpu + case HV_X64_MSR_EOM: { + int i; + ++ if (!synic->active) ++ break; ++ + for (i = 0; i < ARRAY_SIZE(synic->sint); i++) + kvm_hv_notify_acked_sint(vcpu, i); + break; +@@ -544,6 +547,12 @@ static int stimer_start(struct kvm_vcpu_ + static int stimer_set_config(struct kvm_vcpu_hv_stimer *stimer, u64 config, + bool host) + { ++ struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer); ++ struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); ++ ++ if (!synic->active && (!host || config)) ++ return 1; ++ + trace_kvm_hv_stimer_set_config(stimer_to_vcpu(stimer)->vcpu_id, + stimer->index, config, host); + +@@ -558,6 +567,12 @@ static int stimer_set_config(struct kvm_ + static int stimer_set_count(struct kvm_vcpu_hv_stimer *stimer, u64 count, + bool host) + { ++ struct kvm_vcpu *vcpu = stimer_to_vcpu(stimer); ++ struct kvm_vcpu_hv_synic *synic = vcpu_to_synic(vcpu); ++ ++ if (!synic->active && (!host || count)) ++ return 1; ++ + trace_kvm_hv_stimer_set_count(stimer_to_vcpu(stimer)->vcpu_id, + stimer->index, count, host); + diff --git a/queue-4.19/series b/queue-4.19/series index 5b9481f877b..325b3b9e819 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -254,3 +254,4 @@ arm-dts-spear1340-update-serial-node-properties.patch arm-dts-spear13xx-update-spi-dma-properties.patch um-fix-uml_mconsole-stop-go.patch openvswitch-fixed-nd-target-mask-field-in-the-flow-dump.patch +kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch