On Wed, Mar 1, 2023 at 5:38 AM Wei Wang <wei.w.wang@xxxxxxxxx> wrote: > > Current KVM_BUG and KVM_BUG_ON assumes that 'cond' passed from callers is > 32-bit as it casts 'cond' to the type of int. This will be wrong if 'cond' > provided by a caller is 64-bit, e.g. an error code of 0xc0000d0300000000 > will be converted to 0, which is not expected. Improves the implementation > by using !!(cond) in KVM_BUG and KVM_BUG_ON. Compared to changing 'int' to > 'int64_t', this has less LOCs. Less LOC is nice to have, but please preserve the behavior that "cond" is evaluated only once by KVM_BUG() and KVM_BUG_ON(). i.e. KVM_BUG_ON(do_something(), kvm) should only result in a single call to do_something(). > > Fixes: 0b8f11737cff ("KVM: Add infrastructure and macro to mark VM as bugged") > Signed-off-by: Wei Wang <wei.w.wang@xxxxxxxxx> > --- > include/linux/kvm_host.h | 12 ++++-------- > 1 file changed, 4 insertions(+), 8 deletions(-) > > diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h > index f06635b24bd0..d77ddf82c5c8 100644 > --- a/include/linux/kvm_host.h > +++ b/include/linux/kvm_host.h > @@ -881,20 +881,16 @@ static inline void kvm_vm_bugged(struct kvm *kvm) > > #define KVM_BUG(cond, kvm, fmt...) \ > ({ \ > - int __ret = (cond); \ > - \ > - if (WARN_ONCE(__ret && !(kvm)->vm_bugged, fmt)) \ > + if (WARN_ONCE(!!cond && !(kvm)->vm_bugged, fmt)) \ > kvm_vm_bugged(kvm); \ > - unlikely(__ret); \ > + unlikely(!!cond); \ > }) > > #define KVM_BUG_ON(cond, kvm) \ > ({ \ > - int __ret = (cond); \ > - \ > - if (WARN_ON_ONCE(__ret && !(kvm)->vm_bugged)) \ > + if (WARN_ON_ONCE(!!(cond) && !(kvm)->vm_bugged)) \ > kvm_vm_bugged(kvm); \ > - unlikely(__ret); \ > + unlikely(!!(cond)); \ > })