KVM: x86: Use boolean return value for is_{pae,pse,paging}()
authorBinbin Wu <binbin.wu@linux.intel.com>
Wed, 22 Mar 2023 04:58:22 +0000 (12:58 +0800)
committerSean Christopherson <seanjc@google.com>
Wed, 22 Mar 2023 17:18:11 +0000 (10:18 -0700)
Convert is_{pae,pse,paging}() to use kvm_is_cr{0,4}_bit_set() and return
bools.  Returning an "int" requires not one, but two implicit casts, first
from "unsigned long" to "int", and then again to a "bool".  Both casts are
more than a bit dangerous; the ulong=>int casts would drop a bit on 64-bit
kernels _if_ the bits in question weren't in the lower 32 bits, and the
int=>bool cast can result in false negatives/positives, e.g. see commit
0c928ff26bd6 ("KVM: SVM: Fix benign "bool vs. int" comparison in
svm_set_cr0()").

Suggested-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Binbin Wu <binbin.wu@linux.intel.com>
Link: https://lore.kernel.org/r/20230322045824.22970-3-binbin.wu@linux.intel.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/svm.c
arch/x86/kvm/x86.h

index 19794a8ea28ca4403f0a43caa0b75fe5ee94c66f..70183d2271b5a2a69aed805ba77756d2449c969f 100644 (file)
@@ -1802,7 +1802,7 @@ void svm_set_cr0(struct kvm_vcpu *vcpu, unsigned long cr0)
 
        if (!npt_enabled) {
                hcr0 |= X86_CR0_PG | X86_CR0_WP;
-               if (old_paging != !!is_paging(vcpu))
+               if (old_paging != is_paging(vcpu))
                        svm_set_cr4(vcpu, kvm_read_cr4(vcpu));
        }
 
index 6d68c6772105014e3e321cc1c41fb0a8d0e79214..577b82358529534882572d2d4afe533d26304e85 100644 (file)
@@ -171,19 +171,19 @@ static inline bool mmu_is_nested(struct kvm_vcpu *vcpu)
        return vcpu->arch.walk_mmu == &vcpu->arch.nested_mmu;
 }
 
-static inline int is_pae(struct kvm_vcpu *vcpu)
+static inline bool is_pae(struct kvm_vcpu *vcpu)
 {
-       return kvm_read_cr4_bits(vcpu, X86_CR4_PAE);
+       return kvm_is_cr4_bit_set(vcpu, X86_CR4_PAE);
 }
 
-static inline int is_pse(struct kvm_vcpu *vcpu)
+static inline bool is_pse(struct kvm_vcpu *vcpu)
 {
-       return kvm_read_cr4_bits(vcpu, X86_CR4_PSE);
+       return kvm_is_cr4_bit_set(vcpu, X86_CR4_PSE);
 }
 
-static inline int is_paging(struct kvm_vcpu *vcpu)
+static inline bool is_paging(struct kvm_vcpu *vcpu)
 {
-       return likely(kvm_read_cr0_bits(vcpu, X86_CR0_PG));
+       return likely(kvm_is_cr0_bit_set(vcpu, X86_CR0_PG));
 }
 
 static inline bool is_pae_paging(struct kvm_vcpu *vcpu)