Skip to content

Commit 5904ba5

Browse files
committed
KVM: SVM: Return -EINVAL instead of MSR_INVALID to signal out-of-range MSR
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>
1 parent 52f8217 commit 5904ba5

2 files changed

Lines changed: 9 additions & 11 deletions

File tree

arch/x86/kvm/svm/nested.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -223,10 +223,10 @@ int __init nested_svm_init_msrpm_merge_offsets(void)
223223
int i, j;
224224

225225
for (i = 0; i < ARRAY_SIZE(merge_msrs); i++) {
226-
u32 bit_nr = svm_msrpm_bit_nr(merge_msrs[i]);
226+
int bit_nr = svm_msrpm_bit_nr(merge_msrs[i]);
227227
u32 offset;
228228

229-
if (WARN_ON(bit_nr == MSR_INVALID))
229+
if (WARN_ON(bit_nr < 0))
230230
return -EIO;
231231

232232
/*
@@ -1354,9 +1354,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu)
13541354
static int nested_svm_exit_handled_msr(struct vcpu_svm *svm)
13551355
{
13561356
gpa_t base = svm->nested.ctl.msrpm_base_pa;
1357-
u32 msr, bit_nr;
1357+
int write, bit_nr;
13581358
u8 value, mask;
1359-
int write;
1359+
u32 msr;
13601360

13611361
if (!(vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_MSR_PROT)))
13621362
return NESTED_EXIT_HOST;
@@ -1365,7 +1365,7 @@ static int nested_svm_exit_handled_msr(struct vcpu_svm *svm)
13651365
bit_nr = svm_msrpm_bit_nr(msr);
13661366
write = svm->vmcb->control.exit_info_1 & 1;
13671367

1368-
if (bit_nr == MSR_INVALID)
1368+
if (bit_nr < 0)
13691369
return NESTED_EXIT_DONE;
13701370

13711371
if (kvm_vcpu_read_guest(&svm->vcpu, base + bit_nr / BITS_PER_BYTE,

arch/x86/kvm/svm/svm.h

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -619,9 +619,7 @@ static inline void svm_vmgexit_no_action(struct vcpu_svm *svm, u64 data)
619619
static_assert(SVM_MSRS_PER_RANGE == 8192);
620620
#define SVM_MSRPM_OFFSET_MASK (SVM_MSRS_PER_RANGE - 1)
621621

622-
#define MSR_INVALID 0xffffffffU
623-
624-
static __always_inline u32 svm_msrpm_bit_nr(u32 msr)
622+
static __always_inline int svm_msrpm_bit_nr(u32 msr)
625623
{
626624
int range_nr;
627625

@@ -636,7 +634,7 @@ static __always_inline u32 svm_msrpm_bit_nr(u32 msr)
636634
range_nr = 2;
637635
break;
638636
default:
639-
return MSR_INVALID;
637+
return -EINVAL;
640638
}
641639

642640
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)
647645
static inline rtype svm_##action##_msr_bitmap_##access(unsigned long *bitmap, \
648646
u32 msr) \
649647
{ \
650-
u32 bit_nr; \
648+
int bit_nr; \
651649
\
652650
bit_nr = svm_msrpm_bit_nr(msr); \
653-
if (bit_nr == MSR_INVALID) \
651+
if (bit_nr < 0) \
654652
return (rtype)true; \
655653
\
656654
return bitop##_bit(bit_nr + bit_rw, bitmap); \

0 commit comments

Comments
 (0)