]> xenbits.xensource.com Git - people/jgross/xen.git/commitdiff
x86/pv: Handle the Intel-specific MSR_MISC_ENABLE correctly
authorAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 22 Sep 2020 13:46:21 +0000 (15:46 +0200)
committerJan Beulich <jbeulich@suse.com>
Tue, 22 Sep 2020 13:46:21 +0000 (15:46 +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 d793eed4010f4135d4287bd03055962cf334423f..61071ae03a41b1290dc4be145758c06a07f172f5 100644 (file)
@@ -959,7 +959,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;
 
@@ -1102,7 +1103,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;