OSDN Git Service

Merge tag 'v4.4.214' into 10
[sagit-ice-cold/kernel_xiaomi_msm8998.git] / arch / x86 / kvm / hyperv.c
index 62cf8c9..fce6fa0 100644 (file)
@@ -26,6 +26,7 @@
 #include "hyperv.h"
 
 #include <linux/kvm_host.h>
+#include <linux/nospec.h>
 #include <trace/events/kvm.h>
 
 #include "trace.h"
@@ -53,11 +54,12 @@ static int kvm_hv_msr_get_crash_data(struct kvm_vcpu *vcpu,
                                     u32 index, u64 *pdata)
 {
        struct kvm_hv *hv = &vcpu->kvm->arch.hyperv;
+       size_t size = ARRAY_SIZE(hv->hv_crash_param);
 
-       if (WARN_ON_ONCE(index >= ARRAY_SIZE(hv->hv_crash_param)))
+       if (WARN_ON_ONCE(index >= size))
                return -EINVAL;
 
-       *pdata = hv->hv_crash_param[index];
+       *pdata = hv->hv_crash_param[array_index_nospec(index, size)];
        return 0;
 }
 
@@ -96,11 +98,12 @@ static int kvm_hv_msr_set_crash_data(struct kvm_vcpu *vcpu,
                                     u32 index, u64 data)
 {
        struct kvm_hv *hv = &vcpu->kvm->arch.hyperv;
+       size_t size = ARRAY_SIZE(hv->hv_crash_param);
 
-       if (WARN_ON_ONCE(index >= ARRAY_SIZE(hv->hv_crash_param)))
+       if (WARN_ON_ONCE(index >= size))
                return -EINVAL;
 
-       hv->hv_crash_param[index] = data;
+       hv->hv_crash_param[array_index_nospec(index, size)] = data;
        return 0;
 }