]> xenbits.xensource.com Git - xen.git/commitdiff
x86/pv: Handle the Intel-specific MSR_MISC_ENABLE correctly
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 22 Sep 2020 15:15:39 +0000 (17:15 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 22 Sep 2020 15:15:39 +0000 (17:15 +0200)
This MSR doesn't exist on AMD hardware, and switching away from the safe
functions in the common MSR path was an erroneous change.

Partially revert the change.

This is XSA-333.

Fixes: 4fdc932b3cc ("x86/Intel: drop another 32-bit leftover")
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wl@xen.org>
xen/arch/x86/pv/emul-priv-op.c

index c23822c67541afc485b68fd000a1bb88b0f6e681..8120ded330b48d5efd392ab48d9cbdf540a8b685 100644 (file)
@@ -924,7 +924,8 @@ static int read_msr(unsigned int reg, uint64_t *val,
         return X86EMUL_OKAY;
 
     case MSR_IA32_MISC_ENABLE:
-        rdmsrl(reg, *val);
+        if ( rdmsr_safe(reg, *val) )
+            break;
         *val = guest_misc_enable(*val);
         return X86EMUL_OKAY;
 
@@ -1079,7 +1080,8 @@ static int write_msr(unsigned int reg, uint64_t val,
         break;
 
     case MSR_IA32_MISC_ENABLE:
-        rdmsrl(reg, temp);
+        if ( rdmsr_safe(reg, temp) )
+            break;
         if ( val != guest_misc_enable(temp) )
             goto invalid;
         return X86EMUL_OKAY;