On Mon, Oct 31, 2022 at 05:42:56PM +0000, Sean Christopherson wrote: > On Mon, Oct 31, 2022, Gaosheng Cui wrote: > > Shifting signed 32-bit value by 31 bits is undefined, so changing > > significant bit to unsigned. The UBSAN warning calltrace like below: > > > > UBSAN: shift-out-of-bounds in arch/x86/kvm/reverse_cpuid.h:101:11 > > left shift of 1 by 31 places cannot be represented in type 'int' > > PeterZ is contending that this isn't actually undefined behavior given how the > kernel is compiled[*]. That said, I would be in favor of replacing the open-coded > shift with BIT() to make the code a bit more self-documenting, and that would > naturally fix this maybe-undefined-behavior issue. > > [*] https://lore.kernel.org/all/Y1%2FAaJOcgIc%2FINtv@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx I'm definitely in favour of updating this code; both your suggestion and hpa's suggestion look like sane changes. But I do feel that whatever UBSAN thing generated this warning needs to be fixed too. I'm fine with the compiler warning about this code -- but it must not claim undefined behaviour given the compiler flags we use.