]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: SVM: Return -EINVAL instead of MSR_INVALID to signal out-of-range MSR
authorSean Christopherson <seanjc@google.com>
Tue, 10 Jun 2025 22:57:33 +0000 (15:57 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:07:35 +0000 (13:07 -0700)
Return -EINVAL instead of MSR_INVALID from svm_msrpm_bit_nr() to indicate
that the MSR isn't covered by one of the (currently) three MSRPM ranges,
and delete the MSR_INVALID macro now that all users are gone.

Link: https://lore.kernel.org/r/20250610225737.156318-29-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/svm/nested.c
arch/x86/kvm/svm/svm.h

index fb0ac87df00a8b9a381297088c3e639c1fa4f9c7..7ca45361ced36a56759eb30e25fbf0f6f877af0c 100644 (file)
@@ -223,10 +223,10 @@ int __init nested_svm_init_msrpm_merge_offsets(void)
        int i, j;
 
        for (i = 0; i < ARRAY_SIZE(merge_msrs); i++) {
-               u32 bit_nr = svm_msrpm_bit_nr(merge_msrs[i]);
+               int bit_nr = svm_msrpm_bit_nr(merge_msrs[i]);
                u32 offset;
 
-               if (WARN_ON(bit_nr == MSR_INVALID))
+               if (WARN_ON(bit_nr < 0))
                        return -EIO;
 
                /*
@@ -1354,9 +1354,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu)
 static int nested_svm_exit_handled_msr(struct vcpu_svm *svm)
 {
        gpa_t base = svm->nested.ctl.msrpm_base_pa;
-       u32 msr, bit_nr;
+       int write, bit_nr;
        u8 value, mask;
-       int write;
+       u32 msr;
 
        if (!(vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_MSR_PROT)))
                return NESTED_EXIT_HOST;
@@ -1365,7 +1365,7 @@ static int nested_svm_exit_handled_msr(struct vcpu_svm *svm)
        bit_nr = svm_msrpm_bit_nr(msr);
        write  = svm->vmcb->control.exit_info_1 & 1;
 
-       if (bit_nr == MSR_INVALID)
+       if (bit_nr < 0)
                return NESTED_EXIT_DONE;
 
        if (kvm_vcpu_read_guest(&svm->vcpu, base + bit_nr / BITS_PER_BYTE,
index e078df15f1d822e48533049d509d22224126ac0d..489adc2ca3f5c7a900f1bea54439f0f3cf23674e 100644 (file)
@@ -619,9 +619,7 @@ static inline void svm_vmgexit_no_action(struct vcpu_svm *svm, u64 data)
 static_assert(SVM_MSRS_PER_RANGE == 8192);
 #define SVM_MSRPM_OFFSET_MASK (SVM_MSRS_PER_RANGE - 1)
 
-#define MSR_INVALID                            0xffffffffU
-
-static __always_inline u32 svm_msrpm_bit_nr(u32 msr)
+static __always_inline int svm_msrpm_bit_nr(u32 msr)
 {
        int range_nr;
 
@@ -636,7 +634,7 @@ static __always_inline u32 svm_msrpm_bit_nr(u32 msr)
                range_nr = 2;
                break;
        default:
-               return MSR_INVALID;
+               return -EINVAL;
        }
 
        return range_nr * SVM_MSRPM_BYTES_PER_RANGE * BITS_PER_BYTE +
@@ -647,10 +645,10 @@ static __always_inline u32 svm_msrpm_bit_nr(u32 msr)
 static inline rtype svm_##action##_msr_bitmap_##access(unsigned long *bitmap,  \
                                                       u32 msr)                 \
 {                                                                              \
-       u32 bit_nr;                                                             \
+       int bit_nr;                                                             \
                                                                                \
        bit_nr = svm_msrpm_bit_nr(msr);                                         \
-       if (bit_nr == MSR_INVALID)                                                              \
+       if (bit_nr < 0)                                                         \
                return (rtype)true;                                             \
                                                                                \
        return bitop##_bit(bit_nr + bit_rw, bitmap);                            \