On Wed, Mar 01, 2023 at 09:38:41PM +0800, 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. This changes its semantics. cond is evaluated twice. Also the return value of KVM_BUG_ON() is changed to bool. typeof? Perhaps return type of bool is okay, though. Thanks, > 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)); \ > }) > > static inline void kvm_vcpu_srcu_read_lock(struct kvm_vcpu *vcpu) > -- > 2.27.0 > -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>