]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.19-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Apr 2022 05:31:24 +0000 (07:31 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Apr 2022 05:31:24 +0000 (07:31 +0200)
added patches:
kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch

queue-4.19/kvm-x86-forbid-vmm-to-set-synic-stimer-msrs-when-synic-wasn-t-activated.patch [new file with mode: 0644]
queue-4.19/series

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 (file)
index 0000000..a9ef900
--- /dev/null
@@ -0,0 +1,74 @@
+From b1e34d325397a33d97d845e312d7cf2a8b646b44 Mon Sep 17 00:00:00 2001
+From: Vitaly Kuznetsov <vkuznets@redhat.com>
+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 <vkuznets@redhat.com>
+
+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 <vkuznets@redhat.com>
+Message-Id: <20220325132140.25650-4-vkuznets@redhat.com>
+Cc: stable@vger.kernel.org
+Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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);
index 5b9481f877b3bf746548f45e05ce4c4c6870d0a8..325b3b9e819e86e01da56ac9f11f30f63856fb60 100644 (file)
@@ -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