diff options
author | Radim Krčmář <rkrcmar@redhat.com> | 2017-05-18 20:37:31 +0300 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2017-05-19 20:59:27 +0300 |
commit | 34b0dadbdf698f9b277a31b2747b625b9a75ea1f (patch) | |
tree | 992122c8f5b91773bbc18d45d15184e2e43b7a9d | |
parent | f0367ee1d64d27fa08be2407df5c125442e885e3 (diff) | |
download | linux-34b0dadbdf698f9b277a31b2747b625b9a75ea1f.tar.xz |
KVM: x86/vPMU: fix undefined shift in intel_pmu_refresh()
Static analysis noticed that pmu->nr_arch_gp_counters can be 32
(INTEL_PMC_MAX_GENERIC) and therefore cannot be used to shift 'int'.
I didn't add BUILD_BUG_ON for it as we have a better checker.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Fixes: 25462f7f5295 ("KVM: x86/vPMU: Define kvm_pmu_ops to support vPMU function dispatch")
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>
Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
-rw-r--r-- | arch/x86/kvm/pmu_intel.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/x86/kvm/pmu_intel.c b/arch/x86/kvm/pmu_intel.c index 9d4a8504a95a..5ab4a364348e 100644 --- a/arch/x86/kvm/pmu_intel.c +++ b/arch/x86/kvm/pmu_intel.c @@ -294,7 +294,7 @@ static void intel_pmu_refresh(struct kvm_vcpu *vcpu) ((u64)1 << edx.split.bit_width_fixed) - 1; } - pmu->global_ctrl = ((1 << pmu->nr_arch_gp_counters) - 1) | + pmu->global_ctrl = ((1ull << pmu->nr_arch_gp_counters) - 1) | (((1ull << pmu->nr_arch_fixed_counters) - 1) << INTEL_PMC_IDX_FIXED); pmu->global_ctrl_mask = ~pmu->global_ctrl; |