• Yury Norov's avatar
    KVM: x86: hyper-v: fix type of valid_bank_mask · ea8c66fe
    Yury Norov authored
    In kvm_hv_flush_tlb(), valid_bank_mask is declared as unsigned long,
    but is used as u64, which is wrong for i386, and has been spotted by
    LKP after applying "KVM: x86: hyper-v: replace bitmap_weight() with
    hweight64()"
    
    https://lore.kernel.org/lkml/20220510154750.212913-12-yury.norov@gmail.com/
    
    But it's wrong even without that patch because now bitmap_weight()
    dereferences a word after valid_bank_mask on i386.
    
    >> include/asm-generic/bitops/const_hweight.h:21:76: warning: right shift count >= width of type
    +[-Wshift-count-overflow]
          21 | #define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
             |                                                                            ^~
       include/asm-generic/bitops/const_hweight.h:10:16: note: in definition of macro '__const_hweight8'
          10 |          ((!!((w) & (1ULL << 0))) +     \
             |                ^
       include/asm-generic/bitops/const_hweight.h:20:31: note: in expansion of macro '__const_hweight16'
          20 | #define __const_hweight32(w) (__const_hweight16(w) + __const_hweight16((w) >> 16))
             |                               ^~~~~~~~~~~~~~~~~
       include/asm-generic/bitops/const_hweight.h:21:54: note: in expansion of macro '__const_hweight32'
          21 | #define __const_hweight64(w) (__const_hweight32(w) + __const_hweight32((w) >> 32))
             |                                                      ^~~~~~~~~~~~~~~~~
       include/asm-generic/bitops/const_hweight.h:29:49: note: in expansion of macro '__const_hweight64'
          29 | #define hweight64(w) (__builtin_constant_p(w) ? __const_hweight64(w) : __arch_hweight64(w))
             |                                                 ^~~~~~~~~~~~~~~~~
       arch/x86/kvm/hyperv.c:1983:36: note: in expansion of macro 'hweight64'
        1983 |                 if (hc->var_cnt != hweight64(valid_bank_mask))
             |                                    ^~~~~~~~~
    
    CC: Borislav Petkov <bp@alien8.de>
    CC: Dave Hansen <dave.hansen@linux.intel.com>
    CC: H. Peter Anvin <hpa@zytor.com>
    CC: Ingo Molnar <mingo@redhat.com>
    CC: Jim Mattson <jmattson@google.com>
    CC: Joerg Roedel <joro@8bytes.org>
    CC: Paolo Bonzini <pbonzini@redhat.com>
    CC: Sean Christopherson <seanjc@google.com>
    CC: Thomas Gleixner <tglx@linutronix.de>
    CC: Vitaly Kuznetsov <vkuznets@redhat.com>
    CC: Wanpeng Li <wanpengli@tencent.com>
    CC: kvm@vger.kernel.org
    CC: linux-kernel@vger.kernel.org
    CC: x86@kernel.org
    Reported-by: default avatarkernel test robot <lkp@intel.com>
    Signed-off-by: default avatarYury Norov <yury.norov@gmail.com>
    Message-Id: <20220519171504.1238724-1-yury.norov@gmail.com>
    Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
    ea8c66fe
hyperv.c 67 KB