]> xenbits.xensource.com Git - xen.git/commitdiff
x86/hvm: Disallow unknown MSR_EFER bits
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 20 Jul 2018 15:42:04 +0000 (15:42 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Tue, 24 Jul 2018 10:25:53 +0000 (11:25 +0100)
It turns out that nothing ever prevented HVM guests from trying to set unknown
EFER bits.  Generally, this results in a vmentry failure.

For Intel hardware, all implemented bits are covered by the checks.

For AMD hardware, the only EFER bit which isn't covered by the checks is TCE
(which AFAICT is specific to AMD Fam15/16 hardware).  We never advertise TCE
in CPUID, but it isn't a security problem to have TCE unexpected enabled in
guest context.

Disallow the setting of bits outside of the EFER_KNOWN_MASK, which prevents
any vmentry failures for guests, yielding #GP instead.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/hvm/hvm.c

index 1816faa9b36feffd19d2ccc49950a4d583b3ff27..c099c617e87d22e62fe19319d3b359dcff545b32 100644 (file)
@@ -907,6 +907,9 @@ const char *hvm_efer_valid(const struct vcpu *v, uint64_t value,
     else
         p = &host_cpuid_policy;
 
+    if ( value & ~EFER_KNOWN_MASK )
+        return "Unknown bits set";
+
     if ( (value & EFER_SCE) && !p->extd.syscall )
         return "SCE without feature";