[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 2/3] vm_event: svm: Fix incorrect monitored_msr() check



monitored_msr() is called with truncated MSR values (&= 0x1fff)
which doesn't match the original one, making the check incorrect.

Fix that by keeping the msr value intact and computing the bitmap
offset separately (in msr_offset).

Fixes: 2746088d9cb4 ("svm: don't clear interception for MSRs required for 
introspection")
Signed-off-by: Teddy Astie <teddy.astie@xxxxxxxxxx>
---
Should we multiply by 2 msr_offset instead of doing that in {set,clear}_bit() ?

 xen/arch/x86/hvm/svm/svm.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/xen/arch/x86/hvm/svm/svm.c b/xen/arch/x86/hvm/svm/svm.c
index 7a16289f85..d986f3aa8f 100644
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -234,23 +234,22 @@ svm_msrbit(unsigned long *msr_bitmap, uint32_t msr)
 void svm_intercept_msr(struct vcpu *v, uint32_t msr, int flags)
 {
     unsigned long *msr_bit;
+    unsigned int msr_offset = msr & 0x1fff;
     const struct domain *d = v->domain;
 
     msr_bit = svm_msrbit(v->arch.hvm.svm.msrpm, msr);
     if ( msr_bit == NULL )
         return;
 
-    msr &= 0x1fff;
-
     if ( flags & MSR_INTERCEPT_READ )
-         __set_bit(msr * 2, msr_bit);
+         __set_bit(msr_offset * 2, msr_bit);
     else if ( !monitored_msr(d, msr) )
-         __clear_bit(msr * 2, msr_bit);
+         __clear_bit(msr_offset * 2, msr_bit);
 
     if ( flags & MSR_INTERCEPT_WRITE )
-        __set_bit(msr * 2 + 1, msr_bit);
+        __set_bit(msr_offset * 2 + 1, msr_bit);
     else if ( !monitored_msr(d, msr) )
-        __clear_bit(msr * 2 + 1, msr_bit);
+        __clear_bit(msr_offset * 2 + 1, msr_bit);
 }
 
 #ifdef CONFIG_VM_EVENT
-- 
2.55.0



--
Teddy Astie | Vates XCP-ng Developer

XCP-ng & Xen Orchestra - Vates solutions

web: https://vates.tech

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.